diff --git a/README.md b/README.md
index f768e33..0c66521 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,9 @@
+---
+title: README
+date: 2024-11-23 14:26
+include_toc: true
+---
+
# React + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
@@ -6,3 +12,19 @@ Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+
+## Team
+- [Anton Pokydko](https://github.com/Pokydko/)
+- [Dmytro M.](https://github.com/Mitka92)
+- [Dmytro Orel](https://github.com/Decembric)
+- [Elmira Eminova ](https://github.com/ElmiraEminova)
+- [Igor Ievtushenko](https://github.com/ii777)
+- [Kateryna Artemieva](https://github.com/KaterynaArtemieva)
+- [Myroslava Hubar ](https://github.com/users/MyroslavaHubar)
+- [Oleksii O.](https://github.com/lexxus0)
+- [Olga Blud](https://github.com/olgablud)
+- [Serhii S.](https://github.com/ITStupak)
+- [Stas A.](https://github.com/StasAstenenko)
+- [Svitlana Tymchenko ](https://github.com/SvitLanaTy)
+- [Yuliia](https://github.com/JeinKh)
+- [Yuliia](https://github.com/Yuliia0905)
diff --git a/eslint.config.js b/eslint.config.js
index 238d2e4..1a8bd9f 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -1,38 +1,39 @@
-import js from '@eslint/js'
-import globals from 'globals'
-import react from 'eslint-plugin-react'
-import reactHooks from 'eslint-plugin-react-hooks'
-import reactRefresh from 'eslint-plugin-react-refresh'
+import js from "@eslint/js";
+import globals from "globals";
+import react from "eslint-plugin-react";
+import reactHooks from "eslint-plugin-react-hooks";
+import reactRefresh from "eslint-plugin-react-refresh";
export default [
- { ignores: ['dist'] },
+ { ignores: ["dist"] },
{
- files: ['**/*.{js,jsx}'],
+ files: ["**/*.{js,jsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
- ecmaVersion: 'latest',
+ ecmaVersion: "latest",
ecmaFeatures: { jsx: true },
- sourceType: 'module',
+ sourceType: "module",
},
},
- settings: { react: { version: '18.3' } },
+ settings: { react: { version: "18.3" } },
plugins: {
react,
- 'react-hooks': reactHooks,
- 'react-refresh': reactRefresh,
+ "react-hooks": reactHooks,
+ "react-refresh": reactRefresh,
},
rules: {
...js.configs.recommended.rules,
...react.configs.recommended.rules,
- ...react.configs['jsx-runtime'].rules,
+ ...react.configs["jsx-runtime"].rules,
...reactHooks.configs.recommended.rules,
- 'react/jsx-no-target-blank': 'off',
- 'react-refresh/only-export-components': [
- 'warn',
+ "react/jsx-no-target-blank": "off",
+ "react-refresh/only-export-components": [
+ "warn",
{ allowConstantExport: true },
],
+ "react/prop-types": 0,
},
},
-]
+];
diff --git a/index.html b/index.html
index 0c589ec..0c72660 100644
--- a/index.html
+++ b/index.html
@@ -2,9 +2,13 @@
-
+
+
- Vite + React
+ AquaTrack
diff --git a/package-lock.json b/package-lock.json
index 7711ccc..fa51987 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,8 +8,31 @@
"name": "frontend-template",
"version": "0.0.0",
"dependencies": {
+ "@hookform/resolvers": "^3.9.1",
+ "@reduxjs/toolkit": "^2.3.0",
+ "axios": "^1.7.7",
+ "clsx": "^2.1.1",
+ "date-fns": "^4.1.0",
+ "formik": "^2.4.6",
+ "izitoast": "^1.4.0",
+ "modern-normalize": "^3.0.1",
+ "prop-types": "^15.8.1",
"react": "^18.3.1",
- "react-dom": "^18.3.1"
+ "react-datepicker": "^7.5.0",
+ "react-dom": "^18.3.1",
+ "react-icon": "^1.0.0",
+ "react-icons": "^5.3.0",
+ "react-loader-spinner": "^6.1.6",
+ "react-popper": "^2.3.0",
+ "react-portal": "^4.2.2",
+ "react-redux": "^9.1.2",
+ "react-responsive": "^10.0.0",
+ "react-router-dom": "^7.0.1",
+ "recharts": "^2.14.1",
+ "redux": "^5.0.1",
+ "redux-persist": "^6.0.0",
+ "swiper": "^11.1.15",
+ "yup": "^1.4.0"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
@@ -21,9 +44,43 @@
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.14",
"globals": "^15.11.0",
- "vite": "^5.4.10"
+ "vite": "^5.4.10",
+ "vite-plugin-svg-sprite": "^0.5.2"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
+ "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1"
}
},
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==",
+ "license": "MIT"
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
@@ -519,6 +576,68 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
+ "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/react": {
+ "version": "0.26.28",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz",
+ "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.1.2",
+ "@floating-ui/utils": "^0.2.8",
+ "tabbable": "^6.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
+ "license": "MIT"
+ },
+ "node_modules/@hookform/resolvers": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.1.tgz",
+ "integrity": "sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react-hook-form": "^7.0.0"
+ }
+ },
"node_modules/@humanfs/core": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
@@ -580,6 +699,41 @@
"url": "https://github.com/sponsors/nzakas"
}
},
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@reduxjs/toolkit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.3.0.tgz",
+ "integrity": "sha512-WC7Yd6cNGfHx8zf+iu+Q1UPTfEcXhQ+ATi7CV1hlrSAaQBdlPzg7Ww/wJHNQem7qG9rxmWoFCDCPubSvFObGzA==",
+ "license": "MIT",
+ "dependencies": {
+ "immer": "^10.0.3",
+ "redux": "^5.0.1",
+ "redux-thunk": "^3.1.0",
+ "reselect": "^5.1.0"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17.0.0 || ^18",
+ "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-redux": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.27.3",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.3.tgz",
@@ -1027,12 +1181,100 @@
"@swc/counter": "^0.1.3"
}
},
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-array": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@types/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+ "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+ "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"dev": true
},
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
+ "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -1042,14 +1284,12 @@
"node_modules/@types/prop-types": {
"version": "15.7.13",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
- "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
- "dev": true
+ "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA=="
},
"node_modules/@types/react": {
"version": "18.3.12",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz",
"integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==",
- "dev": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -1064,6 +1304,18 @@
"@types/react": "*"
}
},
+ "node_modules/@types/stylis": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
+ "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==",
+ "license": "MIT"
+ },
"node_modules/@vitejs/plugin-react-swc": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.1.tgz",
@@ -1113,6 +1365,15 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -1134,6 +1395,33 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "node_modules/arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/array-buffer-byte-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
@@ -1170,6 +1458,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/array.prototype.findlast": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
@@ -1264,6 +1561,33 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true,
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -1279,12 +1603,81 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/axios": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
+ "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/babel-runtime": {
+ "version": "5.8.38",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz",
+ "integrity": "sha512-KpgoA8VE/pMmNCrnEeeXqFG24TIH11Z3ZaimIhJWsin8EbfZy3WzFKUTIan10ZIDgRVvi9EkLbruJElJC9dRlg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "core-js": "^1.0.0"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "node_modules/base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "dependencies": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1295,6 +1688,47 @@
"concat-map": "0.0.1"
}
},
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "dependencies": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cache-base/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
@@ -1323,6 +1757,15 @@
"node": ">=6"
}
},
+ "node_modules/camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1339,6 +1782,85 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/class-utils/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
+ "dev": true,
+ "dependencies": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -1357,12 +1879,68 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
+ "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
+ "node_modules/cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==",
+ "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -1377,14 +1955,301 @@
"node": ">= 8"
}
},
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.1",
+ "node_modules/css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/css-mediaquery": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
+ "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==",
+ "license": "BSD"
+ },
+ "node_modules/css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-select/node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/css-select/node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/css-select/node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/css-select/node_modules/domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/css-select/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/css-to-react-native": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
+ "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
"integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
"dev": true,
@@ -1434,6 +2299,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
"node_modules/debug": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
@@ -1451,12 +2326,36 @@
}
}
},
+ "node_modules/decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+ "license": "MIT"
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "node_modules/deepmerge": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
+ "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -1491,6 +2390,27 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -1503,6 +2423,87 @@
"node": ">=0.10.0"
}
},
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "node_modules/domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
"node_modules/es-abstract": {
"version": "1.23.5",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz",
@@ -1911,50 +2912,166 @@
"node": ">=0.10.0"
}
},
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
},
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "node_modules/expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
"dev": true,
"dependencies": {
- "flat-cache": "^4.0.0"
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "node_modules/expand-brackets/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-equals": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
+ "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/flat-cache": {
@@ -1976,6 +3093,26 @@
"integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
"dev": true
},
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
"node_modules/for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -1985,6 +3122,66 @@
"is-callable": "^1.1.3"
}
},
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/formik": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz",
+ "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://opencollective.com/formik"
+ }
+ ],
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "deepmerge": "^2.1.1",
+ "hoist-non-react-statics": "^3.3.0",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "react-fast-compare": "^2.0.1",
+ "tiny-warning": "^1.0.2",
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
+ "dev": true,
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -2071,6 +3268,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -2123,6 +3329,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -2192,6 +3410,78 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-value/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -2204,6 +3494,44 @@
"node": ">= 0.4"
}
},
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "node_modules/hyphenate-style-name": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz",
+ "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -2213,6 +3541,28 @@
"node": ">= 4"
}
},
+ "node_modules/image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+ "dev": true,
+ "bin": {
+ "image-size": "bin/image-size.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/immer": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz",
+ "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -2238,6 +3588,12 @@
"node": ">=0.8.19"
}
},
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
"node_modules/internal-slot": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
@@ -2252,6 +3608,27 @@
"node": ">= 0.4"
}
},
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/is-accessor-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+ "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/is-array-buffer": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
@@ -2311,6 +3688,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
"node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -2338,6 +3721,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-data-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+ "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/is-data-view": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
@@ -2368,6 +3763,28 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2440,6 +3857,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
"node_modules/is-number-object": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
@@ -2455,14 +3881,44 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
"dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -2583,6 +4039,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
@@ -2595,6 +4060,24 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
+ "node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isobject/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
"node_modules/iterator.prototype": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz",
@@ -2611,6 +4094,18 @@
"node": ">= 0.4"
}
},
+ "node_modules/izitoast": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/izitoast/-/izitoast-1.4.0.tgz",
+ "integrity": "sha512-Oc1X2wiQtPp39i5VpIjf3GJf5sfCtHKXZ5szx7RareyEeFLUlcEW0FSfBni28+Ul6KNKZRKzhVuWzSP4Xngh0w==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -2646,6 +4141,18 @@
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
"node_modules/jsx-ast-utils": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
@@ -2670,6 +4177,15 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -2683,6 +4199,20 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/loader-utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
+ "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -2698,6 +4228,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "license": "MIT"
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -2715,6 +4257,88 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
+ "dev": true,
+ "dependencies": {
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchmediaquery": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.4.2.tgz",
+ "integrity": "sha512-wrZpoT50ehYOudhDjt/YvUJc6eUzcdFPdmbizfgvswCKNHD1/OBOHYJpHie+HXpu6bSkEGieFMYk6VuutaiRfA==",
+ "license": "MIT",
+ "dependencies": {
+ "css-mediaquery": "^0.1.2"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
+ "node_modules/merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-obj": "^1.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -2727,6 +4351,52 @@
"node": "*"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/modern-normalize": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-3.0.1.tgz",
+ "integrity": "sha512-VqlMdYi59Uch6fnUPxnpijWUQe+TW6zeWCvyr6Mb7JibheHzSuAAoJi2c71ZwIaWKpECpGpYHoaaBp6rBRr+/g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -2737,7 +4407,6 @@
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -2751,17 +4420,157 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
+ "dev": true,
+ "dependencies": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-copy/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
"engines": {
"node": ">=0.10.0"
}
@@ -2787,6 +4596,27 @@
"node": ">= 0.4"
}
},
+ "node_modules/object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-visit/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object.assign": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
@@ -2837,6 +4667,27 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.pick/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object.values": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
@@ -2913,6 +4764,15 @@
"node": ">=6"
}
},
+ "node_modules/pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -2940,21 +4800,41 @@
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
- "node_modules/possible-typed-array-names": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
- "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
- "node": ">= 0.4"
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/postcss": {
- "version": "8.4.49",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "node_modules/posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"dev": true,
"funding": [
@@ -2980,6 +4860,83 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-prefix-selector": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz",
+ "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==",
+ "dev": true,
+ "peerDependencies": {
+ "postcss": ">4 <9"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "license": "MIT"
+ },
+ "node_modules/posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==",
+ "dev": true,
+ "dependencies": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==",
+ "dev": true,
+ "dependencies": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ }
+ },
+ "node_modules/posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "node_modules/posthtml-rename-id/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "dependencies": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -2993,13 +4950,25 @@
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.13.1"
}
},
+ "node_modules/property-expr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
+ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==",
+ "license": "MIT"
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -3009,6 +4978,19 @@
"node": ">=6"
}
},
+ "node_modules/query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -3020,6 +5002,32 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-datepicker": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-7.5.0.tgz",
+ "integrity": "sha512-6MzeamV8cWSOcduwePHfGqY40acuGlS1cG//ePHT6bVbLxWyqngaStenfH03n1wbzOibFggF66kWaBTb1SbTtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react": "^0.26.23",
+ "clsx": "^2.1.1",
+ "date-fns": "^3.6.0",
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17 || ^18",
+ "react-dom": "^16.9.0 || ^17 || ^18"
+ }
+ },
+ "node_modules/react-datepicker/node_modules/date-fns": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
@@ -3032,11 +5040,297 @@
"react": "^18.3.1"
}
},
+ "node_modules/react-fast-compare": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
+ "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==",
+ "license": "MIT"
+ },
+ "node_modules/react-hook-form": {
+ "version": "7.53.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.2.tgz",
+ "integrity": "sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19"
+ }
+ },
+ "node_modules/react-icon": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/react-icon/-/react-icon-1.0.0.tgz",
+ "integrity": "sha512-VzSlpBHnLanVw79mOxyq98hWDi6DlxK9qPiZ1bAK6bLurMBCaxO/jjyYUrRx9+JGLc/NbnwOmyE/W5Qglbb2QA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "babel-runtime": "^5.3.3",
+ "react": ">=0.12.0"
+ }
+ },
+ "node_modules/react-icons": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz",
+ "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-loader-spinner": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/react-loader-spinner/-/react-loader-spinner-6.1.6.tgz",
+ "integrity": "sha512-x5h1Jcit7Qn03MuKlrWcMG9o12cp9SNDVHVJTNRi9TgtGPKcjKiXkou4NRfLAtXaFB3+Z8yZsVzONmPzhv2ErA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-is": "^18.2.0",
+ "styled-components": "^6.1.2"
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-loader-spinner/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
+ "node_modules/react-popper": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz",
+ "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "react-fast-compare": "^3.0.1",
+ "warning": "^4.0.2"
+ },
+ "peerDependencies": {
+ "@popperjs/core": "^2.0.0",
+ "react": "^16.8.0 || ^17 || ^18",
+ "react-dom": "^16.8.0 || ^17 || ^18"
+ }
+ },
+ "node_modules/react-popper/node_modules/react-fast-compare": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
+ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==",
+ "license": "MIT"
+ },
+ "node_modules/react-portal": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-4.2.2.tgz",
+ "integrity": "sha512-vS18idTmevQxyQpnde0Td6ZcUlv+pD8GTyR42n3CHUQq9OHi1C4jDE4ZWEbEsrbrLRhSECYiao58cvocwMtP7Q==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.5.8"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0",
+ "react-dom": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0"
+ }
+ },
+ "node_modules/react-redux": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
+ "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^18.2.25",
+ "react": "^18.0",
+ "redux": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-responsive": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-10.0.0.tgz",
+ "integrity": "sha512-N6/UiRLGQyGUqrarhBZmrSmHi2FXSD++N5VbSKsBBvWfG0ZV7asvUBluSv5lSzdMyEVjzZ6Y8DL4OHABiztDOg==",
+ "license": "MIT",
+ "dependencies": {
+ "hyphenate-style-name": "^1.0.0",
+ "matchmediaquery": "^0.4.2",
+ "prop-types": "^15.6.1",
+ "shallow-equal": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.1.tgz",
+ "integrity": "sha512-WVAhv9oWCNsja5AkK6KLpXJDSJCQizOIyOd4vvB/+eHGbYx5vkhcmcmwWjQ9yqkRClogi+xjEg9fNEOd5EX/tw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/cookie": "^0.6.0",
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0",
+ "turbo-stream": "2.4.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.0.1.tgz",
+ "integrity": "sha512-duBzwAAiIabhFPZfDjcYpJ+f08TMbPMETgq254GWne2NW1ZwRHhZLj7tpSp8KGb7JvZzlLcjGUnqLxpZQVEPng==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.0.1"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/react-smooth": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz",
+ "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-equals": "^5.0.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/recharts": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.14.1.tgz",
+ "integrity": "sha512-xtWulflkA+/xu4/QClBdtZYN30dbvTHjxjkh5XTMrH/CQ3WGDDPHHa/LLKCbgoqz0z3UaSH2/blV1i6VNMeh1g==",
+ "license": "MIT",
+ "dependencies": {
+ "clsx": "^2.0.0",
+ "eventemitter3": "^4.0.1",
+ "lodash": "^4.17.21",
+ "react-is": "^18.3.1",
+ "react-smooth": "^4.0.0",
+ "recharts-scale": "^0.4.4",
+ "tiny-invariant": "^1.3.1",
+ "victory-vendor": "^36.6.8"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/recharts-scale": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
+ "license": "MIT",
+ "dependencies": {
+ "decimal.js-light": "^2.4.1"
+ }
+ },
+ "node_modules/recharts/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
+ "node_modules/redux": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+ "license": "MIT"
+ },
+ "node_modules/redux-persist": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz",
+ "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "redux": ">4.0.0"
+ }
+ },
+ "node_modules/redux-thunk": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+ "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "redux": "^5.0.0"
+ }
},
"node_modules/reflect.getprototypeof": {
"version": "1.0.6",
@@ -3059,6 +5353,50 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
@@ -3077,6 +5415,30 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/reselect": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+ "license": "MIT"
+ },
"node_modules/resolve": {
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
@@ -3103,6 +5465,22 @@
"node": ">=4"
}
},
+ "node_modules/resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
+ "deprecated": "https://github.com/lydell/resolve-url#deprecated",
+ "dev": true
+ },
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
"node_modules/rollup": {
"version": "4.27.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz",
@@ -3158,6 +5536,35 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
+ "dev": true,
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
"node_modules/safe-regex-test": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
@@ -3192,6 +5599,12 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
+ "license": "MIT"
+ },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -3224,20 +5637,47 @@
"node": ">= 0.4"
}
},
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "node_modules/set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
"dependencies": {
- "shebang-regex": "^3.0.0"
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/shebang-regex": {
- "version": "3.0.0",
+ "node_modules/shallow-equal": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-3.1.0.tgz",
+ "integrity": "sha512-pfVOw8QZIXpMbhBWvzBISicvToTiM5WBF1EeAUZDDSb5Dt29yl4AYbyywbJFSEsRUMr7gJaxqCdr4L3tQf9wVg==",
+ "license": "MIT"
+ },
+ "node_modules/shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
+ "license": "MIT"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
@@ -3263,15 +5703,243 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "dependencies": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/snapdragon/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
"dev": true,
+ "dependencies": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "node_modules/source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
+ "dev": true
+ },
+ "node_modules/split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/split-string/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
"node_modules/string.prototype.matchall": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
@@ -3314,78 +5982,558 @@
"integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.0",
- "es-object-atoms": "^1.0.0"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/styled-components": {
+ "version": "6.1.13",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz",
+ "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/is-prop-valid": "1.2.2",
+ "@emotion/unitless": "0.8.1",
+ "@types/stylis": "4.2.5",
+ "css-to-react-native": "3.2.0",
+ "csstype": "3.1.3",
+ "postcss": "8.4.38",
+ "shallowequal": "1.1.0",
+ "stylis": "4.3.2",
+ "tslib": "2.6.2"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/styled-components"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0",
+ "react-dom": ">= 16.8.0"
+ }
+ },
+ "node_modules/styled-components/node_modules/postcss": {
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/styled-components/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "license": "0BSD"
+ },
+ "node_modules/stylis": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz",
+ "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==",
+ "license": "MIT"
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "dependencies": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ }
+ },
+ "node_modules/svg-baker/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/chalk/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/svg-baker/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/svg-baker/node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "dev": true
+ },
+ "node_modules/svgo": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
+ "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "dev": true,
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/swiper": {
+ "version": "11.1.15",
+ "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.15.tgz",
+ "integrity": "sha512-IzWeU34WwC7gbhjKsjkImTuCRf+lRbO6cnxMGs88iVNKDwV+xQpBCJxZ4bNH6gSrIbbyVJ1kuGzo3JTtz//CBw==",
+ "funding": [
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/swiperjs"
+ },
+ {
+ "type": "open_collective",
+ "url": "http://opencollective.com/swiper"
+ }
+ ],
+ "engines": {
+ "node": ">= 4.7.0"
+ }
+ },
+ "node_modules/tabbable": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+ "license": "MIT"
+ },
+ "node_modules/tiny-case": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
+ "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==",
+ "license": "MIT"
+ },
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "license": "MIT"
+ },
+ "node_modules/tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
+ "license": "MIT"
+ },
+ "node_modules/to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=0.10.0"
}
},
- "node_modules/string.prototype.trimend": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
- "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
+ "is-number": "^7.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=8.0"
}
},
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "node_modules/to-regex/node_modules/define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=0.10.0"
}
},
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "node_modules/to-regex/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/to-regex/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "is-plain-object": "^2.0.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "node_modules/to-regex/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/toposort": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==",
+ "license": "MIT"
+ },
+ "node_modules/traverse": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.10.tgz",
+ "integrity": "sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==",
"dev": true,
+ "dependencies": {
+ "gopd": "^1.0.1",
+ "typedarray.prototype.slice": "^1.0.3",
+ "which-typed-array": "^1.1.15"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -3393,6 +6541,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/turbo-stream": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
+ "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
+ "license": "ISC"
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -3405,6 +6565,18 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/typed-array-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
@@ -3479,6 +6651,26 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/typedarray.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-errors": "^1.3.0",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-offset": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -3494,6 +6686,84 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
+ "dev": true,
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/unset-value/node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -3503,6 +6773,59 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
+ "deprecated": "Please see https://github.com/lydell/urix#deprecated",
+ "dev": true
+ },
+ "node_modules/use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
+ "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/victory-vendor": {
+ "version": "36.9.2",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
+ "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
+ "license": "MIT AND ISC",
+ "dependencies": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
"node_modules/vite": {
"version": "5.4.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
@@ -3562,6 +6885,30 @@
}
}
},
+ "node_modules/vite-plugin-svg-sprite": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/vite-plugin-svg-sprite/-/vite-plugin-svg-sprite-0.5.2.tgz",
+ "integrity": "sha512-iZ9fXP7/pA5WZ96m2VJ0VMvpLMxLqwPKCjvpzTUjqiNUHk2Yrxi0fBt2vqoZ9ealqIugv0J943m3+TWIOrs1lQ==",
+ "dev": true,
+ "dependencies": {
+ "micromatch": "^4.0.2",
+ "svg-baker": "~1.7.0",
+ "svg-parser": "^2.0.4",
+ "svgo": "^3.0.2"
+ },
+ "peerDependencies": {
+ "vite": "^2 || ^3 || ^4 || ^5"
+ }
+ },
+ "node_modules/warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -3676,9 +7023,47 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/yup": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz",
+ "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==",
+ "license": "MIT",
+ "dependencies": {
+ "property-expr": "^2.0.5",
+ "tiny-case": "^1.0.3",
+ "toposort": "^2.0.2",
+ "type-fest": "^2.19.0"
+ }
}
},
"dependencies": {
+ "@babel/runtime": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+ "requires": {
+ "regenerator-runtime": "^0.14.0"
+ }
+ },
+ "@emotion/is-prop-valid": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
+ "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==",
+ "requires": {
+ "@emotion/memoize": "^0.8.1"
+ }
+ },
+ "@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
+ },
+ "@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+ },
"@esbuild/aix-ppc64": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
@@ -3926,6 +7311,52 @@
"levn": "^0.4.1"
}
},
+ "@floating-ui/core": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
+ "requires": {
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "@floating-ui/dom": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
+ "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
+ "requires": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "@floating-ui/react": {
+ "version": "0.26.28",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz",
+ "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==",
+ "requires": {
+ "@floating-ui/react-dom": "^2.1.2",
+ "@floating-ui/utils": "^0.2.8",
+ "tabbable": "^6.0.0"
+ }
+ },
+ "@floating-ui/react-dom": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+ "requires": {
+ "@floating-ui/dom": "^1.0.0"
+ }
+ },
+ "@floating-ui/utils": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="
+ },
+ "@hookform/resolvers": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.1.tgz",
+ "integrity": "sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==",
+ "requires": {}
+ },
"@humanfs/core": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
@@ -3962,6 +7393,23 @@
"integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
"dev": true
},
+ "@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "peer": true
+ },
+ "@reduxjs/toolkit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.3.0.tgz",
+ "integrity": "sha512-WC7Yd6cNGfHx8zf+iu+Q1UPTfEcXhQ+ATi7CV1hlrSAaQBdlPzg7Ww/wJHNQem7qG9rxmWoFCDCPubSvFObGzA==",
+ "requires": {
+ "immer": "^10.0.3",
+ "redux": "^5.0.1",
+ "redux-thunk": "^3.1.0",
+ "reselect": "^5.1.0"
+ }
+ },
"@rollup/rollup-android-arm-eabi": {
"version": "4.27.3",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.3.tgz",
@@ -4193,12 +7641,86 @@
"@swc/counter": "^0.1.3"
}
},
+ "@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true
+ },
+ "@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
+ },
+ "@types/d3-array": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
+ },
+ "@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
+ },
+ "@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
+ },
+ "@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "requires": {
+ "@types/d3-color": "*"
+ }
+ },
+ "@types/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ=="
+ },
+ "@types/d3-scale": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+ "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
+ "requires": {
+ "@types/d3-time": "*"
+ }
+ },
+ "@types/d3-shape": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+ "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
+ "requires": {
+ "@types/d3-path": "*"
+ }
+ },
+ "@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="
+ },
+ "@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
+ },
"@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"dev": true
},
+ "@types/hoist-non-react-statics": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
+ "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
+ "requires": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
"@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -4208,14 +7730,12 @@
"@types/prop-types": {
"version": "15.7.13",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
- "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
- "dev": true
+ "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA=="
},
"@types/react": {
"version": "18.3.12",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz",
"integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==",
- "dev": true,
"requires": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -4230,6 +7750,16 @@
"@types/react": "*"
}
},
+ "@types/stylis": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
+ "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw=="
+ },
+ "@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
"@vitejs/plugin-react-swc": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.1.tgz",
@@ -4264,6 +7794,12 @@
"uri-js": "^4.2.2"
}
},
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true
+ },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -4279,6 +7815,24 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+ "dev": true
+ },
"array-buffer-byte-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
@@ -4303,6 +7857,12 @@
"is-string": "^1.0.7"
}
},
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
+ "dev": true
+ },
"array.prototype.findlast": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
@@ -4370,13 +7930,49 @@
"is-shared-array-buffer": "^1.0.2"
}
},
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
"available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
"requires": {
- "possible-typed-array-names": "^1.0.0"
+ "possible-typed-array-names": "^1.0.0"
+ }
+ },
+ "axios": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
+ "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
+ "requires": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "5.8.38",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz",
+ "integrity": "sha512-KpgoA8VE/pMmNCrnEeeXqFG24TIH11Z3ZaimIhJWsin8EbfZy3WzFKUTIan10ZIDgRVvi9EkLbruJElJC9dRlg==",
+ "peer": true,
+ "requires": {
+ "core-js": "^1.0.0"
}
},
"balanced-match": {
@@ -4385,6 +7981,47 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -4395,6 +8032,40 @@
"concat-map": "0.0.1"
}
},
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
"call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
@@ -4414,6 +8085,11 @@
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
+ "camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="
+ },
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -4424,6 +8100,66 @@
"supports-color": "^7.1.0"
}
},
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "dev": true
+ },
+ "clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -4439,12 +8175,49 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
+ "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
+ "dev": true
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
+ "cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==",
+ "peer": true
+ },
"cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -4456,11 +8229,208 @@
"which": "^2.0.1"
}
},
+ "css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="
+ },
+ "css-mediaquery": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
+ "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q=="
+ },
+ "css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ }
+ },
+ "entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true
+ }
+ }
+ },
+ "css-to-react-native": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
+ "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+ "requires": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "dev": true
+ },
+ "csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "requires": {
+ "css-tree": "~2.2.0"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ }
+ }
+ },
"csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "requires": {
+ "internmap": "1 - 2"
+ }
+ },
+ "d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
+ },
+ "d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="
+ },
+ "d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA=="
+ },
+ "d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "requires": {
+ "d3-color": "1 - 3"
+ }
+ },
+ "d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="
+ },
+ "d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "requires": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ }
+ },
+ "d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "requires": {
+ "d3-path": "^3.1.0"
+ }
+ },
+ "d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "requires": {
+ "d3-array": "2 - 3"
+ }
+ },
+ "d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "requires": {
+ "d3-time": "1 - 3"
+ }
+ },
+ "d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="
},
"data-view-buffer": {
"version": "1.0.1",
@@ -4495,6 +8465,11 @@
"is-data-view": "^1.0.1"
}
},
+ "date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="
+ },
"debug": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
@@ -4504,12 +8479,28 @@
"ms": "^2.1.3"
}
},
+ "decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
+ },
+ "decode-uri-component": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+ "dev": true
+ },
"deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "deepmerge": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
+ "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="
+ },
"define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -4532,6 +8523,20 @@
"object-keys": "^1.1.1"
}
},
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
"doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -4541,6 +8546,76 @@
"esutils": "^2.0.2"
}
},
+ "dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "requires": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
"es-abstract": {
"version": "1.23.5",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz",
@@ -4849,12 +8924,98 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
+ "fast-equals": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
+ "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ=="
+ },
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -4876,6 +9037,15 @@
"flat-cache": "^4.0.0"
}
},
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
"find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -4902,6 +9072,11 @@
"integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
"dev": true
},
+ "follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
+ },
"for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -4911,6 +9086,46 @@
"is-callable": "^1.1.3"
}
},
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
+ "dev": true
+ },
+ "form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "formik": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz",
+ "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==",
+ "requires": {
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "deepmerge": "^2.1.1",
+ "hoist-non-react-statics": "^3.3.0",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "react-fast-compare": "^2.0.1",
+ "tiny-warning": "^1.0.2",
+ "tslib": "^2.0.0"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
"fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -4966,6 +9181,12 @@
"get-intrinsic": "^1.2.4"
}
},
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
+ "dev": true
+ },
"glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -5000,6 +9221,15 @@
"get-intrinsic": "^1.1.3"
}
},
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
"has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -5042,6 +9272,66 @@
"has-symbols": "^1.0.3"
}
},
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -5051,12 +9341,56 @@
"function-bind": "^1.1.2"
}
},
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "hyphenate-style-name": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz",
+ "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw=="
+ },
"ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true
},
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+ "dev": true
+ },
+ "immer": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz",
+ "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw=="
+ },
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -5073,6 +9407,12 @@
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true
},
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
"internal-slot": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
@@ -5084,6 +9424,20 @@
"side-channel": "^1.0.4"
}
},
+ "internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+ "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
+ "dev": true,
+ "requires": {
+ "hasown": "^2.0.0"
+ }
+ },
"is-array-buffer": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
@@ -5122,6 +9476,12 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
"is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -5137,6 +9497,15 @@
"hasown": "^2.0.2"
}
},
+ "is-data-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+ "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
+ "dev": true,
+ "requires": {
+ "hasown": "^2.0.0"
+ }
+ },
"is-data-view": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
@@ -5155,6 +9524,22 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "dev": true
+ },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -5200,6 +9585,12 @@
"integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true
},
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
"is-number-object": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
@@ -5209,6 +9600,29 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -5286,6 +9700,12 @@
"get-intrinsic": "^1.2.4"
}
},
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
@@ -5298,6 +9718,23 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ }
+ }
+ },
"iterator.prototype": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz",
@@ -5311,6 +9748,17 @@
"set-function-name": "^2.0.1"
}
},
+ "izitoast": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/izitoast/-/izitoast-1.4.0.tgz",
+ "integrity": "sha512-Oc1X2wiQtPp39i5VpIjf3GJf5sfCtHKXZ5szx7RareyEeFLUlcEW0FSfBni28+Ul6KNKZRKzhVuWzSP4Xngh0w=="
+ },
+ "js-base64": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+ "dev": true
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -5343,6 +9791,15 @@
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
+ "json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
"jsx-ast-utils": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
@@ -5364,6 +9821,12 @@
"json-buffer": "3.0.1"
}
},
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -5374,6 +9837,17 @@
"type-check": "~0.4.0"
}
},
+ "loader-utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
+ "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ }
+ },
"locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -5383,6 +9857,16 @@
"p-locate": "^5.0.0"
}
},
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -5397,6 +9881,67 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "matchmediaquery": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.4.2.tgz",
+ "integrity": "sha512-wrZpoT50ehYOudhDjt/YvUJc6eUzcdFPdmbizfgvswCKNHD1/OBOHYJpHie+HXpu6bSkEGieFMYk6VuutaiRfA==",
+ "requires": {
+ "css-mediaquery": "^0.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.1"
+ }
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -5406,6 +9951,38 @@
"brace-expansion": "^1.1.7"
}
},
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "modern-normalize": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-3.0.1.tgz",
+ "integrity": "sha512-VqlMdYi59Uch6fnUPxnpijWUQe+TW6zeWCvyr6Mb7JibheHzSuAAoJi2c71ZwIaWKpECpGpYHoaaBp6rBRr+/g=="
+ },
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -5415,8 +9992,69 @@
"nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
},
"natural-compare": {
"version": "1.4.0",
@@ -5424,11 +10062,60 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
},
"object-inspect": {
"version": "1.13.3",
@@ -5442,6 +10129,23 @@
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
"object.assign": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
@@ -5477,6 +10181,23 @@
"es-object-atoms": "^1.0.0"
}
},
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
"object.values": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
@@ -5529,6 +10250,12 @@
"callsites": "^3.0.0"
}
},
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
+ "dev": true
+ },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -5550,7 +10277,18 @@
"picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
"dev": true
},
"possible-typed-array-names": {
@@ -5570,6 +10308,73 @@
"source-map-js": "^1.2.1"
}
},
+ "postcss-prefix-selector": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz",
+ "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "posthtml": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz",
+ "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.2.0",
+ "posthtml-render": "^1.0.5"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz",
+ "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.8.3",
+ "isobject": "^2.1.0"
+ }
+ },
+ "posthtml-rename-id": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz",
+ "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ }
+ }
+ },
+ "posthtml-render": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
+ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==",
+ "dev": true
+ },
+ "posthtml-svg-mode": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz",
+ "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==",
+ "dev": true,
+ "requires": {
+ "merge-options": "1.0.1",
+ "posthtml": "^0.9.2",
+ "posthtml-parser": "^0.2.1",
+ "posthtml-render": "^1.0.6"
+ }
+ },
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -5580,41 +10385,259 @@
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.13.1"
}
},
+ "property-expr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
+ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true
},
- "react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-datepicker": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-7.5.0.tgz",
+ "integrity": "sha512-6MzeamV8cWSOcduwePHfGqY40acuGlS1cG//ePHT6bVbLxWyqngaStenfH03n1wbzOibFggF66kWaBTb1SbTtQ==",
+ "requires": {
+ "@floating-ui/react": "^0.26.23",
+ "clsx": "^2.1.1",
+ "date-fns": "^3.6.0",
+ "prop-types": "^15.8.1"
+ },
+ "dependencies": {
+ "date-fns": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="
+ }
+ }
+ },
+ "react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ }
+ },
+ "react-fast-compare": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
+ "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
+ },
+ "react-hook-form": {
+ "version": "7.53.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.2.tgz",
+ "integrity": "sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==",
+ "peer": true,
+ "requires": {}
+ },
+ "react-icon": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/react-icon/-/react-icon-1.0.0.tgz",
+ "integrity": "sha512-VzSlpBHnLanVw79mOxyq98hWDi6DlxK9qPiZ1bAK6bLurMBCaxO/jjyYUrRx9+JGLc/NbnwOmyE/W5Qglbb2QA==",
+ "requires": {}
+ },
+ "react-icons": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz",
+ "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==",
+ "requires": {}
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "react-loader-spinner": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/react-loader-spinner/-/react-loader-spinner-6.1.6.tgz",
+ "integrity": "sha512-x5h1Jcit7Qn03MuKlrWcMG9o12cp9SNDVHVJTNRi9TgtGPKcjKiXkou4NRfLAtXaFB3+Z8yZsVzONmPzhv2ErA==",
+ "requires": {
+ "react-is": "^18.2.0",
+ "styled-components": "^6.1.2"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
+ }
+ }
+ },
+ "react-popper": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz",
+ "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==",
+ "requires": {
+ "react-fast-compare": "^3.0.1",
+ "warning": "^4.0.2"
+ },
+ "dependencies": {
+ "react-fast-compare": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
+ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
+ }
+ }
+ },
+ "react-portal": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-4.2.2.tgz",
+ "integrity": "sha512-vS18idTmevQxyQpnde0Td6ZcUlv+pD8GTyR42n3CHUQq9OHi1C4jDE4ZWEbEsrbrLRhSECYiao58cvocwMtP7Q==",
+ "requires": {
+ "prop-types": "^15.5.8"
+ }
+ },
+ "react-redux": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
+ "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==",
+ "requires": {
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.0.0"
+ }
+ },
+ "react-responsive": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-10.0.0.tgz",
+ "integrity": "sha512-N6/UiRLGQyGUqrarhBZmrSmHi2FXSD++N5VbSKsBBvWfG0ZV7asvUBluSv5lSzdMyEVjzZ6Y8DL4OHABiztDOg==",
+ "requires": {
+ "hyphenate-style-name": "^1.0.0",
+ "matchmediaquery": "^0.4.2",
+ "prop-types": "^15.6.1",
+ "shallow-equal": "^3.1.0"
+ }
+ },
+ "react-router": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.1.tgz",
+ "integrity": "sha512-WVAhv9oWCNsja5AkK6KLpXJDSJCQizOIyOd4vvB/+eHGbYx5vkhcmcmwWjQ9yqkRClogi+xjEg9fNEOd5EX/tw==",
+ "requires": {
+ "@types/cookie": "^0.6.0",
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0",
+ "turbo-stream": "2.4.0"
+ }
+ },
+ "react-router-dom": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.0.1.tgz",
+ "integrity": "sha512-duBzwAAiIabhFPZfDjcYpJ+f08TMbPMETgq254GWne2NW1ZwRHhZLj7tpSp8KGb7JvZzlLcjGUnqLxpZQVEPng==",
+ "requires": {
+ "react-router": "7.0.1"
+ }
+ },
+ "react-smooth": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz",
+ "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==",
+ "requires": {
+ "fast-equals": "^5.0.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ }
+ },
+ "react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
"requires": {
- "loose-envify": "^1.1.0"
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
}
},
- "react-dom": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
- "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "recharts": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.14.1.tgz",
+ "integrity": "sha512-xtWulflkA+/xu4/QClBdtZYN30dbvTHjxjkh5XTMrH/CQ3WGDDPHHa/LLKCbgoqz0z3UaSH2/blV1i6VNMeh1g==",
"requires": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.2"
+ "clsx": "^2.0.0",
+ "eventemitter3": "^4.0.1",
+ "lodash": "^4.17.21",
+ "react-is": "^18.3.1",
+ "react-smooth": "^4.0.0",
+ "recharts-scale": "^0.4.4",
+ "tiny-invariant": "^1.3.1",
+ "victory-vendor": "^36.6.8"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
+ }
}
},
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
+ "recharts-scale": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
+ "requires": {
+ "decimal.js-light": "^2.4.1"
+ }
+ },
+ "redux": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="
+ },
+ "redux-persist": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz",
+ "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==",
+ "requires": {}
+ },
+ "redux-thunk": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+ "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
+ "requires": {}
},
"reflect.getprototypeof": {
"version": "1.0.6",
@@ -5631,6 +10654,42 @@
"which-builtin-type": "^1.1.3"
}
},
+ "regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
"regexp.prototype.flags": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
@@ -5643,6 +10702,23 @@
"set-function-name": "^2.0.2"
}
},
+ "repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "dev": true
+ },
+ "reselect": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="
+ },
"resolve": {
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
@@ -5660,6 +10736,18 @@
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
"rollup": {
"version": "4.27.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz",
@@ -5700,6 +10788,21 @@
"isarray": "^2.0.5"
}
},
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
"safe-regex-test": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
@@ -5725,6 +10828,11 @@
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
},
+ "set-cookie-parser": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="
+ },
"set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -5751,6 +10859,28 @@
"has-property-descriptors": "^1.0.2"
}
},
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ }
+ },
+ "shallow-equal": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-3.1.0.tgz",
+ "integrity": "sha512-pfVOw8QZIXpMbhBWvzBISicvToTiM5WBF1EeAUZDDSb5Dt29yl4AYbyywbJFSEsRUMr7gJaxqCdr4L3tQf9wVg=="
+ },
+ "shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -5778,12 +10908,203 @@
"object-inspect": "^1.13.1"
}
},
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "dev": true
+ },
"source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ }
+ }
+ }
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==",
"dev": true
},
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
"string.prototype.matchall": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
@@ -5848,12 +11169,59 @@
"es-object-atoms": "^1.0.0"
}
},
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
+ "styled-components": {
+ "version": "6.1.13",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz",
+ "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==",
+ "requires": {
+ "@emotion/is-prop-valid": "1.2.2",
+ "@emotion/unitless": "0.8.1",
+ "@types/stylis": "4.2.5",
+ "css-to-react-native": "3.2.0",
+ "csstype": "3.1.3",
+ "postcss": "8.4.38",
+ "shallowequal": "1.1.0",
+ "stylis": "4.3.2",
+ "tslib": "2.6.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "requires": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ }
+ }
+ },
+ "stylis": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz",
+ "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg=="
+ },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -5869,6 +11237,326 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
+ "svg-baker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz",
+ "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "clone": "^2.1.1",
+ "he": "^1.1.1",
+ "image-size": "^0.5.1",
+ "loader-utils": "^1.1.0",
+ "merge-options": "1.0.1",
+ "micromatch": "3.1.0",
+ "postcss": "^5.2.17",
+ "postcss-prefix-selector": "^1.6.0",
+ "posthtml-rename-id": "^1.0",
+ "posthtml-svg-mode": "^1.0.3",
+ "query-string": "^4.3.2",
+ "traverse": "^0.6.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true
+ }
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz",
+ "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.2.2",
+ "define-property": "^1.0.0",
+ "extend-shallow": "^2.0.1",
+ "extglob": "^2.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^5.0.2",
+ "nanomatch": "^1.2.1",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ }
+ }
+ },
+ "svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "dev": true
+ },
+ "svgo": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
+ "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "swiper": {
+ "version": "11.1.15",
+ "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.15.tgz",
+ "integrity": "sha512-IzWeU34WwC7gbhjKsjkImTuCRf+lRbO6cnxMGs88iVNKDwV+xQpBCJxZ4bNH6gSrIbbyVJ1kuGzo3JTtz//CBw=="
+ },
+ "tabbable": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
+ },
+ "tiny-case": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
+ "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="
+ },
+ "tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
+ },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "toposort": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="
+ },
+ "traverse": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.10.tgz",
+ "integrity": "sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==",
+ "dev": true,
+ "requires": {
+ "gopd": "^1.0.1",
+ "typedarray.prototype.slice": "^1.0.3",
+ "which-typed-array": "^1.1.15"
+ }
+ },
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "turbo-stream": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
+ "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g=="
+ },
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -5878,6 +11566,11 @@
"prelude-ls": "^1.2.1"
}
},
+ "type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="
+ },
"typed-array-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
@@ -5931,6 +11624,20 @@
"possible-typed-array-names": "^1.0.0"
}
},
+ "typedarray.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-errors": "^1.3.0",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-offset": "^1.0.2"
+ }
+ },
"unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -5943,6 +11650,70 @@
"which-boxed-primitive": "^1.0.2"
}
},
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true
+ }
+ }
+ },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -5952,6 +11723,51 @@
"punycode": "^2.1.0"
}
},
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "use-sync-external-store": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
+ "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
+ "requires": {}
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "victory-vendor": {
+ "version": "36.9.2",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
+ "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
+ "requires": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
"vite": {
"version": "5.4.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
@@ -5964,6 +11780,26 @@
"rollup": "^4.20.0"
}
},
+ "vite-plugin-svg-sprite": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/vite-plugin-svg-sprite/-/vite-plugin-svg-sprite-0.5.2.tgz",
+ "integrity": "sha512-iZ9fXP7/pA5WZ96m2VJ0VMvpLMxLqwPKCjvpzTUjqiNUHk2Yrxi0fBt2vqoZ9ealqIugv0J943m3+TWIOrs1lQ==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^4.0.2",
+ "svg-baker": "~1.7.0",
+ "svg-parser": "^2.0.4",
+ "svgo": "^3.0.2"
+ }
+ },
+ "warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -6042,6 +11878,17 @@
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true
+ },
+ "yup": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz",
+ "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==",
+ "requires": {
+ "property-expr": "^2.0.5",
+ "tiny-case": "^1.0.3",
+ "toposort": "^2.0.2",
+ "type-fest": "^2.19.0"
+ }
}
}
}
diff --git a/package.json b/package.json
index f209553..e42b102 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,31 @@
"preview": "vite preview"
},
"dependencies": {
+ "@hookform/resolvers": "^3.9.1",
+ "@reduxjs/toolkit": "^2.3.0",
+ "axios": "^1.7.7",
+ "clsx": "^2.1.1",
+ "date-fns": "^4.1.0",
+ "formik": "^2.4.6",
+ "izitoast": "^1.4.0",
+ "modern-normalize": "^3.0.1",
+ "prop-types": "^15.8.1",
"react": "^18.3.1",
- "react-dom": "^18.3.1"
+ "react-datepicker": "^7.5.0",
+ "react-dom": "^18.3.1",
+ "react-icon": "^1.0.0",
+ "react-icons": "^5.3.0",
+ "react-loader-spinner": "^6.1.6",
+ "react-popper": "^2.3.0",
+ "react-portal": "^4.2.2",
+ "react-redux": "^9.1.2",
+ "react-responsive": "^10.0.0",
+ "react-router-dom": "^7.0.1",
+ "recharts": "^2.14.1",
+ "redux": "^5.0.1",
+ "redux-persist": "^6.0.0",
+ "swiper": "^11.1.15",
+ "yup": "^1.4.0"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
@@ -23,6 +46,7 @@
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.14",
"globals": "^15.11.0",
- "vite": "^5.4.10"
+ "vite": "^5.4.10",
+ "vite-plugin-svg-sprite": "^0.5.2"
}
}
diff --git a/public/assets/favicon.svg b/public/assets/favicon.svg
new file mode 100644
index 0000000..a0e5a34
--- /dev/null
+++ b/public/assets/favicon.svg
@@ -0,0 +1,3 @@
+
diff --git a/public/icons/index.js b/public/icons/index.js
new file mode 100644
index 0000000..fff198b
--- /dev/null
+++ b/public/icons/index.js
@@ -0,0 +1 @@
+export { default as icons } from './sprite.svg';
\ No newline at end of file
diff --git a/public/icons/sprite.svg b/public/icons/sprite.svg
new file mode 100644
index 0000000..9f9c40e
--- /dev/null
+++ b/public/icons/sprite.svg
@@ -0,0 +1,64 @@
+
\ No newline at end of file
diff --git a/public/vite.svg b/public/vite.svg
deleted file mode 100644
index e7b8dfb..0000000
--- a/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/App.css b/src/App.css
deleted file mode 100644
index b9d355d..0000000
--- a/src/App.css
+++ /dev/null
@@ -1,42 +0,0 @@
-#root {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-.logo {
- height: 6em;
- padding: 1.5em;
- will-change: filter;
- transition: filter 300ms;
-}
-.logo:hover {
- filter: drop-shadow(0 0 2em #646cffaa);
-}
-.logo.react:hover {
- filter: drop-shadow(0 0 2em #61dafbaa);
-}
-
-@keyframes logo-spin {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-@media (prefers-reduced-motion: no-preference) {
- a:nth-of-type(2) .logo {
- animation: logo-spin infinite 20s linear;
- }
-}
-
-.card {
- padding: 2em;
-}
-
-.read-the-docs {
- color: #888;
-}
diff --git a/src/App.jsx b/src/App.jsx
index f67355a..a54da3c 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,35 +1,46 @@
-import { useState } from 'react'
-import reactLogo from './assets/react.svg'
-import viteLogo from '/vite.svg'
-import './App.css'
+import { lazy, Suspense } from "react";
+import Loader from "./components/Loader/Loader";
+import PrivateRoute from "./components/PrivateRoute/PrivateRoute";
+import RestrictedRoute from "./components/RestrictedRoute/RestrictedRoute";
+import { Route, Routes } from "react-router-dom";
+// import { useDispatch, useSelector } from "react-redux";
+// import { selectAuthIsRefreshing } from "./redux/auth/selectors";
+// import { apiRefresh } from "./redux/auth/operations";
+
+const HomePage = lazy(() => import("./pages/HomePage/HomePage"));
+const SignInPage = lazy(() => import("./pages/SignInPage/SignInPage"));
+const SignUpPage = lazy(() => import("./pages/SignUpPage/SignUpPage"));
+const TrackerPage = lazy(() => import("./pages/TrackerPage/TrackerPage"));
function App() {
- const [count, setCount] = useState(0)
+ // const dispatch = useDispatch();
+ // const refresh = useSelector(selectAuthIsRefreshing);
+
+ // useEffect(() => {
+ // dispatch(apiRefresh());
+ // }, [dispatch]);
return (
- <>
-
- Vite + React
-
-
-
- Edit src/App.jsx and save to test HMR
-
-
-
- Click on the Vite and React logos to learn more
-
- >
- )
+
+ }>
+
+ } />
+ } />}
+ />
+ } />}
+ />
+ } />}
+ />
+
+
+
+ );
}
-export default App
+export default App;
diff --git a/src/assets/react.svg b/src/assets/react.svg
deleted file mode 100644
index 6c87de9..0000000
--- a/src/assets/react.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/components/AddWaterBtn/.gitkeep b/src/components/AddWaterBtn/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/AddWaterBtn/AddWaterBtn.jsx b/src/components/AddWaterBtn/AddWaterBtn.jsx
new file mode 100644
index 0000000..4981bdb
--- /dev/null
+++ b/src/components/AddWaterBtn/AddWaterBtn.jsx
@@ -0,0 +1,41 @@
+import { useState } from "react";
+import css from "./AddWaterBtn.module.css";
+import clsx from "clsx";
+
+import WaterModal from "../../modals/WaterModal/WaterModal.jsx";
+
+const AddWaterBtn = ({ variant = "default" }) => {
+ const [logOutModalisOpen, setLogOutModalisOpen] = useState(false);
+ const openLogOutModal = () => setLogOutModalisOpen(true);
+ const closeLogOutModal = () => setLogOutModalisOpen(false);
+
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+export default AddWaterBtn;
diff --git a/src/components/AddWaterBtn/AddWaterBtn.module.css b/src/components/AddWaterBtn/AddWaterBtn.module.css
new file mode 100644
index 0000000..f331ebc
--- /dev/null
+++ b/src/components/AddWaterBtn/AddWaterBtn.module.css
@@ -0,0 +1,89 @@
+.addBtn {
+ cursor: pointer;
+ font-weight: 700;
+ letter-spacing: 0.01em;
+ border: none;
+}
+
+.defaultBtn {
+ position: absolute;
+ right: 16px;
+ bottom: 32px;
+ font-size: 14px;
+ line-height: 129%;
+ background-color: #323f47;
+ min-width: 140px;
+ border-radius: 30px;
+ padding: 14px 20px;
+ color: #ffffff;
+ stroke: #ffffff;
+ transition: color 250ms cubic-bezier(0.4, 0, 0.2, 1),
+ stroke 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.defaultBtn:hover {
+ color: #9be1a0;
+ stroke: #9be1a0;
+}
+
+.addBtnAlt {
+ min-width: 124px;
+ font-size: 16px;
+ line-height: 150%;
+ text-align: center;
+ color: #323f47;
+ background-color: transparent;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.icon {
+ vertical-align: middle;
+ margin-right: 10px;
+ transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.icon:hover {
+ transform: scale(1.1);
+}
+.addBtnAlt .iconAlt {
+ border-radius: 30px;
+ background-color: #9be1a0;
+ stroke: #323f47;
+ padding: 4px;
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1),
+ stroke 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.addBtnAlt:hover .iconAlt {
+ background-color: #323f47;
+ stroke: #ffffff;
+}
+
+/*
+.iconAlt {
+ border-radius: 30px;
+ background-color: #9be1a0;
+ stroke: #323f47;
+ padding: 4px;
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1),
+ stroke 250ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.iconAlt:hover {
+ background-color: #323f47;
+ stroke: #ffffff;
+} */
+
+@media only screen and (min-width: 768px) {
+ .addBtn {
+ right: 32px;
+ bottom: 64px;
+ }
+
+ .defaultBtn {
+ min-width: 178px;
+ padding: 18px 30px;
+ font-size: 16px;
+ }
+}
diff --git a/src/components/AdvantagesSection/.gitkeep b/src/components/AdvantagesSection/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/AdvantagesSection/AdvantagesSection.jsx b/src/components/AdvantagesSection/AdvantagesSection.jsx
new file mode 100644
index 0000000..a676415
--- /dev/null
+++ b/src/components/AdvantagesSection/AdvantagesSection.jsx
@@ -0,0 +1,109 @@
+import { useEffect } from "react";
+import { useSelector, useDispatch } from "react-redux";
+
+import css from "./AdvantagesSection.module.css";
+
+import avatar1M from "./../../img/advantages/avatar1M.webp";
+import avatar1M2x from "./../../img/advantages/avatar1M@2x.webp";
+import avatar1D from "./../../img/advantages/avatar1D.webp";
+import avatar1D2x from "./../../img/advantages/avatar1D@2x.webp";
+import avatar2M from "./../../img/advantages/avatar2M.webp";
+import avatar2M2x from "./../../img/advantages/avatar2M@2x.webp";
+import avatar2D from "./../../img/advantages/avatar2D.webp";
+import avatar2D2x from "./../../img/advantages/avatar2D@2x.webp";
+import avatar3M from "./../../img/advantages/avatar3M.webp";
+import avatar3M2x from "./../../img/advantages/avatar3M@2x.webp";
+import avatar3D from "./../../img/advantages/avatar3D.webp";
+import avatar3D2x from "./../../img/advantages/avatar3D@2x.webp";
+
+import { selectAllUsers } from "../../redux/auth/selectors.js";
+import { getAllUsers } from "../../redux/auth/operations.js";
+
+const AdvantagesSection = () => {
+ const dispatch = useDispatch();
+ const count = useSelector(selectAllUsers);
+
+ useEffect(() => {
+ dispatch(getAllUsers());
+ }, [dispatch]);
+
+ return (
+
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+ Our {!count ? " " : {count}}{" "}
+ happy
+
+ customers
+
+
+
+
+
+
+ -
+
+
+ -
+
View statistics
+
+ -
+
Personal rate setting
+
+
+
+
+
+ );
+};
+
+export default AdvantagesSection;
diff --git a/src/components/AdvantagesSection/AdvantagesSection.module.css b/src/components/AdvantagesSection/AdvantagesSection.module.css
new file mode 100644
index 0000000..7309883
--- /dev/null
+++ b/src/components/AdvantagesSection/AdvantagesSection.module.css
@@ -0,0 +1,228 @@
+.bgimage {
+ background-image: url("./../../img/advantages/girlM.webp");
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ border-radius: 30px;
+ min-height: 353px;
+ width: 100%;
+}
+
+@media only screen and (min-resolution: 192dpi) {
+ .bgimage {
+ background-image: url("./../../img/advantages/girlM@2x.webp");
+ }
+}
+
+.advantages_section {
+ position: relative;
+}
+
+.customers {
+ display: flex;
+ gap: 65px;
+ border-radius: 30px;
+ padding: 10px 14px;
+ box-shadow: 0 4px 50px 0 rgba(0, 0, 0, 0.1);
+ background: var(--background-primary-light);
+ position: absolute;
+ left: 16px;
+ top: 209px;
+ height: 48px;
+}
+
+.customers_list {
+ position: relative;
+ display: flex;
+ height: 28px;
+}
+
+.customers_item {
+ position: absolute;
+}
+
+.customers_item:nth-child(3) {
+ z-index: 1;
+ left: 36px;
+}
+
+.customers_item:nth-child(2) {
+ z-index: 2;
+ left: 18px;
+}
+
+.customers_item:nth-child(1) {
+ z-index: 3;
+}
+
+.customers_text {
+ font-weight: 700;
+ font-size: 12px;
+ line-height: 1.16667;
+ color: var(--background-primary-dark);
+}
+
+.count {
+ display: inline-block;
+ animation: countUp 2.5s ease-out;
+}
+
+@keyframes countUp {
+ from {
+ transform: scale(1.2);
+ opacity: 0;
+ }
+ to {
+ transform: scale(1);
+ opacity: 1;
+ }
+}
+
+.span {
+ color: var(--accent);
+}
+
+.benefits {
+ position: absolute;
+ top: 265px;
+ left: 159px;
+ width: 168px;
+}
+
+.benefits_list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+}
+.benefits_item {
+ border-radius: 30px;
+ padding: 9px 12px;
+}
+
+.benefits_item:nth-child(1) {
+ background: var(--background-primary-dark);
+}
+
+.benefits_item:nth-child(2) {
+ background-color: var(--accent);
+}
+.benefits_item:nth-child(3) {
+ background-color: var(--background-primary-light);
+}
+
+.flex {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: row;
+ gap: 4px;
+}
+
+.ellipse13 {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background: var(--accent);
+}
+
+.text {
+ font-weight: 700;
+ font-size: 8px;
+ line-height: 1;
+ letter-spacing: -0.01em;
+ text-align: center;
+ color: var(--background-primary-dark);
+}
+
+.benefits_item:first-child .text {
+ color: var(--text-primary-light);
+}
+
+@media (max-width: 374px) {
+ .customers {
+ left: 8px;
+ }
+
+ .benefits {
+ left: 110px;
+ }
+}
+
+@media (min-width: 768px) {
+ .bgimage {
+ min-height: 446px;
+ background-image: url("./../../img/advantages/girlT.webp");
+ }
+
+ .customers {
+ padding: 10px 20px;
+ gap: 107px;
+ left: 32px;
+ top: 283px;
+ height: 67px;
+ }
+
+ .customers_list {
+ height: 47px;
+ }
+
+ .customers_text {
+ font-size: 15px;
+ line-height: 1.5;
+ }
+
+ .customers_item:nth-child(3) {
+ left: 56px;
+ }
+
+ .customers_item:nth-child(2) {
+ left: 28px;
+ }
+
+ .benefits {
+ top: 336px;
+ left: 430px;
+ width: 242px;
+ }
+
+ .benefits_list {
+ gap: 10px;
+ }
+
+ .benefits_item {
+ padding: 11px 16px;
+ }
+
+ .text {
+ font-size: 12px;
+ }
+}
+
+@media only screen and (min-width: 768px) and (min-resolution: 192dpi) {
+ .bgimage {
+ background-image: url("./../../img/advantages/girlT@2x.webp");
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .bgimage {
+ width: 672px;
+ background-image: url("./../../img/advantages/girlD.webp");
+ }
+
+ .customers {
+ left: 32px;
+ top: 537px;
+ }
+
+ .benefits {
+ top: 594px;
+ left: 398px;
+ }
+}
+
+@media only screen and (min-width: 1440px) and (min-resolution: 192dpi) {
+ .bgimage {
+ background-image: url("./../../img/advantages/girlD@2x.webp");
+ }
+}
diff --git a/src/components/Calendar/.gitkeep b/src/components/Calendar/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/Calendar/Calendar.jsx b/src/components/Calendar/Calendar.jsx
new file mode 100644
index 0000000..a62cf4c
--- /dev/null
+++ b/src/components/Calendar/Calendar.jsx
@@ -0,0 +1,115 @@
+import { useEffect, useMemo } from "react";
+import { useDispatch, useSelector } from "react-redux";
+import css from "./Calendar.module.css";
+import {
+ selectChosenMonth,
+ selectDaysDrinking,
+ selectIsLoading,
+} from "../../redux/water/selectors";
+import { selectDaysNotAsInWeek } from "../../redux/settings/selectors";
+import CalendarItem from "../CalendarItem/CalendarItem";
+import { fetchWaterData } from "../../redux/water/operations";
+import Loader from "../Loader/Loader";
+
+const Calendar = () => {
+ const dispatch = useDispatch();
+ const dateToShow = useSelector(selectChosenMonth);
+ const daysDrinking = useSelector(selectDaysDrinking);
+ const daysAsInWeek = useSelector(selectDaysNotAsInWeek) ? false : true;
+ const isLoading = useSelector(selectIsLoading);
+ const mobileDevice = window.matchMedia("(max-width: 767px)").matches;
+
+ const [today_year, today_month, today_day] = new Date() // month починаються з нуля в Date
+ .toLocaleDateString("en-CA")
+ .split("-");
+
+ const [year, month] = dateToShow.split("-");
+ const firstDayOfWeek = 0; // Перший день місяця (0 - понеділок, 1 - неділя)
+
+ useEffect(() => {
+ dispatch(fetchWaterData({ type: "month", date: dateToShow }));
+ }, [dateToShow, dispatch]);
+
+ const isActiveDay = (day) =>
+ today_day == day && today_month == month && today_year == year;
+
+ const calendarDays = useMemo(() => {
+ const totalDaysInMonth = new Date(year, month, 0).getDate();
+ const daysArray = Array.from({ length: totalDaysInMonth }, (_, i) => ({
+ day: i + 1,
+ percent: 0,
+ totalAmount: 0,
+ currentDailyNorm: 0,
+ }));
+
+ // Перший прохід: групуємо дані за днями
+ daysDrinking?.forEach((dayData) => {
+ // тимчасова перевірка, поки сервер присилає більше ніж треба
+ if (dayData.date.slice(5, 7) != month || dayData.date.slice(0, 4) != year)
+ return;
+
+ const currentDay = daysArray[parseInt(dayData.date.slice(8, 10)) - 1];
+ currentDay.totalAmount += dayData.amount;
+
+ // Взяти найсвіжішу currentDailyNorm
+ if (!currentDay.updatedAt || dayData.updatedAt > currentDay.updatedAt) {
+ currentDay.updatedAt = dayData.updatedAt;
+ currentDay.currentDailyNorm = dayData.currentDailyNorm;
+ }
+ });
+
+ // Другий прохід: обчислюємо відсотки
+ daysArray.forEach((day) => {
+ if (day.currentDailyNorm)
+ day.percent = Math.round(
+ (day.totalAmount / day.currentDailyNorm) * 100
+ );
+ });
+
+ if (!daysAsInWeek) return daysArray;
+
+ // Додаємо порожні дні перед початком місяця
+ const firstDayOfMonth = new Date(
+ year,
+ parseInt(month) - 1,
+ firstDayOfWeek
+ ).getDay();
+ const emptyDaysBefore = Array.from({ length: firstDayOfMonth }, () => ({
+ day: null,
+ percent: null,
+ totalAmount: null,
+ currentDailyNorm: null,
+ }));
+
+ return [...emptyDaysBefore, ...daysArray];
+ }, [daysDrinking, daysAsInWeek, month, year]);
+
+ return (
+
+ {isLoading ? (
+
+ ) : (
+
+ {calendarDays.map(({ day, percent }, index) => (
+
+ ))}
+
+ )}
+
+ );
+};
+
+export default Calendar;
+// по роботі з датами: https://uk.javascript.info/date
diff --git a/src/components/Calendar/Calendar.module.css b/src/components/Calendar/Calendar.module.css
new file mode 100644
index 0000000..5e6865e
--- /dev/null
+++ b/src/components/Calendar/Calendar.module.css
@@ -0,0 +1,53 @@
+/* .calendar {} */
+
+.grid {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ grid-auto-rows: minmax(10px, 1fr);
+ row-gap: 20px;
+ align-items: start;
+ justify-items: center;
+ max-height: 300px;
+ column-gap: 18px;
+}
+@media only screen and (min-width: 768px) {
+ .grid {
+ gap: 15px 62px;
+ max-height: 305px;
+ }
+}
+@media only screen and (min-width: 1440px) {
+ .grid {
+ gap: 15px 57px;
+ }
+}
+
+/* ===== 8-days week view ===== */
+.grid8 {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ row-gap: 20px;
+ align-items: start;
+ justify-items: center;
+ max-height: 300px;
+ column-gap: 18px;
+}
+@media only screen and (min-width: 768px) {
+ .grid8 {
+ grid-template-columns: repeat(8, 1fr);
+ gap: 15px 48px;
+ max-height: 305px;
+ }
+}
+@media only screen and (min-width: 1440px) {
+ .grid8 {
+ gap: 15px 43px;
+ }
+}
+/* ===== 8-days styles end ===== */
+
+@media only screen and (max-width: 374px) {
+ .grid {
+ column-gap: calc(0.33 * (100vw - 320px));
+ }
+}
diff --git a/src/components/CalendarItem/.gitkeep b/src/components/CalendarItem/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/CalendarItem/CalendarItem.jsx b/src/components/CalendarItem/CalendarItem.jsx
new file mode 100644
index 0000000..4841fdc
--- /dev/null
+++ b/src/components/CalendarItem/CalendarItem.jsx
@@ -0,0 +1,36 @@
+import { useDispatch } from "react-redux";
+import css from "./CalendarItem.module.css";
+import { fetchWaterData } from "../../redux/water/operations";
+import { setChosenDate } from "../../redux/water/slice";
+
+const CalendarItem = ({ month, day, percent, isActive }) => {
+ const dispatch = useDispatch();
+
+ const handleClick = () => {
+ const date = `${month}-${day.toString().padStart(2, "0")}`;
+ dispatch(setChosenDate(date));
+ dispatch(fetchWaterData({ type: "day", date }));
+ };
+
+ return (
+
+ );
+};
+
+export default CalendarItem;
diff --git a/src/components/CalendarItem/CalendarItem.module.css b/src/components/CalendarItem/CalendarItem.module.css
new file mode 100644
index 0000000..09ffe09
--- /dev/null
+++ b/src/components/CalendarItem/CalendarItem.module.css
@@ -0,0 +1,72 @@
+.item {
+ display: flex;
+ flex-direction: column;
+ align-items: start;
+ width: 28px;
+ height: 44px;
+ border: none;
+ background-color: transparent;
+ cursor: pointer;
+}
+:global(.grid7desktop) .item {
+ flex-direction: row;
+}
+
+.item.empty {
+ background-color: transparent;
+ cursor: default;
+}
+
+.dayNumber {
+ display: inline-flex;
+ flex-shrink: 0;
+ justify-content: center;
+ align-items: center;
+ width: 28px;
+ height: 28px;
+ margin-bottom: 2px;
+ border-radius: 50%;
+ background-color: rgba(50, 63, 71, 0.2);
+ font-weight: 700;
+ font-size: 14px;
+ font-family: "Poppins", sans-serif;
+ letter-spacing: -0.01em;
+}
+
+.percent {
+ color: rgba(47, 47, 47, 0.6);
+ font-weight: 400;
+ font-size: 10px;
+ font-family: "Poppins", sans-serif;
+ margin: 0 auto;
+}
+
+.drinkALot .dayNumber {
+ background-color: #fff;
+}
+
+.item.active .dayNumber {
+ background-color: #323f47;
+ color: #9be1a0;
+}
+
+.item:hover .dayNumber {
+ background-color: #9be1a0;
+}
+
+@media only screen and (min-width: 768px) {
+ .item {
+ width: 38px;
+ height: 65px;
+ }
+ .dayNumber {
+ width: 38px;
+ height: 38px;
+ margin-bottom: 6px;
+ font-size: 16px;
+ }
+
+ .percent {
+ font-size: 12px;
+ }
+}
diff --git a/src/components/CalendarPagination/.gitkeep b/src/components/CalendarPagination/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/CalendarPagination/CalendarPagination.jsx b/src/components/CalendarPagination/CalendarPagination.jsx
new file mode 100644
index 0000000..f0b38ae
--- /dev/null
+++ b/src/components/CalendarPagination/CalendarPagination.jsx
@@ -0,0 +1,51 @@
+import { useDispatch, useSelector } from "react-redux";
+import css from "./CalendarPagination.module.css";
+import { selectChosenMonth } from "../../redux/water/selectors";
+import { setChosenMonth } from "../../redux/water/slice";
+
+const CalendarPagination = () => {
+ const dispatch = useDispatch();
+ const monthFromState = useSelector(selectChosenMonth);
+
+ const handleMonthChange = (shift) => {
+ const [year, month] = monthFromState.split("-");
+ const newMonth = parseInt(month) + shift;
+ let newDate;
+ if (newMonth === 0) {
+ newDate = parseInt(year) - 1 + "-12";
+ } else if (newMonth === 13) {
+ newDate = parseInt(year) + 1 + "-01";
+ } else {
+ newDate = year + "-" + newMonth.toString().padStart(2, "0");
+ }
+
+ dispatch(setChosenMonth(newDate));
+ };
+
+ const formatDate = (date) =>
+ `${new Date(date).toLocaleString("default", {
+ month: "long",
+ })}, ${date.slice(0, 4)}`;
+
+ return (
+
+
+ {formatDate(monthFromState)}
+
+
+ );
+};
+
+export default CalendarPagination;
diff --git a/src/components/CalendarPagination/CalendarPagination.module.css b/src/components/CalendarPagination/CalendarPagination.module.css
new file mode 100644
index 0000000..49f89e0
--- /dev/null
+++ b/src/components/CalendarPagination/CalendarPagination.module.css
@@ -0,0 +1,47 @@
+.MonthNaw {
+ display: flex;
+ align-items: stretch;
+}
+
+.arrow {
+ padding: 0 10px;
+ border: transparent;
+ background-color: transparent;
+ font-weight: 400;
+ font-size: 22px;
+ font-family: "Poppins", sans-serif;
+ line-height: 0.8;
+}
+
+.chosenMonth {
+ display: inline-flex;
+ flex-grow: 1;
+ justify-content: center;
+ align-items: center;
+ min-width: 120px;
+ color: #323f47;
+ font-weight: 700;
+ font-size: 14px;
+ font-family: "Poppins", sans-serif;
+ letter-spacing: -0.01em;
+}
+
+.arrow:hover,
+.chosenMonth:hover {
+ color: #9be1a0;
+}
+
+@media only screen and (max-width: 374px) {
+ .chosenMonth {
+ min-width: 110px;
+ }
+}
+
+@media only screen and (min-width: 768px) {
+ .arrow {
+ font-size: 26px;
+ }
+ .chosenMonth {
+ font-size: 16px;
+ }
+}
diff --git a/src/components/ChooseDate/.gitkeep b/src/components/ChooseDate/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/ChooseDate/ChooseDate.jsx b/src/components/ChooseDate/ChooseDate.jsx
new file mode 100644
index 0000000..6425c7d
--- /dev/null
+++ b/src/components/ChooseDate/ChooseDate.jsx
@@ -0,0 +1,26 @@
+import { useSelector } from "react-redux";
+import { selectChosenDate } from "../../redux/water/selectors.js";
+import css from "./ChooseDate.module.css";
+
+const ChooseDate = () => {
+ const choseDate = useSelector(selectChosenDate);
+
+ // Функція для перевірки, чи є дата сьогоднішньою
+ const isToday = (date) => {
+ const today = new Date().toLocaleDateString("en-CA"); // Сьогоднішня дата у форматі "YYYY-MM-DD"
+ return today === date; // Порівнюємо дати як рядки
+ };
+ // Якщо дата сьогодні, відображаємо "Today", якщо ні — форматовану дату
+ const formattedDate = isToday(choseDate)
+ ? "Today"
+ : (() => {
+ const date = new Date(choseDate); // Створюємо Date-об'єкт з рядка
+ const day = date.getDate(); // Отримуємо день
+ const month = date.toLocaleString("en-CA", { month: "long" }); // Отримуємо назву місяця
+ return `${day}, ${month}`;
+ })();
+
+ return {formattedDate}
;
+};
+
+export default ChooseDate;
diff --git a/src/components/ChooseDate/ChooseDate.module.css b/src/components/ChooseDate/ChooseDate.module.css
new file mode 100644
index 0000000..863c6e8
--- /dev/null
+++ b/src/components/ChooseDate/ChooseDate.module.css
@@ -0,0 +1,19 @@
+/*style*/
+.day-text {
+ font-family: Poppins;
+ font-size: 20px;
+ line-height: 24px;
+ font-weight: 700;
+ letter-spacing: -0.01em;
+ text-align: left;
+ text-underline-position: from-font;
+ text-decoration-skip-ink: none;
+ color: var(--background-primary-dark);
+}
+
+@media only screen and (min-width: 768px) {
+ .day-text {
+ font-size: 28px;
+ line-height: 32px;
+ }
+}
diff --git a/src/components/Container/Container.jsx b/src/components/Container/Container.jsx
new file mode 100644
index 0000000..d2b8110
--- /dev/null
+++ b/src/components/Container/Container.jsx
@@ -0,0 +1,7 @@
+import css from "./Container.module.css";
+
+const Container = ({ children, className = "" }) => {
+ return {children}
;
+};
+
+export default Container;
diff --git a/src/components/Container/Container.module.css b/src/components/Container/Container.module.css
new file mode 100644
index 0000000..36836e7
--- /dev/null
+++ b/src/components/Container/Container.module.css
@@ -0,0 +1,21 @@
+.container {
+ padding-left: 16px;
+ padding-right: 16px;
+
+ border-radius: 30px;
+ background-color: var(--background-secondary-light);
+}
+
+@media only screen and (min-width: 768px) {
+ .container {
+ width: 704;
+ padding-left: 32px;
+ padding-right: 32px;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .container {
+ width: 672px;
+ }
+}
diff --git a/src/components/DailyInfo/.gitkeep b/src/components/DailyInfo/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/DailyInfo/DailyInfo.jsx b/src/components/DailyInfo/DailyInfo.jsx
new file mode 100644
index 0000000..8025ac6
--- /dev/null
+++ b/src/components/DailyInfo/DailyInfo.jsx
@@ -0,0 +1,18 @@
+import ChooseDate from "../ChooseDate/ChooseDate.jsx";
+import AddWaterBtn from "../AddWaterBtn/AddWaterBtn.jsx";
+import WaterList from "../WaterList/WaterList.jsx";
+import css from "./DailyInfo.module.css";
+
+const DailyInfo = () => {
+ return (
+
+ );
+};
+
+export default DailyInfo;
diff --git a/src/components/DailyInfo/DailyInfo.module.css b/src/components/DailyInfo/DailyInfo.module.css
new file mode 100644
index 0000000..bde2ecd
--- /dev/null
+++ b/src/components/DailyInfo/DailyInfo.module.css
@@ -0,0 +1,9 @@
+/*style*/
+.daily-info-container {
+ /* border: 1px solid red; */
+}
+.date-and-button-container {
+ display: flex;
+ justify-content: space-between;
+ /* border: 1px solid red; */
+}
diff --git a/src/components/GoogleBtn/GoogleBtn.jsx b/src/components/GoogleBtn/GoogleBtn.jsx
new file mode 100644
index 0000000..ff45f27
--- /dev/null
+++ b/src/components/GoogleBtn/GoogleBtn.jsx
@@ -0,0 +1,15 @@
+import { instance } from "../../redux/auth/operations";
+import { FcGoogle } from "react-icons/fc";
+import css from "./GoogleBtn.module.css";
+
+const GoogleBtn = () => {
+ const URL = instance.baseURL;
+ return (
+
+
+ Sign In with Google
+
+ );
+};
+
+export default GoogleBtn;
diff --git a/src/components/GoogleBtn/GoogleBtn.module.css b/src/components/GoogleBtn/GoogleBtn.module.css
new file mode 100644
index 0000000..66044d0
--- /dev/null
+++ b/src/components/GoogleBtn/GoogleBtn.module.css
@@ -0,0 +1,39 @@
+/* styles */
+
+.googleBtn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 5px;
+ padding: 16px 0;
+ border-radius: 30px;
+ border: none;
+ max-width: 311px;
+ color: var(--background-primary-dark);
+ background-color: var(--background-primary-light);
+ font-family: Poppins;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1);
+ margin-bottom: 16px;
+}
+
+.googleBtn:hover,
+.googleBtn:active {
+ background-color: #e8e4e4;
+}
+
+.googleIcon {
+ font-size: 20px;
+}
+
+@media (min-width: 768px) {
+ .googleBtn {
+ padding: 18px 0;
+ min-width: 436px;
+ font-size: 16px;
+ line-height: 1.5;
+ }
+}
diff --git a/src/components/Loader/Loader.jsx b/src/components/Loader/Loader.jsx
new file mode 100644
index 0000000..ef365db
--- /dev/null
+++ b/src/components/Loader/Loader.jsx
@@ -0,0 +1,22 @@
+import { ThreeDots } from "react-loader-spinner";
+
+const Loader = ({ height = "100vh" }) => {
+ return (
+
+ );
+};
+
+export default Loader;
diff --git a/src/components/Logo/.gitkeep b/src/components/Logo/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/Logo/Logo.jsx b/src/components/Logo/Logo.jsx
new file mode 100644
index 0000000..27be010
--- /dev/null
+++ b/src/components/Logo/Logo.jsx
@@ -0,0 +1,14 @@
+import { NavLink } from "react-router-dom";
+import styles from "./Logo.module.css";
+
+const Logo = ({ className = "" }) => {
+ return (
+ <>
+
+ aquatrack
+
+ >
+ );
+};
+
+export default Logo;
diff --git a/src/components/Logo/Logo.module.css b/src/components/Logo/Logo.module.css
new file mode 100644
index 0000000..0f6e2d6
--- /dev/null
+++ b/src/components/Logo/Logo.module.css
@@ -0,0 +1,25 @@
+.logo {
+ color: var(--background-primary-dark);
+ font-size: 18px;
+ font-weight: 700;
+ position: relative;
+ text-transform: uppercase;
+ display: inline-block;
+}
+
+/* BREAKPOINTS (Mobile First) */
+/* md */
+@media (min-width: 768px) {
+ .logo {
+ font-size: 24px;
+ margin-bottom: 50px;
+ }
+}
+
+/* lg */
+@media (min-width: 1440px) {
+ .logo {
+ font-size: 24px;
+ margin-bottom: 132px;
+ }
+}
diff --git a/src/components/MonthInfo/.gitkeep b/src/components/MonthInfo/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/MonthInfo/MonthInfo.jsx b/src/components/MonthInfo/MonthInfo.jsx
new file mode 100644
index 0000000..3ef13f6
--- /dev/null
+++ b/src/components/MonthInfo/MonthInfo.jsx
@@ -0,0 +1,39 @@
+import { useState } from "react";
+import css from "./MonthInfo.module.css";
+import CalendarPagination from "../CalendarPagination/CalendarPagination.jsx";
+import Calendar from "../Calendar/Calendar.jsx";
+import RechartsComponent from "../RechartsComponent/RechartsComponent.jsx";
+
+const MonthInfo = () => {
+ const [isCalendarVisible, setIsCalendarVisible] = useState(true);
+
+ const toggleView = () => {
+ setIsCalendarVisible((prevState) => !prevState);
+ };
+
+ return (
+
+
+
+ {isCalendarVisible ? (
+ "Month"
+ ) : (
+ Statistics
+ )}
+
+
+
+
+
+
+
+ {isCalendarVisible ?
:
}
+
+ );
+};
+
+export default MonthInfo;
diff --git a/src/components/MonthInfo/MonthInfo.module.css b/src/components/MonthInfo/MonthInfo.module.css
new file mode 100644
index 0000000..ad56e3b
--- /dev/null
+++ b/src/components/MonthInfo/MonthInfo.module.css
@@ -0,0 +1,56 @@
+.sectionCalendar {
+ width: 100%;
+ margin: 0 auto;
+}
+
+.MonthInfo {
+ width: 100%;
+ margin-bottom: 24px;
+}
+
+.toRow {
+ display: flex;
+ justify-content: space-between;
+}
+
+.title {
+ display: flex;
+ align-items: center;
+ color: #323f47;
+ font-weight: 700;
+ font-size: 20px;
+ font-family: "Poppins", sans-serif;
+ /* line-height: 1.2; */
+ letter-spacing: -0.01em;
+}
+@media only screen and (max-width: 355px) {
+ .statisticsTitle {
+ font-size: 14px;
+ }
+}
+
+.toggleViewBtn {
+ margin-left: 6px;
+ border: transparent;
+ background-color: transparent;
+}
+.toggleViewBtnImg {
+ width: 20px;
+ height: 20px;
+}
+
+@media only screen and (min-width: 768px) {
+ .title {
+ font-size: 28px;
+ line-height: 1.14;
+ }
+
+ .toggleViewBtn {
+ margin-left: 10px;
+ }
+
+ .toggleViewBtnImg {
+ width: 24px;
+ height: 24px;
+ }
+}
diff --git a/src/components/PrivateRoute/PrivateRoute.jsx b/src/components/PrivateRoute/PrivateRoute.jsx
new file mode 100644
index 0000000..6e79f3c
--- /dev/null
+++ b/src/components/PrivateRoute/PrivateRoute.jsx
@@ -0,0 +1,10 @@
+import { useSelector } from "react-redux";
+import { selectAuthIsLoggedIn } from "../../redux/auth/selectors";
+import { Navigate } from "react-router-dom";
+
+const PrivateRoute = ({ component, redirectTo = "/signin" }) => {
+ const isLoggedIn = useSelector(selectAuthIsLoggedIn);
+ return isLoggedIn ? component : ;
+};
+
+export default PrivateRoute;
diff --git a/src/components/RechartsComponent/RechartsComponent.jsx b/src/components/RechartsComponent/RechartsComponent.jsx
new file mode 100644
index 0000000..1233133
--- /dev/null
+++ b/src/components/RechartsComponent/RechartsComponent.jsx
@@ -0,0 +1,85 @@
+import {
+ AreaChart,
+ Area,
+ XAxis,
+ YAxis,
+ CartesianGrid,
+ Tooltip,
+ ResponsiveContainer,
+} from "recharts";
+import { useMemo } from "react";
+import { useSelector } from "react-redux";
+import {
+ selectChosenDate,
+ selectDaysDrinking,
+} from "../../redux/water/selectors";
+
+const RechartsComponent = () => {
+ const chosenDate = useSelector(selectChosenDate);
+ const daysDrinking = useSelector(selectDaysDrinking);
+
+ // Перетворюємо обрану дату в Date
+ const dayEndOfStatistic = useMemo(() => new Date(chosenDate), [chosenDate]);
+
+ // Створення масиву останніх 7 днів
+ const lastWeekDays = useMemo(() => {
+ const daysArray = Array.from({ length: 7 }, (_, i) => {
+ const date = new Date(dayEndOfStatistic);
+ date.setDate(dayEndOfStatistic.getDate() - (6 - i));
+ return {
+ day: date.getDate(),
+ month: date.getMonth() + 1,
+ year: date.getFullYear(),
+ amount: 0,
+ };
+ });
+
+ daysDrinking.forEach(({ date, amount }) => {
+ const drinkingDate = new Date(date);
+ const index = daysArray.findIndex(
+ (day) =>
+ day.day === drinkingDate.getDate() &&
+ day.month === drinkingDate.getMonth() + 1 &&
+ day.year === drinkingDate.getFullYear()
+ );
+ if (index !== -1) {
+ daysArray[index].amount += amount;
+ }
+ });
+
+ return daysArray;
+ }, [daysDrinking, dayEndOfStatistic]);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ `${value / 1000} L`}
+ tick={{ fontSize: 12 }}
+ />
+ `${value} ml`} />
+
+
+
+ );
+};
+
+export default RechartsComponent;
diff --git a/src/components/RestrictedRoute/RestrictedRoute.jsx b/src/components/RestrictedRoute/RestrictedRoute.jsx
new file mode 100644
index 0000000..8c659fc
--- /dev/null
+++ b/src/components/RestrictedRoute/RestrictedRoute.jsx
@@ -0,0 +1,52 @@
+import { useSelector } from "react-redux";
+import {
+ selectAuthIsLoading,
+ selectAuthIsLoggedIn,
+ // selectAuthIsRefreshing,
+ selectAuthIsRegisteredSuccess,
+} from "../../redux/auth/selectors";
+import { Navigate, useLocation } from "react-router-dom";
+import Loader from "../Loader/Loader";
+// import { replace } from "formik";
+
+const RestrictedRoute = ({ component }) => {
+ const isLoggedIn = useSelector(selectAuthIsLoggedIn);
+ const isRegistered = useSelector(selectAuthIsRegisteredSuccess);
+ const isLoading = useSelector(selectAuthIsLoading);
+ console.log(isLoading);
+ const location = useLocation();
+
+ if (isLoading) {
+ return ;
+ }
+ if (isLoggedIn && location.pathname !== "/tracker") {
+ return ;
+ }
+ if (isRegistered && location.pathname !== "/signin") {
+ return ;
+ }
+
+ return component;
+
+ // return isLoading ? (
+ //
+ // ) : isLoggedIn ? (
+ //
+ // ) : (
+ // component
+ // );
+};
+
+export default RestrictedRoute;
+
+// old version
+// import { useSelector } from "react-redux";
+// import { selectAuthIsLoggedIn } from "../../redux/auth/selectors";
+// import { Navigate } from "react-router-dom";
+
+// const RestrictedRoute = ({ component, redirectTo = "/tracker" }) => {
+// const isLoggedIn = useSelector(selectAuthIsLoggedIn);
+// return isLoggedIn ? : component;
+// };
+
+// export default RestrictedRoute;
diff --git a/src/components/Section/Section.jsx b/src/components/Section/Section.jsx
new file mode 100644
index 0000000..c14c1e0
--- /dev/null
+++ b/src/components/Section/Section.jsx
@@ -0,0 +1,9 @@
+import css from "./Section.module.css";
+
+const Section = ({ children, className = "" }) => {
+ return (
+
+ );
+};
+
+export default Section;
diff --git a/src/components/Section/Section.module.css b/src/components/Section/Section.module.css
new file mode 100644
index 0000000..e03fbe9
--- /dev/null
+++ b/src/components/Section/Section.module.css
@@ -0,0 +1,23 @@
+.section {
+ padding: 16px;
+ margin: 0 auto;
+ max-width: 375px;
+ min-width: 320px;
+ background-color: #ffffff;
+}
+
+@media only screen and (min-width: 768px) {
+ .section {
+ padding: 32px;
+ max-width: 768px;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .section {
+ display: flex;
+ gap: 32px;
+ max-width: 1440px;
+ margin: 0 auto;
+ }
+}
diff --git a/src/components/SignInForm/.gitkeep b/src/components/SignInForm/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/SignInForm/SignInForm.jsx b/src/components/SignInForm/SignInForm.jsx
new file mode 100644
index 0000000..7c8c19a
--- /dev/null
+++ b/src/components/SignInForm/SignInForm.jsx
@@ -0,0 +1,113 @@
+import { ErrorMessage, Field, Form, Formik } from "formik";
+import * as Yup from "yup";
+import css from "./SignInForm.module.css";
+import clsx from "clsx";
+import { useMediaQuery } from "react-responsive";
+import { useState } from "react";
+import { useDispatch } from "react-redux";
+import { apiLogin } from "../../redux/auth/operations";
+
+const LoginValidationSchema = Yup.object({
+ email: Yup.string().email("Incorrect email").required("Email is required"),
+ password: Yup.string()
+ .required("Password is required")
+ .min(8, "Must be at least 8 characters")
+ .max(50, "Must be less than 50 characters"),
+});
+
+const SignInForm = () => {
+ const dispatch = useDispatch();
+ const isTabletAndDesktop = useMediaQuery({ minWidth: 768 });
+ const [openEye, setOpenEye] = useState(false);
+
+ const initialValue = {
+ email: "",
+ password: "",
+ };
+
+ function handleOpenEye() {
+ setOpenEye(!openEye);
+ }
+
+ function handleSubmit(values) {
+ dispatch(apiLogin(values));
+ }
+
+ return (
+
+
Sign In
+
+ {({ touched, errors }) => (
+
+ )}
+
+
+ );
+};
+
+export default SignInForm;
diff --git a/src/components/SignInForm/SignInForm.module.css b/src/components/SignInForm/SignInForm.module.css
new file mode 100644
index 0000000..56c4ef6
--- /dev/null
+++ b/src/components/SignInForm/SignInForm.module.css
@@ -0,0 +1,192 @@
+.signInTitle {
+ font-weight: 700;
+ font-size: 32px;
+ line-height: 100%;
+ letter-spacing: -0.01em;
+ margin-bottom: 32px;
+}
+
+.form {
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 16px;
+}
+
+.label {
+ margin-bottom: 8px;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 129%;
+ letter-spacing: -0.01em;
+}
+
+.emailContainer {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 16px;
+}
+
+.errorMail {
+ position: absolute;
+ bottom: -20px;
+ left: 0;
+}
+
+.inputForm {
+ padding: 16px;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ border: 1px solid rgba(47, 47, 47, 0.2);
+ border-radius: 15px;
+ max-width: 311px;
+ outline: none;
+ background-color: transparent;
+}
+
+.inputFormError {
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 129%;
+ letter-spacing: -0.01em;
+ border-color: #ef5050;
+ color: #ef5050;
+}
+
+.inputForm:focus {
+ border: 1px solid rgba(47, 47, 47, 0.4);
+}
+
+.inputForm::placeholder {
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ color: rgba(47, 47, 47, 0.6);
+}
+
+.passwordContainer {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 32px;
+}
+
+.errorPass {
+ position: absolute;
+ bottom: -30px;
+ left: 0;
+}
+
+.submitBtn {
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 129%;
+ letter-spacing: -0.01em;
+ text-align: center;
+ padding-top: 16px;
+ padding-bottom: 16px;
+ color: var(--background-primary-dark);
+ background-color: var(--accent);
+ border: none;
+ border-radius: 30px;
+ max-width: 311px;
+ transition: color 250ms linear, background-color 250ms linear;
+}
+
+.submitBtn:hover,
+.submitBtn:focus {
+ outline: none;
+ cursor: pointer;
+ background-color: #87d28d;
+}
+
+.error {
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 129%;
+ letter-spacing: -0.01em;
+ color: #ef5050;
+}
+
+@media only screen and (min-width: 768px) {
+ .signInTitle {
+ font-size: 36px;
+ line-height: 106%;
+ }
+
+ .container {
+ display: flex;
+ flex-direction: column;
+ justify-content: start;
+ align-items: start;
+ }
+
+ .label {
+ font-size: 16px;
+ line-height: 150%;
+ }
+
+ .inputForm {
+ font-size: 16px;
+ line-height: 150%;
+ min-width: 436px;
+ }
+
+ .inputForm::placeholder {
+ font-size: 16px;
+ line-height: 1.5;
+ }
+
+ .emailContainer {
+ max-width: 436px;
+ margin-bottom: 20px;
+ }
+
+ .errorMail {
+ position: absolute;
+ bottom: -25px;
+ left: 0;
+ }
+
+ .passwordContainer {
+ position: relative;
+ max-width: 436px;
+ }
+
+ .error {
+ font-size: 16px;
+ line-height: 150%;
+ color: #ef5050;
+ }
+
+ .submitBtn {
+ font-size: 16px;
+ line-height: 150%;
+ padding-top: 18px;
+ padding-bottom: 18px;
+ min-width: 436px;
+ }
+
+ .closeEyeBtn {
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: transparent;
+ border: none;
+ top: 50%;
+ right: 18px;
+ transform: translateY(25%);
+ fill: none;
+ stroke: #2f2f2f;
+ cursor: pointer;
+ }
+
+ .inputFormError {
+ font-size: 16px;
+ line-height: 150%;
+ }
+}
diff --git a/src/components/SignUpForm/.gitkeep b/src/components/SignUpForm/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/SignUpForm/SignUpForm.jsx b/src/components/SignUpForm/SignUpForm.jsx
new file mode 100644
index 0000000..daecd21
--- /dev/null
+++ b/src/components/SignUpForm/SignUpForm.jsx
@@ -0,0 +1,164 @@
+import { ErrorMessage, Field, Form, Formik } from "formik";
+import css from "./SignUpForm.module.css";
+import * as Yup from "yup";
+import clsx from "clsx";
+import { useState } from "react";
+import { useDispatch } from "react-redux";
+import { apiRegister } from "../../redux/auth/operations";
+
+const SignUpForm = () => {
+ const dispatch = useDispatch();
+ const [passwordVisibility, setPasswordVisibility] = useState({
+ password: false,
+ repeatPassword: false,
+ });
+ const togglePasswordView = (btnName) => {
+ setPasswordVisibility((prev) => ({
+ ...prev,
+ [btnName]: !prev[btnName],
+ }));
+ };
+
+ const SignUpValidationSchema = Yup.object().shape({
+ emailSignUp: Yup.string()
+ .email("Invalid email address")
+ .required("Email is required"),
+ passwordSignUp: Yup.string()
+ .min(8, "Password must be at least 8 characters")
+ .max(50, "Password must be less than 50 characters")
+ .required("Password is required"),
+ repeatPassword: Yup.string()
+ .oneOf([Yup.ref("passwordSignUp")], "Passwords must match")
+ .required("Please confirm your password"),
+ });
+
+ const initialValues = {
+ emailSignUp: "",
+ passwordSignUp: "",
+ repeatPassword: "",
+ };
+ const handleSubmit = (values, actions) => {
+ const email = values.emailSignUp;
+ const password = values.passwordSignUp;
+ const registerObj = { email, password };
+ // console.log(registerObj);
+ dispatch(apiRegister(registerObj));
+ console.log("Form submitted, dispatch work");
+ actions.resetForm();
+ };
+
+ return (
+ <>
+ {/* SignUp
*/}
+
+ {({ errors, touched }) => (
+
+ )}
+
+ >
+ );
+};
+
+export default SignUpForm;
diff --git a/src/components/SignUpForm/SignUpForm.module.css b/src/components/SignUpForm/SignUpForm.module.css
new file mode 100644
index 0000000..2d88ed6
--- /dev/null
+++ b/src/components/SignUpForm/SignUpForm.module.css
@@ -0,0 +1,148 @@
+/* .title {
+ text-align: center;
+ margin-bottom: 32px;
+ font-weight: 700;
+ font-size: 32px;
+ line-height: 1;
+ letter-spacing: -0.01em;
+ color: #323f47;
+} */
+.form {
+ max-width: 311px;
+ margin: 0 auto;
+}
+.fieldWrap {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 16px;
+}
+.fieldWrap:last-of-type {
+ margin-bottom: 32px;
+}
+.label {
+ margin-bottom: 8px;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+}
+.input {
+ border: 1px solid rgba(47, 47, 47, 0.2);
+ border-radius: 15px;
+ padding: 16px;
+ outline: none;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ background-color: transparent;
+}
+.input:focus {
+ border: 1px solid rgba(47, 47, 47, 0.4);
+}
+
+.inputError {
+ border-color: #ef5050;
+ color: #ef5050;
+}
+
+.input::placeholder {
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ color: rgba(47, 47, 47, 0.6);
+}
+.errorMsg {
+ position: absolute;
+ top: 76px;
+ left: 0;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ color: #ef5050;
+}
+
+.btn {
+ border-radius: 30px;
+ border: none;
+ padding: 16px;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ color: #323f47;
+ background-color: #9be1a0;
+ transition: background-color 250ms linear;
+ cursor: pointer;
+ width: 100%;
+ max-width: 311px;
+}
+
+.btn:hover,
+.btn:focus {
+ background-color: #87d28d;
+}
+
+.toggleViewBtn {
+ display: none;
+}
+
+@media only screen and (min-width: 768px) {
+ /* .title {
+ font-size: 36px;
+ line-height: 1.05556;
+
+ } */
+ .form {
+ max-width: 436px;
+ }
+
+ .fieldWrap {
+ /* position: relative; */
+ margin-bottom: 20px;
+ }
+
+ .label {
+ font-size: 16px;
+ line-height: 1.5;
+ }
+ .input {
+ font-size: 16px;
+ line-height: 1.5;
+ }
+
+ .input::placeholder {
+ font-size: 16px;
+ line-height: 1.5;
+ }
+ .errorMsg {
+ font-size: 16px;
+ line-height: 1.5;
+ top: 88px;
+ }
+
+ .btn {
+ font-size: 16px;
+ line-height: 1.5;
+ max-width: 436px;
+ padding: 18px;
+ }
+ .toggleViewBtn {
+ display: block;
+ position: absolute;
+ top: 50px;
+ right: 18px;
+ background: none;
+ border: none;
+ cursor: pointer;
+ }
+ .icon {
+ fill: none;
+ stroke: #2f2f2f;
+ }
+}
diff --git a/src/components/UserBar/.gitkeep b/src/components/UserBar/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/UserBar/UserBar.jsx b/src/components/UserBar/UserBar.jsx
new file mode 100644
index 0000000..45332b5
--- /dev/null
+++ b/src/components/UserBar/UserBar.jsx
@@ -0,0 +1,90 @@
+import { useState, useRef, useEffect } from "react";
+import { usePopper } from "react-popper";
+import { HiChevronDown, HiChevronUp } from "react-icons/hi";
+import UserBarPopover from "../../components/UserBarPopover/UserBarPopover.jsx";
+import css from "./UserBar.module.css";
+
+const UserBar = ({ userName, avatarUrl, onSettingsClick, onLogOutClick }) => {
+ const avatarPlaceholder = userName.charAt(0).toUpperCase();
+
+ const [isPopoverOpen, setIsPopoverOpen] = useState(false);
+ const buttonRef = useRef(null);
+ const popoverRef = useRef(null);
+
+ const { styles, attributes, update } = usePopper(
+ buttonRef.current,
+ popoverRef.current,
+ {
+ placement: "bottom-end",
+ modifiers: [
+ {
+ name: "offset",
+ options: { offset: [0, 8] },
+ },
+ {
+ name: "preventOverflow",
+ options: { boundary: "viewport" },
+ },
+ ],
+ }
+ );
+
+ const togglePopover = () => {
+ setIsPopoverOpen((prev) => !prev);
+ if (update) {
+ setTimeout(() => update(), 0);
+ }
+ };
+
+ const closePopover = () => setIsPopoverOpen(false);
+
+ useEffect(() => {
+ const handleClickOutside = (event) => {
+ if (popoverRef.current && !popoverRef.current.contains(event.target)) {
+ setIsPopoverOpen(false);
+ }
+ };
+
+ document.addEventListener("mousedown", handleClickOutside);
+ return () => {
+ document.removeEventListener("mousedown", handleClickOutside);
+ };
+ }, []);
+
+ useEffect(() => {
+ if (buttonRef.current && popoverRef.current) {
+ const buttonWidth = buttonRef.current.offsetWidth;
+ popoverRef.current.style.width = `${buttonWidth}px`;
+ }
+ }, [isPopoverOpen]);
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default UserBar;
diff --git a/src/components/UserBar/UserBar.module.css b/src/components/UserBar/UserBar.module.css
new file mode 100644
index 0000000..5dcd103
--- /dev/null
+++ b/src/components/UserBar/UserBar.module.css
@@ -0,0 +1,98 @@
+.container {
+ position: relative;
+}
+
+.userbar {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ padding-left: 12px;
+ padding-right: 12px;
+ border-radius: 30px;
+ height: 50px;
+ background-color: #323f47;
+ border: none;
+}
+
+.name {
+ font-family: var(--font-family);
+ font-weight: 700;
+ font-size: 14px;
+ /* line-height: 150%;
+ letter-spacing: -0.01em; */
+ text-align: center;
+ color: white;
+}
+
+.avatar {
+ width: 38px;
+ height: 38px;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.avatarPlaceholder {
+ width: 38px;
+ height: 38px;
+ border-radius: 50%;
+ background-color: white;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 14px;
+ font-weight: bold;
+ color: black;
+}
+
+.icon {
+ color: white;
+ width: 16px;
+ height: 16px;
+}
+
+.userbarpopover {
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ width: auto;
+ border-radius: 15px;
+ padding-top: 14px;
+ padding-bottom: 14px;
+ padding-left: 20px;
+ background-color: white;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+ z-index: 1000;
+}
+
+.popoverbutton {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ width: 100%;
+ text-align: left;
+ font-family: var(--font-family);
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 1.29;
+ color: rgba(50, 63, 71, 0.4);
+ background: none;
+ border: none;
+ cursor: pointer;
+ transition: color 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.popoverbutton:hover {
+ color: var(--background-primary-dark);
+}
+
+@media (min-width: 768px) {
+ .userbar {
+ gap: 10px;
+ height: 56px;
+ }
+
+ .popoverbutton {
+ font-size: 15px;
+ }
+}
diff --git a/src/components/UserBarPopover/.gitkeep b/src/components/UserBarPopover/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/UserBarPopover/UserBarPopover.jsx b/src/components/UserBarPopover/UserBarPopover.jsx
new file mode 100644
index 0000000..da8b474
--- /dev/null
+++ b/src/components/UserBarPopover/UserBarPopover.jsx
@@ -0,0 +1,50 @@
+import css from "./UserBarPopover.module.css";
+
+const UserBarPopover = ({
+ popoverRef,
+ styles,
+ attributes,
+ isOpen,
+ onSettingsClick,
+ onLogOutClick,
+ closePopover,
+}) => {
+ return (
+
+
+
+
+ );
+};
+
+export default UserBarPopover;
\ No newline at end of file
diff --git a/src/components/UserBarPopover/UserBarPopover.module.css b/src/components/UserBarPopover/UserBarPopover.module.css
new file mode 100644
index 0000000..a1abaea
--- /dev/null
+++ b/src/components/UserBarPopover/UserBarPopover.module.css
@@ -0,0 +1,42 @@
+.userbarpopover {
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ width: auto;
+ border-radius: 15px;
+ padding-top: 14px;
+ padding-bottom: 14px;
+ padding-left: 20px;
+ background-color: white;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+ z-index: 1000;
+}
+
+.popoverbutton {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ width: 100%;
+ text-align: left;
+ font-family: var(--font-family);
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 1.29;
+ color: rgba(50, 63, 71, 0.4);
+ background: none;
+ border: none;
+ cursor: pointer;
+ transition: color 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.popoverbutton:hover {
+ color: var(--background-primary-dark);
+}
+
+@media (min-width: 768px) {
+ .popoverbutton {
+ line-height: 1.49;
+ font-size: 15px;
+ }
+}
diff --git a/src/components/UserPanel/.gitkeep b/src/components/UserPanel/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/UserPanel/UserPanel.jsx b/src/components/UserPanel/UserPanel.jsx
new file mode 100644
index 0000000..64551ed
--- /dev/null
+++ b/src/components/UserPanel/UserPanel.jsx
@@ -0,0 +1,45 @@
+import { useState } from "react";
+import { useSelector } from "react-redux";
+import { selectUser } from "../../redux/settings/selectors.js";
+import UserBar from "../../components/UserBar/UserBar.jsx";
+import UserSettingsModal from "../../modals/UserSettingsModal/UserSettingsModal.jsx";
+import LogOutModal from "../../modals/LogOutModal/LogOutModal.jsx";
+
+import css from "./UserPanel.module.css";
+
+const UserPanel = () => {
+ const user = useSelector(selectUser);
+ // console.log(user)
+ const defaultUserName = user.name || user.email.split("@")[0];
+ const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);
+ const [isLogOutModalOpen, setIsLogOutModalOpen] = useState(false);
+
+ const handleOpenSettings = () => {
+ setIsSettingsModalOpen(true);
+ };
+ const handleOpenLogOut = () => {
+ setIsLogOutModalOpen(true);
+ };
+ const handleCloseModals = () => {
+ setIsSettingsModalOpen(false);
+ setIsLogOutModalOpen(false);
+ };
+
+ return (
+
+
+ Hello, {defaultUserName}!
+
+
+ {isSettingsModalOpen && }
+
+
+ );
+};
+
+export default UserPanel;
diff --git a/src/components/UserPanel/UserPanel.module.css b/src/components/UserPanel/UserPanel.module.css
new file mode 100644
index 0000000..1067350
--- /dev/null
+++ b/src/components/UserPanel/UserPanel.module.css
@@ -0,0 +1,36 @@
+.userpanel {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+}
+
+.greeting {
+ font-family: "Gilroy", sans-serif;
+ font-weight: 400;
+ font-size: 32px;
+ line-height: 1, 06;
+}
+
+.name {
+ font-family: "Gilroy", sans-serif;
+ font-size: 32px;
+ line-height: 1, 06;
+ font-weight: 700;
+}
+
+@media (min-width: 768px) {
+ .userpanel {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ .greeting {
+ font-size: 36px;
+ }
+
+ .name {
+ font-size: 36px;
+ }
+}
diff --git a/src/components/UsersSettingsForm/UsersSettingsForm.jsx b/src/components/UsersSettingsForm/UsersSettingsForm.jsx
new file mode 100644
index 0000000..11e0c4b
--- /dev/null
+++ b/src/components/UsersSettingsForm/UsersSettingsForm.jsx
@@ -0,0 +1,322 @@
+import { useForm } from "react-hook-form";
+import { yupResolver } from "@hookform/resolvers/yup";
+import * as Yup from "yup";
+import css from "./UsersSettingsForm.module.css";
+import { useEffect, useState } from "react";
+import clsx from "clsx";
+import { useDispatch, useSelector } from "react-redux";
+import {
+ selectActiveTime,
+ selectEmail,
+ selectName,
+ selectUser,
+ selectWeight,
+} from "../../redux/settings/selectors";
+import { editUser } from "../../redux/settings/operations";
+import { FcDecision } from "react-icons/fc";
+
+const validationSettingSchema = Yup.object().shape({
+ avatarUrl: Yup.mixed().default(""),
+ gender: Yup.string().oneOf(["woman", "man"]),
+ name: Yup.string(),
+ email: Yup.string().email("Invalid email"),
+ weight: Yup.number().positive("Weight must be a positive number"),
+ activeTime: Yup.number()
+ .min(0, "Active time cannot be negative")
+ .max(24, "Max active time"),
+ dailyNorm: Yup.number().positive("Water norm must be a positive number"),
+});
+
+const UsersSettingsForm = () => {
+ const dispatch = useDispatch();
+
+ const userName = useSelector(selectName);
+ const userEmail = useSelector(selectEmail);
+ const user = useSelector(selectUser);
+ const weightSelect = useSelector(selectWeight);
+ const activeTimeSelect = useSelector(selectActiveTime);
+
+ const [avatarPreview, setAvatarPreview] = useState(null);
+ const [waterNorm, setWaterNorm] = useState("1.5");
+
+ const {
+ register,
+ handleSubmit,
+ setValue,
+ watch,
+ formState: { errors },
+ } = useForm({
+ defaultValues: {
+ // userName: userName,
+ name: "",
+ email: "",
+ weight: weightSelect,
+ activeTime: activeTimeSelect,
+ gender: "woman",
+ dailyNorm: 1.5,
+ },
+ resolver: yupResolver(validationSettingSchema),
+ });
+
+ const weight = watch("weight");
+ const activeTime = watch("activeTime");
+ const gender = watch("gender");
+
+ const handleAvatarChange = (e) => {
+ const file = e.target.files[0];
+ if (file && file.type.startsWith("image/")) {
+ setAvatarPreview(URL.createObjectURL(file));
+ setValue("avatarUrl", file);
+ } else if (!file) {
+ setAvatarPreview(null);
+ setValue("avatarUrl", "");
+ } else {
+ alert("Please select a valid image file.");
+ }
+ };
+
+ useEffect(() => {
+ if (userEmail) {
+ const emailNamePart = userEmail.split("@")[0];
+ setValue("name", userName || emailNamePart);
+ }
+ setValue("email", userEmail);
+ }, [userEmail, userName, setValue]);
+
+ useEffect(() => {
+ if (user.avatarUrl) {
+ setAvatarPreview(user.avatarUrl);
+ } else if (userName) {
+ setAvatarPreview(userName.charAt(0).toUpperCase());
+ }
+ }, [user.avatarUrl, userName]);
+
+ useEffect(() => {
+ if (weight && activeTime && gender) {
+ let calculatedNorm = 1.5;
+ if (gender === "woman") {
+ calculatedNorm = Math.max(weight * 0.03 + activeTime * 0.4, 0).toFixed(
+ 1
+ );
+ } else if (gender === "man") {
+ calculatedNorm = Math.max(weight * 0.04 + activeTime * 0.6, 0).toFixed(
+ 1
+ );
+ }
+ setWaterNorm(calculatedNorm);
+ }
+ }, [weight, activeTime, gender]);
+
+ const onSubmit = async (data) => {
+ const formData = new FormData();
+ // console.log("1", data);
+
+ Object.entries(data).forEach(([key, value]) => {
+ if (
+ key === "avatarUrl" &&
+ (!value || (value instanceof FileList && value.length === 0))
+ ) {
+ return;
+ }
+ formData.append(key, value instanceof FileList ? value[0] : value);
+ });
+
+ // console.log("2", formData);
+
+ try {
+ dispatch(editUser(formData));
+ // alert("User updated successfully!");
+ } catch (error) {
+ console.error("Error updating user:", error);
+ // alert("Failed to update user. Please try again.");
+ }
+ };
+
+ return (
+
+ );
+};
+
+export default UsersSettingsForm;
diff --git a/src/components/UsersSettingsForm/UsersSettingsForm.module.css b/src/components/UsersSettingsForm/UsersSettingsForm.module.css
new file mode 100644
index 0000000..c3920ea
--- /dev/null
+++ b/src/components/UsersSettingsForm/UsersSettingsForm.module.css
@@ -0,0 +1,417 @@
+.settingAllForms,
+.settingAllFormsSecond {
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+}
+
+@media (min-width: 1440px) {
+ .settingAllFormsDesctop {
+ display: flex;
+ gap: 40px;
+ }
+}
+
+.settingFormAvatar {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+ margin-bottom: 40px;
+}
+
+.settingError {
+ font-weight: 400;
+ font-size: 14px;
+ border-color: #ef5050;
+ color: #ef5050;
+ margin-top: 5px;
+}
+
+.settingAvatarImg {
+ width: 75px;
+ height: 75px;
+ border-radius: 100%;
+ @media (min-width: 768px) {
+ width: 100px;
+ height: 100px;
+ }
+}
+
+.settingModalButton {
+ border: none;
+ background: transparent;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 8px;
+ cursor: pointer;
+}
+
+.settingAvatarIcon {
+ stroke: #2f2f2f;
+ fill: none;
+ stroke-width: 4px;
+ @media (min-width: 768px) {
+ width: 20px;
+ height: 20px;
+ }
+}
+
+.settingAvatarSecondIcon {
+ width: 75px;
+ height: 75px;
+}
+
+.avatarButtonText {
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingLabel {
+ font-family: "Poppins", sans-serif;
+ font-weight: 700;
+ font-size: 16px;
+ line-height: 1.25;
+ letter-spacing: -0.01em;
+ text-align: center;
+ color: #323f47;
+ @media (min-width: 768px) {
+ font-size: 18px;
+ line-height: 1.5;
+ }
+}
+
+.settingGenderForm {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+}
+
+.settingRadioButton {
+ display: flex;
+ gap: 20px;
+}
+
+.settingRadioLabel {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ position: relative;
+}
+
+.settingRadioInput {
+ display: none;
+}
+
+.settingRadioCustom {
+ width: 20px;
+ height: 20px;
+ border: 2px solid #9be1a0;
+ border-radius: 50%;
+ position: relative;
+ display: inline-block;
+ margin-right: 8px;
+}
+
+.settingRadioInput:checked + .settingRadioCustom::after {
+ content: "";
+ width: 12px;
+ height: 12px;
+ background-color: #9be1a0;
+ border-radius: 50%;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+
+.settingRadioText {
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingNameForm {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+}
+
+.settingNameFormLabels {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ align-items: start;
+ justify-content: start;
+}
+
+.settingFormInput {
+ border: 1px solid rgba(47, 47, 47, 0.15);
+ border-radius: 15px;
+ padding: 14px 14px 14px 16px;
+ width: 303px;
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 1.5;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ @media (min-width: 768px) {
+ padding: 16px;
+ width: 568px;
+ }
+
+ @media (min-width: 1440px) {
+ width: 400px;
+ }
+}
+
+.settingFormInput:focus {
+ outline: none;
+ border-color: rgba(47, 47, 47, 0.4);
+}
+
+input[type="number"] {
+ -moz-appearance: textfield;
+}
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+.settingDailyForm {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+ justify-content: start;
+ align-items: start;
+ margin-bottom: 24px;
+ margin-top: 24px;
+}
+
+.settingDailyAllCard {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ @media (min-width: 768px) {
+ display: flex;
+ flex-direction: row;
+ gap: 28px;
+ }
+}
+
+.settingDailyCard {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+}
+
+.settingDailyContext {
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingDailyFormula {
+ font-family: "Poppins", sans-serif;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: #9be1a0;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingDailyDescription {
+ border: 1px solid rgba(47, 47, 47, 0.15);
+ border-radius: 15px;
+ padding: 16px;
+ width: 303px;
+ @media (min-width: 768px) {
+ width: 568px;
+ }
+
+ @media (min-width: 1440px) {
+ width: 400px;
+ }
+}
+
+.settingDailyDescrText {
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: rgba(47, 47, 47, 0.6);
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ font-size: 16px;
+ }
+}
+
+.settingDailyDescriptionSpan {
+ color: #9be1a0;
+}
+
+.settingDailyRemark {
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingDailyRemarkSpan {
+ margin-right: 4px;
+ color: #9be1a0;
+}
+
+.settingWeightLabel {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+.settingWeightTimeForm {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+ align-items: start;
+ justify-content: start;
+}
+
+.settingWeightContext {
+ margin-bottom: 8px;
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingCalculateForm {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+ align-items: start;
+ justify-content: start;
+}
+
+@media (min-width: 768px) {
+ .settingCalculate {
+ display: flex;
+ flex-direction: row;
+ gap: 5px;
+ }
+}
+
+.settingCalculateText {
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ margin-bottom: 5px;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingCalculateTextSpan {
+ font-family: "Poppins", sans-serif;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 1.29;
+ color: #9be1a0;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingLabelText {
+ margin-bottom: 8px;
+ display: block;
+ text-align: start;
+}
+
+.settingFormButton {
+ margin-top: 40px;
+ border: none;
+ border-radius: 30px;
+ padding: 14px 40px;
+ max-width: 116px;
+ background-color: #9be1a0;
+ font-family: "Poppins", sans-serif;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 1.29;
+ letter-spacing: -0.01em;
+ text-align: center;
+ color: #323f47;
+ cursor: pointer;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingFormButton:hover {
+ background-color: #87d28d;
+}
+
+.settingFormButton:focus {
+ background-color: #e6e6e6;
+}
+
+@media (min-width: 768px) {
+ .settingTransferText {
+ display: none;
+ }
+}
+
+.avatarSettingPlaceholder {
+ width: 75px;
+ height: 75px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50%;
+ background-color: #f0f0f0;
+ font-family: "Poppins", sans-serif;
+ font-weight: 700;
+ font-size: 36px;
+ color: #9be1a0;
+}
diff --git a/src/components/WaterDailyNorma/.gitkeep b/src/components/WaterDailyNorma/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/WaterDailyNorma/WaterDailyNorma.jsx b/src/components/WaterDailyNorma/WaterDailyNorma.jsx
new file mode 100644
index 0000000..845859f
--- /dev/null
+++ b/src/components/WaterDailyNorma/WaterDailyNorma.jsx
@@ -0,0 +1,23 @@
+import { useSelector } from "react-redux";
+import { selectDailyNorm } from "../../redux/settings/selectors.js";
+import css from "./WaterDailyNorma.module.css";
+
+const WaterDailyNorma = () => {
+ const dailyNorma = useSelector(selectDailyNorm);
+ // console.log("daily norma", dailyNorma);
+
+ const formatVolume = (ml) => {
+ return `${(ml / 1000).toFixed(1)}`;
+ };
+
+ return (
+ <>
+
+
{formatVolume(dailyNorma)} L
+
My daily norma
+
+ >
+ );
+};
+
+export default WaterDailyNorma;
diff --git a/src/components/WaterDailyNorma/WaterDailyNorma.module.css b/src/components/WaterDailyNorma/WaterDailyNorma.module.css
new file mode 100644
index 0000000..a914aae
--- /dev/null
+++ b/src/components/WaterDailyNorma/WaterDailyNorma.module.css
@@ -0,0 +1,46 @@
+.container {
+ margin-bottom: 52px;
+ border-radius: 15px;
+ padding: 12px;
+ max-width: 102px;
+ box-shadow: 0 4px 50px 0 rgba(0, 0, 0, 0.1);
+ background-color: #ffffff;
+}
+
+.litres {
+ margin-bottom: 6px;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 100%;
+}
+
+.text {
+ font-weight: 400;
+ font-size: 10px;
+ line-height: 100%;
+ color: rgba(47, 47, 47, 0.6);
+}
+
+@media only screen and (min-width: 768px) {
+ .container {
+ padding: 14px 18px;
+ margin-bottom: 87px;
+ max-width: 129px;
+ }
+
+ .litres {
+ font-size: 15px;
+ line-height: 149%;
+ }
+
+ .text {
+ font-size: 12px;
+ line-height: 187%;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .container {
+ margin-bottom: 215px;
+ }
+}
diff --git a/src/components/WaterDetailedInfo/.gitkeep b/src/components/WaterDetailedInfo/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/WaterDetailedInfo/WaterDetailedInfo.jsx b/src/components/WaterDetailedInfo/WaterDetailedInfo.jsx
new file mode 100644
index 0000000..d0acb01
--- /dev/null
+++ b/src/components/WaterDetailedInfo/WaterDetailedInfo.jsx
@@ -0,0 +1,17 @@
+import UserPanel from "../UserPanel/UserPanel.jsx";
+import DailyInfo from "../DailyInfo/DailyInfo.jsx";
+import MonthInfo from "../MonthInfo/MonthInfo.jsx";
+import Container from "../Container/Container.jsx";
+import css from "./WaterDetailedInfo.module.css";
+
+const WaterDetailedInfo = () => {
+ return (
+
+
+
+
+
+ );
+};
+
+export default WaterDetailedInfo;
diff --git a/src/components/WaterDetailedInfo/WaterDetailedInfo.module.css b/src/components/WaterDetailedInfo/WaterDetailedInfo.module.css
new file mode 100644
index 0000000..7a7a6b6
--- /dev/null
+++ b/src/components/WaterDetailedInfo/WaterDetailedInfo.module.css
@@ -0,0 +1,23 @@
+.container {
+ min-height: 770px;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ display: flex;
+ flex-direction: column;
+ gap: 40px;
+}
+
+@media only screen and (max-width: 329px) {
+ .container {
+ padding-right: 10px;
+ padding-left: 10px;
+ }
+}
+
+@media (min-width: 768px) {
+ .container {
+ min-height: 738px;
+ padding-top: 32px;
+ padding-bottom: 32px;
+ }
+}
diff --git a/src/components/WaterForm/WaterForm.jsx b/src/components/WaterForm/WaterForm.jsx
new file mode 100644
index 0000000..4dc679d
--- /dev/null
+++ b/src/components/WaterForm/WaterForm.jsx
@@ -0,0 +1,137 @@
+import { ErrorMessage, Field, Form, Formik } from "formik";
+import * as Yup from "yup";
+import DatePicker from "react-datepicker";
+import "react-datepicker/dist/react-datepicker.css";
+import css from "./WaterForm.module.css";
+import { useState } from "react";
+import { GoPlus } from "react-icons/go";
+import { GoDash } from "react-icons/go";
+import { getWaterPerDay } from "../../redux/water/operations.js";
+import { useDispatch } from "react-redux";
+
+const entriesValidationSchema = Yup.object().shape({
+ amountOfWater: Yup.number()
+ .required("Required")
+ .min(50, "Amount of water has to be greater than 50ml")
+ .max(5000, "Amount of water has to be less than 5000ml"),
+ recordingTime: Yup.date().required("Required"),
+});
+
+const WaterForm = ({ title, paragraph, initialValues, dispatchFunction }) => {
+ const dispatch = useDispatch();
+ const [amount, setAmount] = useState(initialValues.amountOfWater);
+ const handleSubmit = (values) => {
+ const formattedTime = values.recordingTime.toISOString().split(".")[0];
+ const today = new Date().toISOString().split("T")[0];
+
+ const entries = {
+ amount: values.amountOfWater,
+ date: formattedTime,
+ };
+ if (initialValues._id) {
+ dispatch(dispatchFunction({ waterId: initialValues._id, entries }));
+ } else {
+ dispatch(dispatchFunction({ entries }));
+ }
+ dispatch(getWaterPerDay(today));
+ };
+ return (
+
+
+ {({ setFieldValue, values }) => {
+ const handleIncrease = () => {
+ const newAmount = Math.min(amount + 50, 5000);
+ setAmount(newAmount);
+ setFieldValue("amountOfWater", newAmount);
+ };
+ const handleDecrease = () => {
+ const newAmount = Math.max(amount - 50, 50);
+ setAmount(newAmount);
+ setFieldValue("amountOfWater", newAmount);
+ };
+ const handleInputChange = (e) => {
+ const inputValue = Number(e.target.value);
+ if (!isNaN(inputValue)) {
+ setAmount(inputValue);
+ setFieldValue("amountOfWater", inputValue);
+ }
+ };
+
+ return (
+
+ );
+ }}
+
+
+ );
+};
+
+export default WaterForm;
diff --git a/src/components/WaterForm/WaterForm.module.css b/src/components/WaterForm/WaterForm.module.css
new file mode 100644
index 0000000..7307a01
--- /dev/null
+++ b/src/components/WaterForm/WaterForm.module.css
@@ -0,0 +1,189 @@
+p {
+ margin: 0;
+}
+
+.wrapper {
+ border-radius: 15px;
+ padding: 40px 20px;
+ width: 313px;
+ background-color: lightblue;
+}
+
+.form {
+ display: flex;
+ flex-direction: column;
+}
+
+.addWater {
+ font-family: "Poppins", sans-serif;
+ font-weight: 700;
+ font-size: 20px;
+ color: #323f47;
+ margin-bottom: 24px;
+}
+
+.chooseAValue {
+ font-weight: 700;
+ font-size: 16px;
+ line-height: 125%;
+ letter-spacing: -0.01em;
+ color: #323f47;
+ margin-bottom: 20px;
+}
+
+.amountParagraph {
+ font-size: 14px;
+ line-height: 129%;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ margin-bottom: 8px;
+}
+
+.inputWrapper {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-bottom: 14px;
+}
+
+.valueDisplay {
+ border-radius: 30px;
+ width: 81px;
+ height: 40px;
+ background: #323f47;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 129%;
+ color: #fff;
+ text-align: center;
+}
+
+.valueDisplay > span {
+ display: block;
+ padding: 13px;
+}
+
+.ctrlBtn {
+ border-radius: 30px;
+ border: 1.5px solid #323f47;
+ background-color: inherit;
+ width: 40px;
+ height: 40px;
+}
+
+.btnIcon {
+ width: 25px;
+ height: 25px;
+}
+
+.recordingTime {
+ font-size: 16px;
+ line-height: 150%;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ margin-bottom: 8px;
+}
+
+.field {
+ border: 1px solid rgba(47, 47, 47, 0.15);
+ border-radius: 15px;
+ width: 272px;
+ padding-left: 20px;
+ height: 56px;
+ margin-bottom: 24px;
+ font-size: 14px;
+ line-height: 129%;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+}
+
+.enterValue {
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 133%;
+ letter-spacing: -0.01em;
+ color: #323f47;
+ margin-bottom: 8px;
+}
+
+.amountOfWaterField {
+ border: 1px solid rgba(47, 47, 47, 0.15);
+ border-radius: 15px;
+ padding-left: 20px;
+ width: 272px;
+ height: 56px;
+ font-size: 14px;
+ line-height: 129%;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+}
+
+.submitBtn {
+ cursor: pointer;
+ border: none;
+ font-weight: 700;
+ font-size: 16px;
+ line-height: 150%;
+ letter-spacing: -0.01em;
+ text-align: center;
+ color: #323f47;
+ border-radius: 30px;
+ padding: 18px 50px;
+ width: 141px;
+ height: 60px;
+ margin-top: 24px;
+ background: #9be1a0;
+ transition: all 700ms cubic-bezier(0.42, 0, 0.61, 0.97) 0s;
+}
+
+.submitBtn:hover {
+ background: #87d28d;
+}
+
+@media screen and (min-width: 768px) {
+ .wrapper {
+ padding: 40px;
+ width: 438px;
+ height: 555px;
+ background-color: lightblue;
+ }
+
+ .addWater {
+ font-size: 28px;
+ line-height: 114%;
+ }
+
+ .chooseAValue {
+ font-size: 18px;
+ line-height: 133%;
+ }
+
+ .amountParagraph {
+ font-size: 16px;
+ line-height: 150%;
+ }
+
+ .valueDisplay {
+ width: 86px;
+ height: 43px;
+ font-size: 15px;
+ }
+
+ .ctrlBtn {
+ width: 43px;
+ height: 43px;
+ }
+
+ .btnIcon {
+ width: 28px;
+ height: 28px;
+ }
+ .amountOfWaterField,
+ .field {
+ width: 360px;
+ font-size: 16px;
+ line-height: 150%;
+ letter-spacing: -0.01em;
+ color: #2f2f2f;
+ }
+}
diff --git a/src/components/WaterItem/.gitkeep b/src/components/WaterItem/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/WaterItem/WaterItem.jsx b/src/components/WaterItem/WaterItem.jsx
new file mode 100644
index 0000000..cb1e5e2
--- /dev/null
+++ b/src/components/WaterItem/WaterItem.jsx
@@ -0,0 +1,46 @@
+import { useDispatch } from "react-redux";
+import { deleteWaterItem } from "../../redux/water/operations";
+// import { useState } from "react";
+// import WaterModal from "../../modals/WaterModal/WaterModal";
+import s from "./WaterItem.module.css";
+const WaterItem = ({ _id, amount, date, onEdit }) => {
+ // const [logOutModalisOpen, setLogOutModalisOpen] = useState(false);
+ // const openLogOutModal = () => setLogOutModalisOpen(true);
+ // const closeLogOutModal = () => setLogOutModalisOpen(false);
+ const dispatch = useDispatch();
+
+ const handleDelete = () => dispatch(deleteWaterItem(_id));
+
+ return (
+
+
+
+
+
+
+
+
+
+ {/*
*/}
+
+ );
+};
+
+export default WaterItem;
diff --git a/src/components/WaterItem/WaterItem.module.css b/src/components/WaterItem/WaterItem.module.css
new file mode 100644
index 0000000..ed889f5
--- /dev/null
+++ b/src/components/WaterItem/WaterItem.module.css
@@ -0,0 +1,91 @@
+/*style*/
+.wrapper {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ background-color: #fff;
+ border-radius: 15px;
+ gap: 10px;
+ padding: 18px 14px;
+ /* width: 149px; */
+ margin: 24px 0px;
+}
+
+.waterglass {
+ width: 38px;
+ height: 38px;
+}
+
+.amount {
+ color: #323f47;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 14px;
+}
+
+.time {
+ color: #2f2f2f99;
+ font-weight: 400;
+ font-size: 12px;
+ line-height: 12px;
+}
+
+.btn {
+ border: none;
+ background-color: transparent;
+}
+
+.edit,
+.trash {
+ fill: #fff;
+ stroke: var(--text-primary-dark);
+ width: 14px;
+ height: 14px;
+}
+
+.container {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+@media screen and (min-width: 768px) {
+ .wrapper {
+ gap: 20;
+ width: 192px;
+ padding: 20px;
+ }
+}
+@media screen and (min-width: 1440px) {
+ /* .wrapper {
+ gap: 20px;
+ padding: 20px;
+ width: 192px;
+ margin: 24px 0px;
+ } */
+
+ .waterglass {
+ width: 44px;
+ height: 45px;
+ }
+
+ .amount {
+ font-size: 15px;
+ line-height: 22.4px;
+ }
+
+ .time {
+ font-size: 12px;
+ line-height: 22.4px;
+ }
+
+ .container {
+ gap: 14px;
+ }
+
+ .edit,
+ .trash {
+ width: 16px;
+ height: 16px;
+ }
+}
diff --git a/src/components/WaterList/.gitkeep b/src/components/WaterList/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/WaterList/WaterList.jsx b/src/components/WaterList/WaterList.jsx
new file mode 100644
index 0000000..4a22d84
--- /dev/null
+++ b/src/components/WaterList/WaterList.jsx
@@ -0,0 +1,119 @@
+// import { useDispatch, useSelector } from "react-redux";
+
+import { Scrollbar } from "swiper/modules";
+import { Swiper, SwiperSlide } from "swiper/react";
+
+import "swiper/css";
+import "swiper/css/scrollbar";
+
+import WaterItem from "../WaterItem/WaterItem";
+import s from "./WaterList.module.css";
+import { useDispatch, useSelector } from "react-redux";
+// import { selectWaterItems } from "../../redux/water/selectors";
+import { useEffect, useState } from "react";
+import { getWaterPerDay } from "../../redux/water/operations";
+import { selectWaterAmountPerDay } from "../../redux/water/selectors";
+import WaterModal from "../../modals/WaterModal/WaterModal";
+// import { getWaterData } from "../../redux/water/operations.js";
+const WaterList = () => {
+ const [selectedItem, setSelectedItem] = useState(null);
+ const dispatch = useDispatch();
+
+ const getCurrentDate = () => {
+ const today = new Date();
+ return today.toISOString().split("T")[0];
+ };
+
+ useEffect(() => {
+ const date = getCurrentDate();
+ dispatch(getWaterPerDay(date));
+ }, [dispatch]);
+
+ const items = useSelector(selectWaterAmountPerDay);
+ // console.log(items);
+
+ // const items = useSelector(selectWaterItems);
+ // useEffect(() => {
+ // dispatch(getWaterData());
+ // }, [dispatch]);
+ const formatTime = (isoDate) => {
+ const date = new Date(isoDate);
+ const hours = date.getHours();
+ const minutes = date.getMinutes();
+
+ // Форматування годин:хвилин
+ const formattedHours = hours % 12 || 12; // Перетворення 24-годинного формату на 12-годинний
+ const formattedMinutes = minutes.toString().padStart(2, "0"); // Додаємо 0 перед хвилинами, якщо потрібно
+ const period = hours >= "12" ? "PM" : "AM"; // Визначаємо AM або PM
+
+ return `${formattedHours}:${formattedMinutes} ${period}`;
+ };
+
+ // const closeLogOutModal = () => setLogOutModalisOpen(false);
+ const [logOutModalisOpen, setLogOutModalisOpen] = useState(false);
+ // const openLogOutModal = () => setLogOutModalisOpen(true);
+ const openLogOutModal = (item) => {
+ setSelectedItem(item);
+ setLogOutModalisOpen(true);
+ };
+ const closeLogOutModal = () => {
+ setLogOutModalisOpen(false);
+ setSelectedItem(null);
+ };
+
+ return (
+
+ {Array.isArray(items) && items.length === 1 ? (
+ // Якщо в масиві тільки один елемент
+ -
+ openLogOutModal(items[0])}
+ />
+
+ ) : (
+
+ {Array.isArray(items) &&
+ items.map((item, index) => (
+
+ openLogOutModal(item)}
+ />
+
+ ))}
+
+ )}
+
+
+ );
+};
+
+export default WaterList;
diff --git a/src/components/WaterList/WaterList.module.css b/src/components/WaterList/WaterList.module.css
new file mode 100644
index 0000000..1f520cb
--- /dev/null
+++ b/src/components/WaterList/WaterList.module.css
@@ -0,0 +1,23 @@
+/*style*/
+.wrapper {
+ display: flex;
+ gap: 8px;
+}
+
+.scrollbar {
+ background: rgba(0, 0, 0, 0.1);
+ border-radius: 10px;
+ height: 8px;
+}
+
+@media screen and (min-width: 768px) {
+ .wrapper {
+ gap: 32px;
+ }
+}
+
+@media screen and (min-width: 1440px) {
+ .wrapper {
+ gap: 16px;
+ }
+}
diff --git a/src/components/WaterMainInfo/.gitkeep b/src/components/WaterMainInfo/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/WaterMainInfo/WaterMainInfo.jsx b/src/components/WaterMainInfo/WaterMainInfo.jsx
new file mode 100644
index 0000000..d95c8c0
--- /dev/null
+++ b/src/components/WaterMainInfo/WaterMainInfo.jsx
@@ -0,0 +1,35 @@
+import { useEffect } from "react";
+import AddWaterBtn from "../AddWaterBtn/AddWaterBtn.jsx";
+import WaterDailyNorma from "../WaterDailyNorma/WaterDailyNorma.jsx";
+import WaterProgressBar from "../WaterProgressBar/WaterProgressBar.jsx";
+
+import css from "./WaterMainInfo.module.css";
+import { getUserInfo } from "../../redux/settings/operations.js";
+import { useDispatch } from "react-redux";
+import { getWaterPerDay } from "../../redux/water/operations.js";
+
+const WaterMainInfo = () => {
+ const dispatch = useDispatch();
+
+ useEffect(() => {
+ dispatch(getUserInfo());
+ }, [dispatch]);
+
+ useEffect(() => {
+ const today = new Date().toLocaleDateString("en-CA");
+ dispatch(getWaterPerDay(today));
+ }, [dispatch]);
+
+ return (
+ <>
+
+ >
+ );
+};
+
+export default WaterMainInfo;
diff --git a/src/components/WaterMainInfo/WaterMainInfo.module.css b/src/components/WaterMainInfo/WaterMainInfo.module.css
new file mode 100644
index 0000000..d2f8d0b
--- /dev/null
+++ b/src/components/WaterMainInfo/WaterMainInfo.module.css
@@ -0,0 +1,62 @@
+.container {
+ border-radius: 30px;
+ background-color: #9be1a0;
+ background-image: url("/src/img/water-main-info/bottle-mob.png");
+ background-repeat: no-repeat;
+ background-position: center 50px;
+ padding: 24px 16px 120px 16px;
+ position: relative;
+}
+
+.title {
+ font-family: "Poppins", sans-serif;
+ color: #323f47;
+ font-size: 18px;
+ font-weight: 700;
+ text-transform: uppercase;
+ line-height: 111%;
+ margin-bottom: 78px;
+}
+
+@media only screen and (min-width: 768px) {
+ .container {
+ padding: 32px 32px 150px;
+ background-image: url("/src/img/water-main-info/bottle-tablet.png");
+ background-position: center 69px;
+ }
+
+ .title {
+ line-height: 100%;
+ margin-bottom: 101px;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .container {
+ width: calc((100% - 32px) / 2);
+ box-sizing: border-box;
+ background-image: url("/src/img/water-main-info/bottle-desktop.png");
+ }
+}
+
+/* ============ retina =========== */
+
+@media only screen and (min-resolution: 192dpi) and (max-width: 767px) {
+ .container {
+ background-size: auto 80%;
+ }
+}
+
+@media only screen and (min-width: 768px) and (min-resolution: 192dpi) {
+ .container {
+ background-image: url("/src/img/water-main-info/bottle-tablet@2x.png");
+ background-size: auto 84%;
+ }
+}
+
+@media only screen and (min-width: 1440px) and (min-resolution: 192dpi) {
+ .container {
+ background-image: url("/src/img/water-main-info/bottle-desktop@2x.png");
+ background-size: auto 87%;
+ }
+}
diff --git a/src/components/WaterProgressBar/.gitkeep b/src/components/WaterProgressBar/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/WaterProgressBar/WaterProgressBar.jsx b/src/components/WaterProgressBar/WaterProgressBar.jsx
new file mode 100644
index 0000000..f399e36
--- /dev/null
+++ b/src/components/WaterProgressBar/WaterProgressBar.jsx
@@ -0,0 +1,50 @@
+import { useSelector } from "react-redux";
+import { selectDailyNorm } from "../../redux/settings/selectors.js";
+import { selectWaterAmountPerDay } from "../../redux/water/selectors.js";
+import css from "./WaterProgressBar.module.css";
+
+const WaterProgressBar = () => {
+ const dailyNorma = useSelector(selectDailyNorm);
+ const waterAmount = useSelector(selectWaterAmountPerDay);
+ console.log(waterAmount);
+
+ const waterPercentage = Math.min(
+ Math.round((waterAmount / dailyNorma) * 100),
+ 100
+ );
+
+ return (
+ <>
+
+
Today
+
{waterPercentage}%
+
+
+ 0%
+ 50%
+ 100%
+
+
+ >
+ );
+};
+
+export default WaterProgressBar;
diff --git a/src/components/WaterProgressBar/WaterProgressBar.module.css b/src/components/WaterProgressBar/WaterProgressBar.module.css
new file mode 100644
index 0000000..40742da
--- /dev/null
+++ b/src/components/WaterProgressBar/WaterProgressBar.module.css
@@ -0,0 +1,78 @@
+.container {
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 198px;
+ border-radius: 15px;
+ padding: 12px;
+ box-shadow: 0 4px 50px 0 rgba(0, 0, 0, 0.1);
+ background-color: #ffffff;
+}
+
+.today {
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 100%;
+ margin-bottom: 8px;
+}
+
+.percents {
+ display: flex;
+ justify-content: space-between;
+ font-weight: 400;
+ font-size: 10px;
+ line-height: 100%;
+ color: rgba(47, 47, 47, 0.6);
+ align-items: center;
+}
+
+.volumeInfo {
+ font-size: 10px;
+ line-height: 180%;
+ color: #9be1a0;
+}
+.progressBarContainer {
+ position: relative;
+ max-width: 255px;
+ height: 0.5rem;
+ background-color: #f0eff4;
+ border-radius: 9999px;
+ margin-bottom: 8px;
+}
+
+.progressBar {
+ position: absolute;
+ left: 0;
+ top: 0;
+ height: 100%;
+ background-color: #9be1a0;
+ border-radius: 9px;
+ transition: width 0.3s ease-out;
+}
+
+.icon {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+}
+
+@media only screen and (min-width: 768px) {
+ .container {
+ min-width: 295px;
+ padding: 20px;
+ }
+
+ .today {
+ font-size: 15px;
+ line-height: 149%;
+ }
+
+ .percents {
+ font-size: 12px;
+ line-height: 187%;
+ }
+}
+/*
+@media only screen and (min-width: 1440px) {
+ .container {
+ }
+} */
diff --git a/src/components/WelcomeSection/.gitkeep b/src/components/WelcomeSection/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/components/WelcomeSection/WelcomeSection.jsx b/src/components/WelcomeSection/WelcomeSection.jsx
new file mode 100644
index 0000000..efb2291
--- /dev/null
+++ b/src/components/WelcomeSection/WelcomeSection.jsx
@@ -0,0 +1,29 @@
+import Logo from '../Logo/Logo';
+import { NavLink } from 'react-router-dom';
+import styles from './WelcomeSection.module.css';
+
+const WelcomeSection = ({ className = '' }) => {
+ return (
+
+
+
+
+
Water consumption tracker
+
+ Record daily water intake and track
+
+
+
+
+ Try tracker
+
+
+ Sign In
+
+
+
+
+ );
+};
+
+export default WelcomeSection;
diff --git a/src/components/WelcomeSection/WelcomeSection.module.css b/src/components/WelcomeSection/WelcomeSection.module.css
new file mode 100644
index 0000000..09f0939
--- /dev/null
+++ b/src/components/WelcomeSection/WelcomeSection.module.css
@@ -0,0 +1,182 @@
+/* Reset Default Styles */
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ line-height: 1;
+}
+
+/* Logo Component */
+.logo {
+ margin-bottom: 74px;
+ width: 114px;
+ height: 20px;
+ letter-spacing: -0.01em;
+}
+
+/* Headers Styles */
+.headersWrapper {
+ display: flex;
+ flex-direction: column-reverse;
+ text-align: left;
+}
+
+.subtitle {
+ font-family: 'Poppins', sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ height: 18px;
+ letter-spacing: 0.06em;
+ line-height: 1em;
+ margin-bottom: 16px;
+ color: var(--text-primary-dark);
+}
+
+.title {
+ font-family: 'Poppins', sans-serif;
+ font-weight: 700;
+ font-size: 38px;
+ margin-bottom: 32px;
+ line-height: 1em;
+ color: var(--background-primary-dark);
+ letter-spacing: -0.01em;
+}
+
+/* Buttons Styles */
+.buttonsWrapper {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 51px;
+}
+
+.btn {
+ font-family: 'Poppins', sans-serif;
+ font-size: 14px;
+ line-height: 18px;
+ letter-spacing: -0.01em;
+ font-weight: 700;
+ text-align: center;
+ align-items: center;
+ border-radius: 30px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ text-decoration: none;
+ transition: background-color 0.3s ease;
+}
+
+.btnPrimary {
+ color: var(--background-primary-dark);
+ background-color: var(--accent);
+ padding: 14px 19px;
+ width: 116px;
+ height: 46px;
+}
+
+.btnSecondary {
+ color: var(--background-primary-dark);
+ border: 1px solid var(--background-primary-dark);
+ padding: 14px 28px;
+ width: 104px;
+ height: 46px;
+}
+
+.btnPrimary:hover {
+ filter: brightness(90%);
+}
+
+.btnSecondary:hover {
+ color: var(--accent);
+ border: 1px solid var(--accent);
+}
+
+/* BREAKPOINTS (Mobile First) */
+/* md */
+@media (min-width: 768px) {
+ .logo {
+ font-size: 24px;
+ margin-bottom: 50px;
+ width: 155px;
+ height: 24px;
+ letter-spacing: -0.01em;
+ }
+
+ .welcomeSection {
+ width: calc(704px - 64px);
+ }
+
+ .contentWrapper {
+ padding: 0px 32px;
+ }
+
+ .subtitle {
+ height: 24px;
+ font-size: 16px;
+ letter-spacing: 0.06em;
+ }
+
+ .title {
+ height: 210px;
+ font-size: 64px;
+ line-height: 70px;
+ margin-bottom: 32px;
+ letter-spacing: -0.01em;
+ }
+
+ .btn {
+ font-family: 'Poppins', sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ letter-spacing: -0.01em;
+ font-weight: 700;
+ }
+
+ .buttonsWrapper {
+ margin-bottom: 18px;
+ gap: 16px;
+ }
+
+ .btnPrimary {
+ padding: 18px 40px;
+ height: 60px;
+ width: 169px;
+ }
+
+ .btnSecondary {
+ padding: 18px 40px;
+ height: 60px;
+ width: 135px;
+ }
+}
+
+/* lg */
+@media (min-width: 1440px) {
+ .logo {
+ margin-bottom: 132px;
+ }
+
+ .title {
+ height: 228px;
+ line-height: 76px;
+ font-size: 80px;
+ }
+
+ .buttonsWrapper {
+ margin-bottom: 156px;
+ }
+
+ .btnPrimary {
+ padding: 18px 40px;
+ }
+
+ .btnSecondary {
+ padding: 18px 40px;
+ }
+}
diff --git a/src/img/advantages/avatar1D.webp b/src/img/advantages/avatar1D.webp
new file mode 100644
index 0000000..401aff2
Binary files /dev/null and b/src/img/advantages/avatar1D.webp differ
diff --git a/src/img/advantages/avatar1D@2x.webp b/src/img/advantages/avatar1D@2x.webp
new file mode 100644
index 0000000..289ecfb
Binary files /dev/null and b/src/img/advantages/avatar1D@2x.webp differ
diff --git a/src/img/advantages/avatar1M.webp b/src/img/advantages/avatar1M.webp
new file mode 100644
index 0000000..964dc73
Binary files /dev/null and b/src/img/advantages/avatar1M.webp differ
diff --git a/src/img/advantages/avatar1M@2x.webp b/src/img/advantages/avatar1M@2x.webp
new file mode 100644
index 0000000..37d586e
Binary files /dev/null and b/src/img/advantages/avatar1M@2x.webp differ
diff --git a/src/img/advantages/avatar2D.webp b/src/img/advantages/avatar2D.webp
new file mode 100644
index 0000000..b3208a1
Binary files /dev/null and b/src/img/advantages/avatar2D.webp differ
diff --git a/src/img/advantages/avatar2D@2x.webp b/src/img/advantages/avatar2D@2x.webp
new file mode 100644
index 0000000..6717a75
Binary files /dev/null and b/src/img/advantages/avatar2D@2x.webp differ
diff --git a/src/img/advantages/avatar2M.webp b/src/img/advantages/avatar2M.webp
new file mode 100644
index 0000000..729c1bd
Binary files /dev/null and b/src/img/advantages/avatar2M.webp differ
diff --git a/src/img/advantages/avatar2M@2x.webp b/src/img/advantages/avatar2M@2x.webp
new file mode 100644
index 0000000..8017b9c
Binary files /dev/null and b/src/img/advantages/avatar2M@2x.webp differ
diff --git a/src/img/advantages/avatar3D.webp b/src/img/advantages/avatar3D.webp
new file mode 100644
index 0000000..0128e44
Binary files /dev/null and b/src/img/advantages/avatar3D.webp differ
diff --git a/src/img/advantages/avatar3D@2x.webp b/src/img/advantages/avatar3D@2x.webp
new file mode 100644
index 0000000..2f0493c
Binary files /dev/null and b/src/img/advantages/avatar3D@2x.webp differ
diff --git a/src/img/advantages/avatar3M.webp b/src/img/advantages/avatar3M.webp
new file mode 100644
index 0000000..2004a11
Binary files /dev/null and b/src/img/advantages/avatar3M.webp differ
diff --git a/src/img/advantages/avatar3M@2x.webp b/src/img/advantages/avatar3M@2x.webp
new file mode 100644
index 0000000..eda76a0
Binary files /dev/null and b/src/img/advantages/avatar3M@2x.webp differ
diff --git a/src/img/advantages/girlD.webp b/src/img/advantages/girlD.webp
new file mode 100644
index 0000000..1be10f5
Binary files /dev/null and b/src/img/advantages/girlD.webp differ
diff --git a/src/img/advantages/girlD@2x.webp b/src/img/advantages/girlD@2x.webp
new file mode 100644
index 0000000..0129849
Binary files /dev/null and b/src/img/advantages/girlD@2x.webp differ
diff --git a/src/img/advantages/girlM.webp b/src/img/advantages/girlM.webp
new file mode 100644
index 0000000..704a10b
Binary files /dev/null and b/src/img/advantages/girlM.webp differ
diff --git a/src/img/advantages/girlM@2x.webp b/src/img/advantages/girlM@2x.webp
new file mode 100644
index 0000000..6047e3c
Binary files /dev/null and b/src/img/advantages/girlM@2x.webp differ
diff --git a/src/img/advantages/girlT.webp b/src/img/advantages/girlT.webp
new file mode 100644
index 0000000..7ca97e9
Binary files /dev/null and b/src/img/advantages/girlT.webp differ
diff --git a/src/img/advantages/girlT@2x.webp b/src/img/advantages/girlT@2x.webp
new file mode 100644
index 0000000..ff73c98
Binary files /dev/null and b/src/img/advantages/girlT@2x.webp differ
diff --git a/src/img/water-main-info/bottle-desktop.png b/src/img/water-main-info/bottle-desktop.png
new file mode 100644
index 0000000..e6a8834
Binary files /dev/null and b/src/img/water-main-info/bottle-desktop.png differ
diff --git a/src/img/water-main-info/bottle-desktop@2x.png b/src/img/water-main-info/bottle-desktop@2x.png
new file mode 100644
index 0000000..cace7f7
Binary files /dev/null and b/src/img/water-main-info/bottle-desktop@2x.png differ
diff --git a/src/img/water-main-info/bottle-mob.png b/src/img/water-main-info/bottle-mob.png
new file mode 100644
index 0000000..4708776
Binary files /dev/null and b/src/img/water-main-info/bottle-mob.png differ
diff --git a/src/img/water-main-info/bottle-mob@2x.png b/src/img/water-main-info/bottle-mob@2x.png
new file mode 100644
index 0000000..862646b
Binary files /dev/null and b/src/img/water-main-info/bottle-mob@2x.png differ
diff --git a/src/img/water-main-info/bottle-tablet.png b/src/img/water-main-info/bottle-tablet.png
new file mode 100644
index 0000000..7e01f90
Binary files /dev/null and b/src/img/water-main-info/bottle-tablet.png differ
diff --git a/src/img/water-main-info/bottle-tablet@2x.png b/src/img/water-main-info/bottle-tablet@2x.png
new file mode 100644
index 0000000..bd668f2
Binary files /dev/null and b/src/img/water-main-info/bottle-tablet@2x.png differ
diff --git a/src/index.css b/src/index.css
index 6119ad9..c0bc6dc 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,68 +1,52 @@
+/* Color Variables */
:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
+ --accent: #9be1a0;
+ --text-primary-dark: #2f2f2f;
+ --text-primary-light: #ffffff;
+ --background-primary-dark: #323f47;
+ --background-primary-light: #ffffff;
+ --background-secondary-light: #f0eff4;
}
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
+/* Reset Default Styles */
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
}
-a:hover {
- color: #535bf2;
+
+* {
+ margin: 0;
+ padding: 0;
+ line-height: 1;
}
+html,
body {
+ font-family: Poppins;
margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
+ padding: 0;
}
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p {
+ margin-top: 0;
+ margin-bottom: 0;
}
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
+ul,
+ol {
+ list-style-type: none;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 0;
}
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
+a {
+ text-decoration: none;
}
diff --git a/src/main.jsx b/src/main.jsx
index b9a1a6d..1a205cf 100644
--- a/src/main.jsx
+++ b/src/main.jsx
@@ -1,10 +1,20 @@
-import { StrictMode } from 'react'
-import { createRoot } from 'react-dom/client'
-import './index.css'
-import App from './App.jsx'
+import { StrictMode } from "react";
+import { createRoot } from "react-dom/client";
+import "./index.css";
+import App from "./App.jsx";
+import { BrowserRouter } from "react-router-dom";
+import { Provider } from "react-redux";
+import { PersistGate } from "redux-persist/integration/react";
+import { persistor, store } from "./redux/store.js";
-createRoot(document.getElementById('root')).render(
+createRoot(document.getElementById("root")).render(
-
- ,
-)
+
+
+
+
+
+
+
+
+);
diff --git a/src/modals/DeleteWaterModal/.gitkeep b/src/modals/DeleteWaterModal/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/modals/DeleteWaterModal/DeleteWaterModal.jsx b/src/modals/DeleteWaterModal/DeleteWaterModal.jsx
new file mode 100644
index 0000000..77f5c2d
--- /dev/null
+++ b/src/modals/DeleteWaterModal/DeleteWaterModal.jsx
@@ -0,0 +1,54 @@
+import css from "./DeleteWaterModal.module.css";
+import Modal from "../Modal/Modal";
+import { useDispatch } from "react-redux";
+import { apiDeleteWater } from "../../redux/water/operations";
+import iziToast from "izitoast";
+import "izitoast/dist/css/iziToast.min.css";
+
+const DeleteWaterModal = ({ isOpen, onClose }) => {
+ const dispatch = useDispatch();
+
+ const handleDelete = () => {
+ dispatch(apiDeleteWater()); // логика удаления воды
+ onClose();
+ iziToast.success({
+ title: "Done",
+ message: "Successfully Logged Out!",
+ displayMode: 1,
+ position: "topRight",
+ maxWidth: "300px",
+ });
+ // актуализировать с помощью redux данные в WaterProgressBar, WaterList та Calendar
+ };
+
+ return (
+
+
+
+
Delete entry
+
Are you sure you want to delete the entry?
+
+
+
+
+
+
+
+ );
+};
+
+export default DeleteWaterModal;
diff --git a/src/modals/DeleteWaterModal/DeleteWaterModal.module.css b/src/modals/DeleteWaterModal/DeleteWaterModal.module.css
new file mode 100644
index 0000000..a7f397d
--- /dev/null
+++ b/src/modals/DeleteWaterModal/DeleteWaterModal.module.css
@@ -0,0 +1,101 @@
+.modal_content {
+ background-color: var(--background-primary-light);
+ border-radius: 15px;
+ padding: 40px 14px;
+ text-align: center;
+ max-width: 375px;
+ min-width: 320px;
+ box-shadow: 0 4px 50px 0 rgba(0, 0, 0, 0.1);
+ transition: opacity 300ms cubic-bezier(0.4, 0, 0.2, 1),
+ transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.wrapperText {
+ margin-bottom: 28px;
+}
+
+.title {
+ font-size: 20px;
+ font-weight: 700;
+ margin-bottom: 16px;
+ line-height: 1.2;
+ letter-spacing: -0.01em;
+}
+
+.text {
+ font-size: 14px;
+ line-height: 1.28;
+ letter-spacing: -0.01em;
+}
+
+.buttonContainer {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 9px;
+}
+
+.deleteBtn,
+.cancelBtn {
+ width: 100%;
+ padding: 14px 0;
+ border: none;
+ border-radius: 30px;
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 1.28;
+ cursor: pointer;
+}
+
+.deleteBtn {
+ background-color: var(--accent);
+ color: var(--background-primary-dark);
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.deleteBtn:hover,
+.deleteBtn:active {
+ background-color: #87d28d;
+}
+
+.cancelBtn {
+ background-color: var(--background-secondary-light);
+ color: rgba(50, 63, 71, 0.4);
+ transition: color 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.cancelBtn:hover {
+ color: var(--background-primary-dark);
+}
+
+@media only screen and (min-width: 768px) {
+ .modal_content {
+ padding: 40px 78.5px;
+ width: 516px;
+ max-width: 516px;
+ }
+
+ .title {
+ font-size: 28px;
+ line-height: 1.14;
+ margin-bottom: 24px;
+ }
+
+ .text {
+ font-size: 18px;
+ line-height: 1.33;
+ margin-bottom: 24px;
+ }
+
+ .buttonContainer {
+ flex-direction: row;
+ gap: 10px;
+ }
+
+ .deleteBtn,
+ .cancelBtn {
+ padding: 18px 0;
+ font-size: 16px;
+ line-height: 1.5;
+ }
+}
diff --git a/src/modals/LogOutModal/.gitkeep b/src/modals/LogOutModal/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/modals/LogOutModal/LogOutModal.jsx b/src/modals/LogOutModal/LogOutModal.jsx
new file mode 100644
index 0000000..179e866
--- /dev/null
+++ b/src/modals/LogOutModal/LogOutModal.jsx
@@ -0,0 +1,60 @@
+import css from "./LogOutModal.module.css";
+import Modal from "../Modal/Modal";
+
+import { useDispatch } from "react-redux";
+import { apiLogout } from "../../redux/auth/operations";
+import { useNavigate } from "react-router-dom";
+import iziToast from "izitoast";
+import "izitoast/dist/css/iziToast.min.css";
+
+const LogOutModal = ({ isOpen, onClose }) => {
+ const dispatch = useDispatch();
+ const navigateTo = useNavigate();
+ const handleRedirect = () => {
+ navigateTo("/");
+ };
+
+ const handleLogOut = () => {
+ dispatch(apiLogout());
+ onClose();
+ handleRedirect();
+ iziToast.success({
+ title: "Done",
+ message: "Successfully Logged Out!",
+ displayMode: 1,
+ position: "topRight",
+ maxWidth: "300px",
+ });
+ };
+
+ return (
+
+
+
+
Log Out
+
Do you really want to leave?
+
+
+
+
+
+
+
+ );
+};
+
+export default LogOutModal;
diff --git a/src/modals/LogOutModal/LogOutModal.module.css b/src/modals/LogOutModal/LogOutModal.module.css
new file mode 100644
index 0000000..a568742
--- /dev/null
+++ b/src/modals/LogOutModal/LogOutModal.module.css
@@ -0,0 +1,101 @@
+.modal_content {
+ background-color: var(--background-primary-light);
+ border-radius: 15px;
+ padding: 40px 14px;
+ text-align: center;
+ max-width: 375px;
+ min-width: 320px;
+ box-shadow: 0 4px 50px 0 rgba(0, 0, 0, 0.1);
+ transition: opacity 300ms cubic-bezier(0.4, 0, 0.2, 1),
+ transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.wrapperText {
+ margin-bottom: 28px;
+}
+
+.title {
+ font-size: 20px;
+ font-weight: 700;
+ margin-bottom: 16px;
+ line-height: 1.2;
+ letter-spacing: -0.01em;
+}
+
+.text {
+ font-size: 14px;
+ line-height: 1.28;
+ letter-spacing: -0.01em;
+}
+
+.buttonContainer {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 9px;
+}
+
+.logoutBtn,
+.cancelBtn {
+ width: 100%;
+ padding: 14px 0;
+ border: none;
+ border-radius: 30px;
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 1.28;
+ cursor: pointer;
+}
+
+.logoutBtn {
+ background-color: var(--accent);
+ color: var(--background-primary-dark);
+ transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.logoutBtn:hover,
+.logoutBtn:active {
+ background-color: #87d28d;
+}
+
+.cancelBtn {
+ background-color: var(--background-secondary-light);
+ color: rgba(50, 63, 71, 0.4);
+ transition: color 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.cancelBtn:hover {
+ color: var(--background-primary-dark);
+}
+
+@media only screen and (min-width: 768px) {
+ .modal_content {
+ padding: 40px 78.5px;
+ width: 516px;
+ max-width: 516px;
+ }
+
+ .title {
+ font-size: 28px;
+ line-height: 1.14;
+ margin-bottom: 24px;
+ }
+
+ .text {
+ font-size: 18px;
+ line-height: 1.33;
+ margin-bottom: 24px;
+ }
+
+ .buttonContainer {
+ flex-direction: row;
+ gap: 10px;
+ }
+
+ .logoutBtn,
+ .cancelBtn {
+ padding: 18px 0;
+ font-size: 16px;
+ line-height: 1.5;
+ }
+}
diff --git a/src/modals/Modal/.gitkeep b/src/modals/Modal/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/modals/Modal/Modal.jsx b/src/modals/Modal/Modal.jsx
new file mode 100644
index 0000000..3ec0ce8
--- /dev/null
+++ b/src/modals/Modal/Modal.jsx
@@ -0,0 +1,43 @@
+import { useEffect } from "react";
+import css from "./Modal.module.css";
+
+const Modal = ({ isOpen, onClose, children }) => {
+ useEffect(() => {
+ const handleEscape = (e) => {
+ if (e.key === "Escape") {
+ onClose();
+ }
+ };
+ if (isOpen) {
+ document.addEventListener("keydown", handleEscape);
+ }
+ return () => {
+ document.removeEventListener("keydown", handleEscape);
+ };
+ }, [isOpen, onClose]);
+ if (!isOpen) {
+ return null;
+ }
+ return (
+
+
+
e.stopPropagation()}>
+
+
+ {children}
+
+
+
+ );
+};
+
+export default Modal;
diff --git a/src/modals/Modal/Modal.module.css b/src/modals/Modal/Modal.module.css
new file mode 100644
index 0000000..87b892b
--- /dev/null
+++ b/src/modals/Modal/Modal.module.css
@@ -0,0 +1,56 @@
+.modal_backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.5);
+ overflow: hidden;
+ overflow-y: auto;
+ z-index: 999;
+}
+.modal_wrapper {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ min-height: 100%;
+}
+.modal_content {
+ position: relative;
+ background: var(--background-primary-light);
+ border-radius: 15px;
+}
+.modal_closeBtn {
+ position: absolute;
+ top: 20px;
+ right: 16px;
+ padding: 0;
+ background-color: transparent;
+ border: transparent;
+ cursor: pointer;
+}
+
+.modal_closeIcon {
+ width: 24px;
+ height: 24px;
+ stroke: var(--text-primary-dark);
+ transition: stroke 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.modal_closeBtn .modal_closeIcon:hover {
+ stroke: var(--accent);
+}
+
+@media only screen and (min-width: 768px) {
+ .modal_closeBtn {
+ right: 20px;
+ }
+ .modal_closeIcon {
+ width: 28px;
+ height: 28px;
+ }
+}
diff --git a/src/modals/UserSettingsModal/.gitkeep b/src/modals/UserSettingsModal/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/modals/UserSettingsModal/UserSettingsModal.jsx b/src/modals/UserSettingsModal/UserSettingsModal.jsx
new file mode 100644
index 0000000..f439085
--- /dev/null
+++ b/src/modals/UserSettingsModal/UserSettingsModal.jsx
@@ -0,0 +1,57 @@
+import ReactDOM from "react-dom";
+import UsersSettingsForm from "../../components/UsersSettingsForm/UsersSettingsForm";
+import css from "./UserSettingsModal.module.css";
+import { useEffect } from "react";
+
+const UserSettingsModal = ({ onClose }) => {
+ useEffect(() => {
+ const originalStyle = window.getComputedStyle(document.body).overflow;
+ document.body.style.overflow = "hidden";
+
+ return () => {
+ document.body.style.overflow = originalStyle;
+ };
+ }, []);
+
+ useEffect(() => {
+ const handleKeyDown = (e) => {
+ if (e.key === "Escape") {
+ onClose();
+ }
+ };
+
+ document.addEventListener("keydown", handleKeyDown);
+ return () => {
+ document.removeEventListener("keydown", handleKeyDown);
+ };
+ }, [onClose]);
+
+ const handleOverlayClick = (e) => {
+ if (e.target === e.currentTarget) {
+ onClose();
+ }
+ };
+
+ return ReactDOM.createPortal(
+
+
e.stopPropagation()}>
+
+
Setting
+
+
+
+
+
,
+ document.body
+ );
+};
+
+export default UserSettingsModal;
diff --git a/src/modals/UserSettingsModal/UserSettingsModal.module.css b/src/modals/UserSettingsModal/UserSettingsModal.module.css
new file mode 100644
index 0000000..6e079c7
--- /dev/null
+++ b/src/modals/UserSettingsModal/UserSettingsModal.module.css
@@ -0,0 +1,111 @@
+.settingModalOverlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ background-color: rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: flex-start;
+ justify-content: center;
+ z-index: 1000;
+ overflow-y: auto;
+ scrollbar-width: thin;
+ scrollbar-color: #ccc transparent;
+}
+
+.settingModal {
+ border-radius: 15px;
+ padding: 40px 20px;
+ width: 343px;
+ margin-top: 80px;
+ background-color: #fff;
+ box-shadow: 0 4px 50px 0 rgba(0, 0, 0, 0.1);
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ max-height: 735px;
+ @media (min-width: 768px) {
+ padding: 40px;
+ width: 648px;
+ max-height: 880px;
+ }
+
+ @media (min-width: 1440px) {
+ width: 920px;
+ max-height: 685px;
+ }
+}
+
+.settingModalHeader {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 20px;
+ @media (max-width: 767px) {
+ position: relative;
+ }
+}
+
+.settingModalIcon {
+ stroke: #2f2f2f;
+ @media (min-width: 768px) {
+ width: 28px;
+ height: 28px;
+ }
+}
+
+.settingModalButton {
+ border: none;
+ background-color: transparent;
+ cursor: pointer;
+ @media (max-width: 767px) {
+ position: absolute;
+ top: -20px;
+ right: 0;
+ }
+}
+
+.settingModalButton .settingModalIcon:hover {
+ stroke: var(--accent);
+}
+
+.settingModalScrollable {
+ flex: 1;
+ overflow-y: auto;
+ margin: 0 -15px;
+ padding: 0 7px;
+ scrollbar-width: thin;
+ scrollbar-color: #f0eff4 transparent;
+}
+
+.settingModalScrollable::-webkit-scrollbar {
+ width: 4px;
+}
+
+.settingModalScrollable::-webkit-scrollbar-thumb {
+ background-color: #f0eff4;
+ border-radius: 30px;
+}
+
+.settingModalScrollable::-webkit-scrollbar-track {
+ background-color: transparent;
+}
+
+.settingModalContent {
+ flex: 1;
+ overflow-y: auto;
+}
+
+.settingModalTitle {
+ font-family: "Poppins", sans-serif;
+ font-weight: 700;
+ font-size: 20px;
+ line-height: 1.2;
+ letter-spacing: -0.01em;
+ color: #323f47;
+ @media (min-width: 768px) {
+ font-size: 28px;
+ line-height: 1.14;
+ }
+}
diff --git a/src/modals/UsersSettingsForm/.gitkeep b/src/modals/UsersSettingsForm/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/modals/WaterForm/.gitkeep b/src/modals/WaterForm/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/modals/WaterModal/.gitkeep b/src/modals/WaterModal/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/modals/WaterModal/WaterModal.jsx b/src/modals/WaterModal/WaterModal.jsx
new file mode 100644
index 0000000..05c6a66
--- /dev/null
+++ b/src/modals/WaterModal/WaterModal.jsx
@@ -0,0 +1,44 @@
+import WaterForm from "../../components/WaterForm/WaterForm.jsx";
+import { editWaterData, postWaterData } from "../../redux/water/operations.js";
+import Modal from "../Modal/Modal.jsx";
+
+const WaterModal = ({ operationType, data, isOpen, onClose }) => {
+ const messages = {
+ add: {
+ title: "Add water",
+ paragraph: "Choose a value",
+ dispatchFunction: postWaterData,
+ },
+ edit: {
+ title: "Edit the entered amount of water",
+ paragraph: "Correct entered data",
+ dispatchFunction: editWaterData,
+ },
+ };
+
+ const initialValues =
+ operationType === "add"
+ ? { amountOfWater: 50, recordingTime: new Date() }
+ : {
+ amountOfWater: data?.amount || 0,
+ recordingTime: new Date(data?.date || new Date()),
+ _id: data?._id,
+ };
+
+ const { title, paragraph, dispatchFunction } = messages[operationType];
+
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+export default WaterModal;
diff --git a/src/modals/WaterModal/WaterModal.module.css b/src/modals/WaterModal/WaterModal.module.css
new file mode 100644
index 0000000..189ff91
--- /dev/null
+++ b/src/modals/WaterModal/WaterModal.module.css
@@ -0,0 +1 @@
+/*style*/
diff --git a/src/pages/HomePage/.gitkeep b/src/pages/HomePage/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/pages/HomePage/HomePage.jsx b/src/pages/HomePage/HomePage.jsx
new file mode 100644
index 0000000..43e63cb
--- /dev/null
+++ b/src/pages/HomePage/HomePage.jsx
@@ -0,0 +1,20 @@
+import AdvantagesSection from "../../components/AdvantagesSection/AdvantagesSection";
+import WelcomeSection from "../../components/WelcomeSection/WelcomeSection";
+import Section from "../../components/Section/Section";
+import Container from "../../components/Container/Container";
+import styles from "./HomePage.module.css";
+
+const HomePage = () => {
+ return (
+
+ );
+};
+
+export default HomePage;
diff --git a/src/pages/HomePage/HomePage.module.css b/src/pages/HomePage/HomePage.module.css
new file mode 100644
index 0000000..4c52690
--- /dev/null
+++ b/src/pages/HomePage/HomePage.module.css
@@ -0,0 +1,51 @@
+/* Initial Container Settings (Mobile First) */
+.wrap {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
+/* Section Styles */
+.welcomeSection {
+ color: var(--background-primary-dark);
+ padding: 24px 0px 16px 0px;
+ width: 100%;
+}
+
+.advantagesSection {
+ width: 100%;
+ text-align: center;
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ overflow: hidden;
+}
+
+/* BREAKPOINTS (Mobile First) */
+/* sm */
+@media (min-width: 375px) {
+ .container {
+ width: 375px;
+ }
+}
+
+/* md */
+@media (min-width: 768px) {
+ .welcomeSection {
+ padding: 32px 0px;
+ }
+}
+
+/* lg */
+@media (min-width: 1440px) {
+ .wrap {
+ flex-direction: row;
+ width: 1376px;
+ gap: 32px;
+ }
+
+ .welcomeSection {
+ padding: 32px 0px;
+ max-width: 672px;
+ }
+}
diff --git a/src/pages/SignInPage/.gitkeep b/src/pages/SignInPage/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/pages/SignInPage/SignInPage.jsx b/src/pages/SignInPage/SignInPage.jsx
new file mode 100644
index 0000000..203706c
--- /dev/null
+++ b/src/pages/SignInPage/SignInPage.jsx
@@ -0,0 +1,61 @@
+import Logo from "../../components/Logo/Logo";
+import SignInForm from "../../components/SignInForm/SignInForm";
+import Section from "../../components/Section/Section";
+import Container from "../../components/Container/Container";
+import { NavLink } from "react-router-dom";
+import css from "./SignInPage.module.css";
+import { useMediaQuery } from "react-responsive";
+import AdvantagesSection from "../../components/AdvantagesSection/AdvantagesSection";
+import {
+ selectAuthError,
+ selectAuthIsLoggedIn,
+} from "../../redux/auth/selectors";
+import { useSelector } from "react-redux";
+import iziToast from "izitoast";
+import "izitoast/dist/css/iziToast.min.css";
+
+const SignInPage = () => {
+ const isDesktop = useMediaQuery({ minWidth: 1440 });
+ const error = useSelector(selectAuthError);
+ const successLoggedIn = useSelector(selectAuthIsLoggedIn);
+
+ return (
+
+
+
+
+
+
+
+
+ Don't have an account?{" "}
+
+ Sign Up
+ {" "}
+
+
+
+ {isDesktop && }
+ {error &&
+ iziToast.error({
+ title: "Error",
+ message: error,
+ titleColor: "#ef5050",
+ messageColor: "#ef5050",
+ displayMode: 1,
+ position: "topRight",
+ maxWidth: "400px",
+ })}
+ {successLoggedIn &&
+ iziToast.success({
+ title: "Success",
+ message: "Successfully logged user",
+ displayMode: 1,
+ position: "topRight",
+ maxWidth: "400px",
+ })}
+
+ );
+};
+
+export default SignInPage;
diff --git a/src/pages/SignInPage/SignInPage.module.css b/src/pages/SignInPage/SignInPage.module.css
new file mode 100644
index 0000000..09dc266
--- /dev/null
+++ b/src/pages/SignInPage/SignInPage.module.css
@@ -0,0 +1,77 @@
+/*style*/
+.title {
+ font-size: 18px;
+ line-height: 111%;
+ letter-spacing: -0.01em;
+ text-transform: uppercase;
+ margin-bottom: 172px;
+}
+
+.signin {
+ padding-top: 24px;
+ padding-bottom: 216px;
+}
+
+.descContainer {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.desc {
+ font-size: 14px;
+ line-height: 129%;
+ font-weight: 400;
+ letter-spacing: -0.01em;
+ text-align: center;
+ color: rgba(47, 47, 47, 0.5);
+}
+
+.signup {
+ font-weight: 700;
+ text-decoration: underline;
+ text-decoration-skip-ink: none;
+ color: #2f2f2f;
+}
+
+@media only screen and (min-width: 768px) {
+ .signInContainer {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ }
+
+ .signin {
+ padding-top: 32px;
+ padding-bottom: 281px;
+ }
+
+ .title {
+ font-size: 24px;
+ line-height: 100%;
+ margin-bottom: 225px;
+ }
+
+ .desc {
+ font-size: 16px;
+ line-height: 150%;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .signin {
+ min-width: 672px;
+ padding-bottom: 169px;
+ }
+
+ .title {
+ margin-bottom: 113px;
+ }
+
+ .advContainer {
+ max-width: 672px;
+ margin-left: 0;
+ margin-right: auto;
+ }
+}
diff --git a/src/pages/SignUpPage/.gitkeep b/src/pages/SignUpPage/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/pages/SignUpPage/SignUpPage.jsx b/src/pages/SignUpPage/SignUpPage.jsx
new file mode 100644
index 0000000..7ae1dc4
--- /dev/null
+++ b/src/pages/SignUpPage/SignUpPage.jsx
@@ -0,0 +1,65 @@
+import Section from "../../components/Section/Section";
+import Container from "../../components/Container/Container";
+import Logo from "../../components/Logo/Logo";
+import SignUpForm from "../../components/SignUpForm/SignUpForm";
+import AdvantagesSection from "../../components/AdvantagesSection/AdvantagesSection";
+import { NavLink } from "react-router-dom";
+import css from "./SignUpPage.module.css";
+import { useMediaQuery } from "react-responsive";
+import iziToast from "izitoast";
+import "izitoast/dist/css/iziToast.min.css";
+import { useSelector } from "react-redux";
+import {
+ selectAuthError,
+ // selectAuthIsLoading,
+ selectAuthIsRegisteredSuccess,
+} from "../../redux/auth/selectors";
+// import Loader from "../../components/Loader/Loader";
+
+const SignUpPage = () => {
+ const isDesktop = useMediaQuery({ minWidth: 1440 });
+ const error = useSelector(selectAuthError);
+ const isRegistered = useSelector(selectAuthIsRegisteredSuccess);
+ // const isLoading = useSelector(selectAuthIsLoading);
+ // console.log("register Page state error: ", error);
+ // console.log("register Page state isRegistered: ", isRegistered);
+ // console.log("register Page state isLoading: ", isLoading);
+
+ return (
+
+
+ {/* {isLoading && } */}
+
+ Sign Up
+
+
+ Already have account?{" "}
+
+ Sign In
+
+
+
+ {isDesktop && }
+ {error &&
+ iziToast.error({
+ title: "Error",
+ message: error,
+ titleColor: "#ef5050",
+ messageColor: "#ef5050",
+ displayMode: 1,
+ position: "topRight",
+ maxWidth: "300px",
+ })}
+ {isRegistered &&
+ iziToast.success({
+ title: "Success",
+ message: "Successfully register user",
+ displayMode: 1,
+ position: "topRight",
+ maxWidth: "300px",
+ })}
+
+ );
+};
+
+export default SignUpPage;
diff --git a/src/pages/SignUpPage/SignUpPage.module.css b/src/pages/SignUpPage/SignUpPage.module.css
new file mode 100644
index 0000000..f95dad4
--- /dev/null
+++ b/src/pages/SignUpPage/SignUpPage.module.css
@@ -0,0 +1,64 @@
+.signUpWrapper {
+ padding-top: 24px;
+ padding-bottom: 170px;
+}
+.logo {
+ margin-bottom: 126px;
+}
+
+.title {
+ margin-bottom: 32px;
+ font-weight: 700;
+ font-size: 32px;
+ line-height: 1;
+ letter-spacing: -0.01em;
+ color: #323f47;
+}
+.text {
+ margin-top: 16px;
+ text-align: center;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 1.28571;
+ letter-spacing: -0.01em;
+ color: rgba(47, 47, 47, 0.5);
+}
+.link {
+ font-weight: 700;
+ text-decoration: underline;
+ text-decoration-skip-ink: none;
+ color: #2f2f2f;
+}
+@media only screen and (min-width: 768px) {
+ .signUpWrapper {
+ padding-top: 32px;
+ padding-bottom: 227px;
+ }
+ .logo {
+ margin-bottom: 171px;
+ }
+
+ .title {
+ padding-left: 102px;
+ font-size: 36px;
+ line-height: 1.05556;
+ }
+ .text {
+ font-size: 16px;
+ line-height: 1.5;
+ letter-spacing: -0.01em;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .signUpWrapper {
+ padding-bottom: 100px;
+ min-width: 672px;
+ }
+ .logo {
+ margin-bottom: 68px;
+ }
+ .title {
+ padding-left: 86px;
+ }
+}
diff --git a/src/pages/TrackerPage/.gitkeep b/src/pages/TrackerPage/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/pages/TrackerPage/TrackerPage.jsx b/src/pages/TrackerPage/TrackerPage.jsx
new file mode 100644
index 0000000..488df2f
--- /dev/null
+++ b/src/pages/TrackerPage/TrackerPage.jsx
@@ -0,0 +1,16 @@
+import WaterMainInfo from "../../components/WaterMainInfo/WaterMainInfo.jsx";
+import WaterDetailedInfo from "../../components/WaterDetailedInfo/WaterDetailedInfo";
+import css from "./TrackerPage.module.css";
+
+const TrackerPage = () => {
+ return (
+ <>
+
+ >
+ );
+};
+
+export default TrackerPage;
diff --git a/src/pages/TrackerPage/TrackerPage.module.css b/src/pages/TrackerPage/TrackerPage.module.css
new file mode 100644
index 0000000..f745e1a
--- /dev/null
+++ b/src/pages/TrackerPage/TrackerPage.module.css
@@ -0,0 +1,25 @@
+.container {
+ padding: 16px;
+ margin-left: auto;
+ margin-right: auto;
+ display: flex;
+ gap: 16px;
+ flex-direction: column;
+ max-width: 375px;
+}
+
+@media only screen and (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ padding: 32px;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .container {
+ flex-direction: row;
+ flex-wrap: nowrap;
+ gap: 32px;
+ max-width: 1440px;
+ }
+}
\ No newline at end of file
diff --git a/src/redux/auth/operations.js b/src/redux/auth/operations.js
new file mode 100644
index 0000000..870a1a5
--- /dev/null
+++ b/src/redux/auth/operations.js
@@ -0,0 +1,93 @@
+import { createAsyncThunk } from "@reduxjs/toolkit";
+import axios from "axios";
+
+export const instance = axios.create({
+ baseURL: "https://back-inter-mafia.onrender.com/api/",
+});
+
+const setAuthHeaders = (token) => {
+ instance.defaults.headers.common.Authorization = `Bearer ${token}`;
+};
+
+const clearAuthHeader = () => {
+ instance.defaults.headers.common.Authorization = null;
+};
+
+export const apiLogin = createAsyncThunk(
+ "users/login",
+ async (formData, thunkApi) => {
+ try {
+ const { data } = await instance.post("users/login", formData);
+ setAuthHeaders(data.data.accessToken);
+ // console.log(data);
+ return data.data;
+ } catch (error) {
+ return thunkApi.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const apiRegister = createAsyncThunk(
+ "users/register",
+ async (formData, thunkApi) => {
+ try {
+ const { data } = await instance.post("users/register", formData);
+ // setAuthHeaders(data.token);
+ // console.log("data:", data);
+ return data;
+ } catch (error) {
+ // console.error("Error during registration:", error);
+ return thunkApi.rejectWithValue(error.response.data.data.message);
+ }
+ }
+);
+
+// export const apiRefresh = createAsyncThunk(
+// "users/refresh",
+// async (_, thunkApi) => {
+// try {
+// const { data } = await instance.post("users/refresh");
+// // const state = thunkApi.getState();
+// // const token = state.auth.token;
+// setAuthHeaders(data);
+// return data;
+// } catch (error) {
+// return thunkApi.rejectWithValue(error.message);
+// }
+// },
+// {
+// condition: (_, thunkApi) => {
+// const state = thunkApi.getState();
+// const token = state.auth.token;
+
+// if (token) return true;
+
+// return false;
+// },
+// }
+// );
+
+export const apiLogout = createAsyncThunk(
+ "users/logout",
+ async (_, thunkApi) => {
+ try {
+ await instance.post("users/logout");
+ clearAuthHeader();
+ return;
+ } catch (error) {
+ return thunkApi.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const getAllUsers = createAsyncThunk(
+ "users/getAllUsers",
+ async (_, thunkApi) => {
+ try {
+ const response = await instance.get("users/count-user");
+ return response.data.data;
+ } catch (error) {
+ return thunkApi.rejectWithValue(error.message);
+ }
+ }
+);
diff --git a/src/redux/auth/selectors.js b/src/redux/auth/selectors.js
new file mode 100644
index 0000000..44d221c
--- /dev/null
+++ b/src/redux/auth/selectors.js
@@ -0,0 +1,10 @@
+//селектори
+export const selectAuthUser = (state) => state.auth.user;
+export const selectAuthToken = (state) => state.auth.token;
+export const selectAuthIsLoggedIn = (state) => state.auth.isLoggedIn;
+// export const selectAuthIsRefreshing = (state) => state.auth.isRefreshing;
+export const selectAuthError = (state) => state.auth.error;
+export const selectAuthIsRegisteredSuccess = (state) =>
+ state.auth.isRegisteredSuccess;
+export const selectAuthIsLoading = (state) => state.auth.isLoading;
+export const selectAllUsers = (state) => state.auth.count;
diff --git a/src/redux/auth/slice.js b/src/redux/auth/slice.js
new file mode 100644
index 0000000..4d1e346
--- /dev/null
+++ b/src/redux/auth/slice.js
@@ -0,0 +1,100 @@
+import { createSlice } from "@reduxjs/toolkit";
+import { apiLogin, apiLogout, apiRegister, getAllUsers } from "./operations";
+
+const INITIAL_STATE = {
+ user: {
+ name: "",
+ email: "",
+ },
+ token: null,
+ isRegisteredSuccess: false,
+ isLoggedIn: false,
+ // isRefreshing: false,
+ error: null,
+ isLoading: false,
+ count: 0,
+};
+
+const authSlice = createSlice({
+ name: "auth",
+ initialState: INITIAL_STATE,
+ reducers: {},
+ extraReducers: (builder) => {
+ builder
+ .addCase(apiRegister.pending, (state) => {
+ // console.log("apiRegister pending...");
+ state.error = null;
+ state.isRegisteredSuccess = false;
+ state.isLoading = true;
+ // state.isRefreshing = true;
+ })
+ .addCase(apiRegister.fulfilled, (state, action) => {
+ // console.log("apiRegister fulfilled:", action.payload);
+ state.user = action.payload.user;
+ state.isRegisteredSuccess = true;
+ state.isLoading = false;
+ // state.isRefreshing = false;
+ })
+ .addCase(apiRegister.rejected, (state, action) => {
+ // console.error("apiRegister rejected :", action);
+ state.error = action.payload;
+ state.isRegisteredSuccess = false;
+ state.isLoading = false;
+ // state.isRefreshing = false;
+ })
+
+ .addCase(apiLogin.pending, (state) => {
+ state.error = null;
+ state.isLoading = true;
+ // state.isRefreshing = true;
+ })
+ .addCase(apiLogin.fulfilled, (state, action) => {
+ state.isLoggedIn = true;
+ state.token = action.payload.accessToken;
+ // state.isRefreshing = false;
+ state.isLoading = false;
+ })
+ .addCase(apiLogin.rejected, (state, action) => {
+ state.error = action.payload;
+ // state.isRefreshing = false;
+ state.isLoading = false;
+ })
+
+ .addCase(apiLogout.pending, (state) => {
+ state.error = null;
+ })
+ .addCase(apiLogout.fulfilled, () => {
+ return INITIAL_STATE;
+ })
+ .addCase(apiLogout.rejected, (state, action) => {
+ state.error = action.payload;
+ })
+
+ .addCase(getAllUsers.pending, (state) => {
+ state.error = null;
+ })
+ .addCase(getAllUsers.fulfilled, (state, action) => {
+ state.count = action.payload;
+ })
+ .addCase(getAllUsers.rejected, (state, action) => {
+ state.error = action.payload;
+ });
+
+ // .addCase(apiRefresh.pending, (state) => {
+ // state.error = null;
+ // state.isRefreshing = true;
+ // })
+ // .addCase(apiRefresh.fulfilled, (state, action) => {
+ // state.isLoggedIn = true;
+ // state.token = action.payload.token;
+ // state.isRefreshing = false;
+ // })
+ // .addCase(apiRefresh.rejected, (state, action) => {
+ // state.error = action.payload;
+ // state.isRefreshing = false;
+ // state.token = null;
+ // });
+ },
+});
+
+export const authReducer = authSlice.reducer;
diff --git a/src/redux/settings/operations.js b/src/redux/settings/operations.js
new file mode 100644
index 0000000..ee2b615
--- /dev/null
+++ b/src/redux/settings/operations.js
@@ -0,0 +1,40 @@
+import axios from "axios";
+import { createAsyncThunk } from "@reduxjs/toolkit";
+import { selectAuthToken } from "../auth/selectors.js";
+
+// axios.defaults.baseURL = "https://back-inter-mafia.onrender.com/";
+
+export const instance = axios.create({
+ baseURL: "https://back-inter-mafia.onrender.com/api/users",
+});
+const setAuthHeaders = (token) => {
+ instance.defaults.headers.common.Authorization = `Bearer ${token}`;
+};
+
+export const editUser = createAsyncThunk(
+ "users/edit",
+ async (formData, thunkAPI) => {
+ try {
+ const { data } = await instance.patch("/", formData);
+
+ return data.data;
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const getUserInfo = createAsyncThunk(
+ "users/getUserInfo",
+ async (_, thunkApi) => {
+ try {
+ const token = selectAuthToken(thunkApi.getState());
+ // console.log(token);
+ setAuthHeaders(token);
+ const { data } = await instance.get("/");
+ return data;
+ } catch (error) {
+ return thunkApi.rejectWithValue(error.message);
+ }
+ }
+);
diff --git a/src/redux/settings/selectors.js b/src/redux/settings/selectors.js
new file mode 100644
index 0000000..afc2007
--- /dev/null
+++ b/src/redux/settings/selectors.js
@@ -0,0 +1,8 @@
+export const selectDaysNotAsInWeek = (state) => state.settings.DaysNotAsInWeek; // Чи виставляти дні без врахування, як вони в тижні
+export const selectUser = (state) => state.settings.user;
+export const selectAvatarUrl = (state) => state.settings.user.avatarURL;
+export const selectName = (state) => state.settings.user.name;
+export const selectEmail = (state) => state.settings.user.email;
+export const selectDailyNorm = (state) => state.settings.user.dailyNorm;
+export const selectWeight = (state) => state.settings.user.weight;
+export const selectActiveTime = (state) => state.settings.user.activeTime;
diff --git a/src/redux/settings/slice.js b/src/redux/settings/slice.js
new file mode 100644
index 0000000..f71e327
--- /dev/null
+++ b/src/redux/settings/slice.js
@@ -0,0 +1,52 @@
+import { createSlice } from "@reduxjs/toolkit";
+import { getUserInfo, editUser } from "./operations.js";
+
+const INITIAL_STATE = {
+ user: {
+ name: "",
+ email: "",
+ weight: 0,
+ activeTime: 0,
+ gender: "woman",
+ dailyNorm: 1500,
+ avatarUrl: "",
+ },
+ error: null,
+ accessToken: null,
+ DaysNotAsInWeek: false,
+};
+
+const settingsSlice = createSlice({
+ name: "settings",
+ initialState: INITIAL_STATE,
+ reducers: {
+ setDaysNotAsInWeek(state, action) {
+ state.DaysNotAsInWeek = action.payload;
+ },
+ },
+ extraReducers: (builder) => {
+ builder
+ .addCase(editUser.pending, (state) => {
+ state.error = null;
+ })
+ .addCase(editUser.fulfilled, (state, { payload }) => {
+ state.user = payload;
+ })
+ .addCase(editUser.rejected, (state, { payload }) => {
+ state.error = payload;
+ })
+
+ .addCase(getUserInfo.pending, (state) => {
+ state.error = null;
+ })
+ .addCase(getUserInfo.fulfilled, (state, { payload }) => {
+ state.user = payload.data;
+ })
+ .addCase(getUserInfo.rejected, (state, { payload }) => {
+ state.error = payload;
+ });
+ },
+});
+
+export const settingsReducer = settingsSlice.reducer;
+export const { setDaysNotAsInWeek } = settingsSlice.actions;
diff --git a/src/redux/store.js b/src/redux/store.js
new file mode 100644
index 0000000..bacf46f
--- /dev/null
+++ b/src/redux/store.js
@@ -0,0 +1,49 @@
+import { configureStore } from "@reduxjs/toolkit";
+import {
+ persistStore,
+ persistReducer,
+ FLUSH,
+ REHYDRATE,
+ PAUSE,
+ PERSIST,
+ PURGE,
+ REGISTER,
+} from "redux-persist";
+import storage from "redux-persist/lib/storage";
+import { authReducer } from "./auth/slice";
+import { settingsReducer } from "./settings/slice";
+import { waterReducer } from "./water/slice";
+
+const authConfig = {
+ key: "auth",
+ storage,
+ whitelist: ["token"],
+};
+
+const settingsConfig = {
+ key: "settings",
+ storage,
+ whitelist: ["settings"],
+};
+
+const persistConfig = {
+ key: "water",
+ storage,
+ whitelist: ["water"],
+};
+
+export const store = configureStore({
+ reducer: {
+ water: persistReducer(persistConfig, waterReducer),
+ settings: persistReducer(settingsConfig, settingsReducer),
+ auth: persistReducer(authConfig, authReducer),
+ },
+ middleware: (getDefaultMiddleware) =>
+ getDefaultMiddleware({
+ serializableCheck: {
+ ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
+ },
+ }),
+});
+
+export const persistor = persistStore(store);
diff --git a/src/redux/water/operations.js b/src/redux/water/operations.js
new file mode 100644
index 0000000..43abee3
--- /dev/null
+++ b/src/redux/water/operations.js
@@ -0,0 +1,136 @@
+import axios from "axios";
+import { createAsyncThunk } from "@reduxjs/toolkit";
+import { instance } from "../auth/operations.js";
+
+export const fetchWaterData = createAsyncThunk(
+ "water/fetchWaterData",
+ async ({ type, date }, thunkAPI) => {
+ try {
+ const token = selectAuthToken(thunkAPI.getState());
+ setAuthHeaders(token);
+ const endpoint = type === "month" ? "/month" : "/water-per-day";
+ // console.log(endpoint);
+
+ const response = await instance.get(endpoint, {
+ params: { date },
+ });
+ // console.dir(response.data);
+ return response.data;
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.response.data);
+ }
+ }
+);
+
+export const getWaterAmountPerDay = createAsyncThunk(
+ "water/waterAmount",
+ async (_, thunkApi) => {
+ try {
+ const { data } = await instance.get("/water");
+ // console.log(data);
+ return data.amount;
+ } catch (error) {
+ return thunkApi.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const apiDeleteWater = createAsyncThunk(
+ "water/apiDeleteWater",
+ async (waterId, thunkApi) => {
+ try {
+ const { data } = await instance.delete(`/water/${waterId}`);
+ return data;
+ } catch (error) {
+ return thunkApi.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const postWaterData = createAsyncThunk(
+ "water/postWaterData",
+ async (entries, { rejectWithValue }) => {
+ try {
+ const response = await instance.post("/", entries);
+ console.log(response.data);
+ return response.data;
+ } catch (e) {
+ return rejectWithValue(e.response?.status || "Post water error");
+ }
+ }
+);
+
+export const editWaterData = createAsyncThunk(
+ "water/editWaterData",
+ async ({ waterId, entries }, { rejectWithValue }) => {
+ try {
+ const response = await instance.patch(`/${waterId}`, entries);
+ return response.data;
+ } catch (e) {
+ return rejectWithValue(e.response?.status || "Edit water error");
+ }
+ }
+);
+
+export const fetchWaterItems = createAsyncThunk(
+ "water/fetchAll",
+ async (_, thunkAPI) => {
+ try {
+ const response = await instance.get("/");
+ console.log("fetch" + response.data);
+ return response.data;
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const addWaterItem = createAsyncThunk(
+ "water/addWaterItem",
+ async (body, thunkAPI) => {
+ try {
+ const { data } = await axios.post("/", body);
+ return data;
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const deleteWaterItem = createAsyncThunk(
+ "water/deleteWaterItem",
+ async (_id, thunkAPI) => {
+ try {
+ await instance.delete(`/${_id}`);
+ return _id;
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.message);
+ }
+ }
+);
+
+// export const editWaterItem = createAsyncThunk(
+// "water/editWaterItem",
+// async (body, thunkAPI) => {
+// try {
+// const { data } = await axios.patch(`/${_id}`, { ...body });
+// return data;
+// } catch (error) {
+// return thunkAPI.rejectWithValue(error.message);
+// }
+// }
+// );
+
+export const getWaterPerDay = createAsyncThunk(
+ "water/getWaterPerDay",
+ async (date, thunkAPI) => {
+ try {
+ const token = selectAuthToken(thunkAPI.getState());
+ setAuthHeaders(token);
+ const { data } = await instance.get(`/water-per-day?date=${date}`);
+ return data.data;
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.message);
+ }
+ }
+);
diff --git a/src/redux/water/selectors.js b/src/redux/water/selectors.js
new file mode 100644
index 0000000..bdc562e
--- /dev/null
+++ b/src/redux/water/selectors.js
@@ -0,0 +1,16 @@
+export const selectDaysDrinking = (state) => state.water.daysDrinking;
+export const selectChosenMonth = (state) => state.water.chosenMonth;
+export const selectChosenDate = (state) => state.water.chosenDate; //Обрана дата
+export const selectIsLoading = (state) => state.water.loading;
+export const selectError = (state) => state.water.error;
+export const selectWaterItems = (state) => state.water.items;
+export const selectDayDetails = (state) => state.water.dayDetails;
+
+export const selectWaterAmountPerDay = (state) => state.water.waterAmountPerDay;
+
+// {
+// const today = new Date().toLocaleDateString("en-CA");
+// return state.water.waterAmount
+// .filter((item) => item.date.split("T")[0] === today)
+// .reduce((sum, item) => sum + item.amount, 0);
+// };
diff --git a/src/redux/water/slice.js b/src/redux/water/slice.js
new file mode 100644
index 0000000..f8d5334
--- /dev/null
+++ b/src/redux/water/slice.js
@@ -0,0 +1,211 @@
+import { createSlice } from "@reduxjs/toolkit";
+import {
+ addWaterItem,
+ deleteWaterItem,
+ editWaterData,
+ fetchWaterData,
+ fetchWaterItems,
+ getWaterPerDay,
+ postWaterData,
+} from "./operations";
+
+const today = new Date().toLocaleDateString("en-CA"); // дата локальна, (YYYY-MM-DD)
+
+const INITIAL_STATE = {
+ items: [],
+ daysDrinking: [], // Дані про дні пиття води за місяць
+ dayDetails: [], // Деталі пиття води за конкретний день
+ chosenDate: today,
+ chosenMonth: today.slice(0, 7), // Обраний місяць (YYYY-MM)
+ loading: false, // Стан завантаження
+ error: null, // Помилки
+ itemsPerDay: [],
+ waterAmountPerDay: [],
+};
+
+const waterSlice = createSlice({
+ name: "water",
+ initialState: INITIAL_STATE,
+ reducers: {
+ setChosenMonth(state, action) {
+ state.chosenMonth = action.payload;
+ },
+ setChosenDate(state, action) {
+ state.chosenDate = action.payload;
+ },
+ },
+ extraReducers: (builder) => {
+ builder
+ .addCase(fetchWaterData.pending, (state) => {
+ state.loading = true;
+ state.error = null;
+ })
+ .addCase(fetchWaterData.fulfilled, (state, action) => {
+ state.loading = false;
+ state.error = null;
+
+ // Розподіл даних за місяцем або днем
+ if (action.meta.arg.type === "month") {
+ state.daysDrinking = action.payload.data; // Дані за місяць
+ } else if (action.meta.arg.type === "day") {
+ state.dayDetails = action.payload.data; // Дані за день
+ }
+ // console.log(action.payload.data);
+ })
+ .addCase(fetchWaterData.rejected, (state, action) => {
+ state.loading = false;
+ state.error = action.payload;
+ //
+ state.daysDrinking = demoSeven; // ДЕМОтиждень)
+ })
+ .addCase(fetchWaterItems.pending, (state) => {
+ state.loading = true;
+ state.error = null;
+ })
+ .addCase(fetchWaterItems.fulfilled, (state, action) => {
+ (state.loading = false), (state.itemsPerDay = action.payload);
+ })
+ .addCase(fetchWaterItems.rejected, (state, action) => {
+ (state.loading = false), (state.error = action.payload);
+ })
+ .addCase(addWaterItem.pending, (state) => {
+ state.loading = true;
+ })
+ .addCase(addWaterItem.fulfilled, (state, action) => {
+ state.loading = false;
+ state.error = null;
+ state.waterAmountPerDay.push(action.payload);
+ })
+ .addCase(addWaterItem.rejected, (state, action) => {
+ state.loading = false;
+ state.error = action.payload;
+ })
+ .addCase(deleteWaterItem.pending, (state) => {
+ state.loading = true;
+ })
+ .addCase(deleteWaterItem.fulfilled, (state, action) => {
+ state.loading = false;
+ state.error = null;
+ state.waterAmountPerDay = state.waterAmountPerDay.filter(
+ (item) => item._id !== action.payload
+ );
+ })
+ .addCase(deleteWaterItem.rejected, (state, action) => {
+ state.loading = false;
+ state.error = action.payload;
+ })
+ .addCase(editWaterData.pending, (state) => {
+ state.loading = true;
+ })
+ .addCase(editWaterData.fulfilled, (state, action) => {
+ state.loading = false;
+ state.error = null;
+ const index = state.waterAmountPerDay.findIndex(
+ (item) => item._id === action.payload._id
+ );
+ if (index !== -1) {
+ state.waterAmountPerDay[index] = action.payload;
+ }
+ })
+ .addCase(editWaterData.rejected, (state, action) => {
+ state.loading = false;
+ state.error = action.payload;
+ })
+ .addCase(getWaterPerDay.pending, (state) => {
+ state.loading = true;
+ state.error = null;
+ })
+ .addCase(getWaterPerDay.rejected, (state, action) => {
+ state.loading = false;
+ state.error = action.payload;
+ })
+ .addCase(getWaterPerDay.fulfilled, (state, action) => {
+ state.waterAmountPerDay = action.payload;
+ })
+ .addCase(postWaterData.pending, (state) => {
+ state.loading = true;
+ })
+ .addCase(postWaterData.fulfilled, (state, action) => {
+ state.loading = false;
+ state.waterAmountPerDay.push(action.payload);
+ });
+ },
+});
+
+export const { setChosenMonth, setChosenDate } = waterSlice.actions;
+export const waterReducer = waterSlice.reducer;
+
+var demoSeven = [
+ {
+ _id: "674a21b8544e2b2330219995",
+ amount: 1200,
+ date: "2024-11-29T19:21:10",
+ currentDailyNorm: 1400,
+ createdAt: "2024-11-29T20:19:04.035Z",
+ updatedAt: "2024-11-29T20:19:04.035Z",
+ },
+ {
+ _id: "674b60a1968bb6340a901be4",
+ amount: 50,
+ date: "2024-11-30T18:59:21",
+ currentDailyNorm: 1500,
+ createdAt: "2024-11-30T18:59:45.554Z",
+ updatedAt: "2024-11-30T18:59:45.554Z",
+ },
+ {
+ _id: "674b60e2968bb6340a901bec",
+ amount: 50,
+ date: "2024-12-01T19:00:48",
+ currentDailyNorm: 1600,
+ createdAt: "2024-11-30T19:00:50.121Z",
+ updatedAt: "2024-11-30T19:00:50.121Z",
+ },
+ {
+ _id: "674c46eebea78d5e49a4d9e6",
+ amount: 1200,
+ date: "2024-12-02T14:45:12",
+ currentDailyNorm: 1500,
+ createdAt: "2024-12-01T11:22:22.874Z",
+ updatedAt: "2024-12-01T11:22:22.874Z",
+ },
+ {
+ _id: "674c4d4373eb70d6eecc779c",
+ amount: 50,
+ date: "2024-12-03T11:49:13",
+ currentDailyNorm: 1000,
+ createdAt: "2024-12-01T11:49:23.585Z",
+ updatedAt: "2024-12-01T11:49:23.585Z",
+ },
+ {
+ _id: "674c4d4773eb70d6eecc779e",
+ amount: 50,
+ date: "2024-12-04T11:49:13",
+ currentDailyNorm: 1200,
+ createdAt: "2024-12-01T11:49:27.593Z",
+ updatedAt: "2024-12-01T11:49:27.593Z",
+ },
+ {
+ _id: "674c4d9673eb70d6eecc77a0",
+ amount: 50,
+ date: "2024-12-05T11:49:13",
+ currentDailyNorm: 1500,
+ createdAt: "2024-12-01T11:50:46.892Z",
+ updatedAt: "2024-12-04T11:50:46.892Z",
+ },
+ {
+ _id: "774c4d9673eb70d6eecc77a0",
+ amount: 50,
+ date: "2024-12-05T11:49:14",
+ currentDailyNorm: 1200,
+ createdAt: "2024-12-01T11:50:46.892Z",
+ updatedAt: "2024-12-01T11:50:46.892Z",
+ },
+ {
+ _id: "874c4d9673eb70d6eecc77a0",
+ amount: 50,
+ date: "2024-12-05T11:49:16",
+ currentDailyNorm: 1000,
+ createdAt: "2024-12-01T11:50:46.892Z",
+ updatedAt: "2024-12-01T11:50:46.892Z",
+ },
+];
diff --git a/vercel.json b/vercel.json
new file mode 100644
index 0000000..3a48e56
--- /dev/null
+++ b/vercel.json
@@ -0,0 +1,3 @@
+{
+ "rewrites": [{ "source": "/(.*)", "destination": "/" }]
+}
diff --git a/vite.config.js b/vite.config.js
index 2328e17..1f378e7 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -1,7 +1,7 @@
-import { defineConfig } from 'vite'
-import react from '@vitejs/plugin-react-swc'
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react-swc";
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
-})
+});