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..1c16c5a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,8 +8,30 @@
"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",
+ "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 +43,31 @@
"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/@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 +563,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 +686,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 +1168,37 @@
"@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/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 +1208,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 +1228,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 +1289,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 +1319,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 +1382,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 +1485,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 +1527,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 +1612,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 +1681,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 +1706,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 +1803,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,41 +1879,207 @@
"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/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/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==",
+ "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": {
- "call-bind": "^1.0.6",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
+ "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/ljharb"
+ "url": "https://github.com/sponsors/fb55"
}
},
- "node_modules/data-view-byte-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
- "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "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": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
+ "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/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,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1434,6 +2102,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 +2129,30 @@
}
}
},
+ "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 +2187,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 +2220,77 @@
"node": ">=0.10.0"
}
},
+ "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,6 +2699,95 @@
"node": ">=0.10.0"
}
},
+ "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": {
+ "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": ">=0.10.0"
+ }
+ },
+ "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": {
+ "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": ">=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",
@@ -1941,6 +2818,18 @@
"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",
@@ -1976,6 +2865,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 +2894,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 +3040,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,7 +3101,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-bigints": {
+ "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",
"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
@@ -2192,6 +3182,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 +3266,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 +3313,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 +3360,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 +3380,18 @@
"node": ">= 0.4"
}
},
+ "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 +3451,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 +3484,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 +3526,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 +3620,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,6 +3644,36 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "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",
@@ -2583,6 +3802,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 +3823,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 +3857,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 +3904,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 +3940,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 +3962,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 +3991,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 +4020,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 +4114,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 +4170,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 +4183,157 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "node_modules/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==",
+ "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 +4359,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 +4430,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 +4527,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,8 +4563,28 @@
"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/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/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",
@@ -2980,6 +4623,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 +4713,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 +4741,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 +4765,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,69 +4803,348 @@
"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/reflect.getprototypeof": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
- "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
- "dev": true,
+ "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": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.1",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "globalthis": "^1.0.3",
- "which-builtin-type": "^1.1.3"
+ "react-is": "^18.2.0",
+ "styled-components": "^6.1.2"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">= 12"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.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",
- "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
- "dev": true,
+ "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": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
+ "react-fast-compare": "^3.0.1",
+ "warning": "^4.0.2"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "peerDependencies": {
+ "@popperjs/core": "^2.0.0",
+ "react": "^16.8.0 || ^17 || ^18",
+ "react-dom": "^16.8.0 || ^17 || ^18"
}
},
- "node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
+ "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": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
+ "prop-types": "^15.5.8"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "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/resolve-from": {
+ "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/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/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",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.1",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.3",
+ "which-builtin-type": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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",
+ "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "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",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
@@ -3103,6 +5153,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 +5224,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 +5287,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,6 +5325,33 @@
"node": ">= 0.4"
}
},
+ "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": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.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",
@@ -3245,147 +5373,849 @@
"node": ">=8"
}
},
- "node_modules/side-channel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
- "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/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",
+ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "regexp.prototype.flags": "^1.5.2",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "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"
+ },
+ "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": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
+ "@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": ">= 0.4"
+ "node": ">=14.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
}
},
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
+ "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": ">=0.10.0"
+ "node": ">= 4.7.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",
- "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
+ "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-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": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.7",
- "regexp.prototype.flags": "^1.5.2",
- "set-function-name": "^2.0.2",
- "side-channel": "^1.0.6"
+ "kind-of": "^3.0.2"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=0.10.0"
}
},
- "node_modules/string.prototype.repeat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
- "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "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": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/string.prototype.trim": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
- "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+ "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": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.0",
- "es-object-atoms": "^1.0.0"
+ "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 +6223,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 +6247,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 +6333,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 +6368,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 +6455,37 @@
"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/vite": {
"version": "5.4.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
@@ -3562,6 +6545,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 +6683,39 @@
"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": {
+ "@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",
@@ -3917,15 +6954,61 @@
"integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
"dev": true
},
- "@eslint/plugin-kit": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
- "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
- "dev": true,
+ "@eslint/plugin-kit": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
+ "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
+ "dev": true,
+ "requires": {
+ "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": {
- "levn": "^0.4.1"
+ "@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 +7045,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 +7293,32 @@
"@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/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 +7328,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 +7348,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 +7392,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 +7413,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 +7455,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,6 +7528,23 @@
"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",
@@ -4379,12 +7554,72 @@
"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": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"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 +7630,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 +7683,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 +7698,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 +7773,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 +7827,131 @@
"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=="
},
"data-view-buffer": {
"version": "1.0.1",
@@ -4495,6 +7986,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 +8000,23 @@
"ms": "^2.1.3"
}
},
+ "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 +8039,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 +8062,67 @@
"esutils": "^2.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,6 +8431,82 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
+ "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",
@@ -4876,6 +8534,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 +8569,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 +8583,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 +8678,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 +8718,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 +8769,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 +8838,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 +8904,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 +8921,15 @@
"side-channel": "^1.0.4"
}
},
+ "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 +8968,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 +8989,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 +9016,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 +9077,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 +9092,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 +9192,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 +9210,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 +9240,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 +9283,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 +9313,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 +9329,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 +9349,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 +9373,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 +9443,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 +9484,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 +9554,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 +9621,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 +9673,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 +9742,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 +9769,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 +9800,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 +9877,208 @@
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "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
+ },
+ "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": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
+ "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"
}
},
- "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-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": {
- "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==",
+ "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": {
- "loose-envify": "^1.1.0"
+ "react-router": "7.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==",
+ "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",
- "scheduler": "^0.23.2"
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
}
},
- "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
+ "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 +10095,37 @@
"which-builtin-type": "^1.1.3"
}
},
+ "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 +10138,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 +10172,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 +10224,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 +10264,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 +10295,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 +10344,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 +10605,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 +10673,321 @@
"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-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 +10997,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 +11055,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 +11081,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 +11154,30 @@
"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
+ },
"vite": {
"version": "5.4.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
@@ -5964,6 +11190,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 +11288,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..46d8166 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,30 @@
"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",
+ "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 +45,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..227fdc6
--- /dev/null
+++ b/public/icons/sprite.svg
@@ -0,0 +1,60 @@
+
\ 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..c733a04
--- /dev/null
+++ b/src/components/AdvantagesSection/AdvantagesSection.jsx
@@ -0,0 +1,55 @@
+import css from "./AdvantagesSection.module.css";
+
+import avatar1 from "./../../img/advantages/Avatar1.png";
+import avatar2 from "./../../img/advantages/Avatar2.png";
+import avatar3 from "./../../img/advantages/Avatar3.png";
+
+const AdvantagesSection = () => {
+ return (
+
+
+
+
+
+
+
+ Our 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..1d827fe
--- /dev/null
+++ b/src/components/AdvantagesSection/AdvantagesSection.module.css
@@ -0,0 +1,205 @@
+.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: 72px;
+ 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;
+}
+
+.customers_list {
+ position: relative;
+ display: flex;
+}
+.customers_item {
+ position: absolute;
+}
+
+.avatar {
+ border: 2px solid var(--background-primary-light);
+ border-radius: 50px;
+ width: 26px;
+ height: 28px;
+}
+.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;
+ color: var(--background-primary-dark);
+ width: 67px;
+}
+.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: 104px;
+ left: 32px;
+ top: 283px;
+ }
+
+ .customers_text {
+ font-size: 15px;
+ line-height: 1.49333;
+ width: 90px;
+ }
+
+ .avatar {
+ width: 43px;
+ height: 43px;
+ }
+ .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: 100%;
+ 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..2bac17a
--- /dev/null
+++ b/src/components/Calendar/Calendar.jsx
@@ -0,0 +1,110 @@
+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";
+
+const Calendar = () => {
+ const dispatch = useDispatch();
+ const dateToShow = useSelector(selectChosenMonth);
+ const daysDrinking = useSelector(selectDaysDrinking);
+ const daysNotAsInWeek = useSelector(selectDaysNotAsInWeek) ? true : false;
+ const isLoading = useSelector(selectIsLoading);
+
+ // const today = ;
+ const [today_day, today_month, today_year_time] = new Date() // month починаються з нуля в Date
+ .toLocaleString()
+ .split(".");
+ const today_year = today_year_time.slice(0, 4);
+ 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 (daysNotAsInWeek) 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, daysNotAsInWeek, month, year]);
+
+ // console.dir(calendarDays);
+
+ return (
+
+ {isLoading ? (
+
Creating your water-drinking calendar...
+ ) : (
+
+ {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..a1220d4
--- /dev/null
+++ b/src/components/Calendar/Calendar.module.css
@@ -0,0 +1,40 @@
+/* .calendar {} */
+
+.grid {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ gap: 20px 18px;
+ align-items: start;
+ justify-items: center;
+}
+
+@media only screen and (max-width: 374px) {
+ .grid {
+ row-gap: 20px;
+ column-gap: calc(0.33 * (100vw - 320px));
+ }
+}
+
+@media only screen and (min-width: 768px) {
+ .grid {
+ gap: 15px 62px;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .grid {
+ gap: 15px 57px;
+ }
+}
+
+@media only screen and (min-width: 1440px) {
+ .grid8 {
+ grid-template-columns: repeat(8, 1fr);
+ gap: 15px 48px;
+ }
+}
+@media only screen and (min-width: 1440px) {
+ .grid8 {
+ gap: 15px 43px;
+ }
+}
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..7cac1f2
--- /dev/null
+++ b/src/components/CalendarItem/CalendarItem.module.css
@@ -0,0 +1,67 @@
+.item {
+ display: flex;
+ flex-direction: column;
+ align-items: start;
+ width: 28px;
+ height: 44px;
+ border: none;
+ background-color: transparent;
+ cursor: pointer;
+}
+
+.item.empty {
+ background-color: transparent;
+ cursor: default;
+}
+
+.dayNumber {
+ display: inline-flex;
+ 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;
+}
+
+.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..5c4e62a
--- /dev/null
+++ b/src/components/ChooseDate/ChooseDate.jsx
@@ -0,0 +1,30 @@
+import css from "./ChooseDate.module.css";
+
+const ChooseDate = ({ date }) => {
+ // Функція для перевірки, чи є дата сьогоднішньою
+ const isToday = (date) => {
+ const today = new Date();
+ const inputDate = new Date(date);
+
+ // Порівнюємо лише рік, місяць і день
+ return (
+ today.getFullYear() === inputDate.getFullYear() &&
+ today.getMonth() === inputDate.getMonth() &&
+ today.getDate() === inputDate.getDate()
+ );
+ };
+
+ // Якщо дата сьогодні, відображаємо "Today", якщо ні — форматовану дату
+ const formattedDate = isToday(date)
+ ? "Today"
+ : (() => {
+ const dateObj = new Date(date);
+ const day = dateObj.getDate();
+ const month = dateObj.toLocaleString("en-GB", { 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..b344462
--- /dev/null
+++ b/src/components/Container/Container.module.css
@@ -0,0 +1,14 @@
+.container {
+ padding-left: 16px;
+ padding-right: 16px;
+
+ border-radius: 30px;
+ background-color: #f0eff4;
+}
+
+@media only screen and (min-width: 768px) {
+ .container {
+ padding-left: 32px;
+ padding-right: 32px;
+ }
+}
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..3907b6e
--- /dev/null
+++ b/src/components/DailyInfo/DailyInfo.jsx
@@ -0,0 +1,35 @@
+import { useMemo } from "react";
+import { selectChosenDate } from "../../redux/water/selectors.js";
+import { useSelector } from "react-redux";
+import ChooseDate from "../ChooseDate/ChooseDate.jsx";
+import AddWaterBtn from "../AddWaterBtn/AddWaterBtn.jsx";
+import WaterList from "../WaterList/WaterList.jsx";
+import css from "./DailyInfo.module.css";
+
+// Функція для отримання поточної дати у форматі 'YYYY-MM-DD'
+const today = () => {
+ const now = new Date();
+ const year = now.getFullYear();
+ const month = String(now.getMonth() + 1).padStart(2, "0"); // Місяці з 0
+ const day = String(now.getDate()).padStart(2, "0");
+
+ return `${year}-${month}-${day}`;
+};
+
+const DailyInfo = () => {
+ const date = useSelector(selectChosenDate);
+ const defaultDate = useMemo(() => today(), []); // Розрахунок один раз
+ const effectiveDate = date || defaultDate;
+
+ 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/Loader/Loader.jsx b/src/components/Loader/Loader.jsx
new file mode 100644
index 0000000..46439b3
--- /dev/null
+++ b/src/components/Loader/Loader.jsx
@@ -0,0 +1,18 @@
+import { ThreeDots } from "react-loader-spinner";
+
+const Loader = () => {
+ 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..63237d3
--- /dev/null
+++ b/src/components/MonthInfo/MonthInfo.jsx
@@ -0,0 +1,34 @@
+import { useState } from "react";
+import css from "./MonthInfo.module.css";
+import CalendarPagination from "../CalendarPagination/CalendarPagination.jsx";
+import Calendar from "../Calendar/Calendar.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..c889595
--- /dev/null
+++ b/src/components/MonthInfo/MonthInfo.module.css
@@ -0,0 +1,49 @@
+.sectionCalendar {
+ margin: 0 auto;
+ width: 100%;
+}
+
+.MonthInfo {
+ width: 100%;
+ margin-bottom: 24px;
+}
+
+.toRow {
+ display: flex;
+ justify-content: space-between;
+}
+
+.title {
+ color: #323f47;
+ font-weight: 700;
+ font-size: 20px;
+ font-family: "Poppins", sans-serif;
+ /* line-height: 1.2; */
+ letter-spacing: -0.01em;
+}
+
+.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/RestrictedRoute/RestrictedRoute.jsx b/src/components/RestrictedRoute/RestrictedRoute.jsx
new file mode 100644
index 0000000..294461c
--- /dev/null
+++ b/src/components/RestrictedRoute/RestrictedRoute.jsx
@@ -0,0 +1,10 @@
+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..0945ea8
--- /dev/null
+++ b/src/components/Section/Section.module.css
@@ -0,0 +1,22 @@
+.section {
+ padding: 16px;
+ margin: 0 auto;
+ max-width: 375px;
+ 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..e4fd527
--- /dev/null
+++ b/src/components/UserBar/UserBar.jsx
@@ -0,0 +1,114 @@
+import { useState, useRef, useEffect } from "react";
+import { usePopper } from "react-popper";
+import { HiChevronDown, HiChevronUp } from "react-icons/hi";
+import { AiOutlineSetting } from "react-icons/ai";
+import { IoLogOutOutline } from "react-icons/io5";
+// import UserBarPopover from "../../components/UserBarPopover/UserBarPopover.jsx";
+import css from "./UserBar.module.css";
+
+const UserBar = ({ userName, avatarUrl, onSettingsClick, onLogOutClick }) => {
+ const defaultUserName = userName || "Nadia";
+ const avatarPlaceholder = defaultUserName.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..b4b54b3
--- /dev/null
+++ b/src/components/UserBar/UserBar.module.css
@@ -0,0 +1,101 @@
+.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 {
+ line-height: 1.49;
+ }
+ .icon {
+ width: 20px;
+ height: 20px;
+ }
+}
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..ea47f53
--- /dev/null
+++ b/src/components/UserBarPopover/UserBarPopover.jsx
@@ -0,0 +1,37 @@
+import { forwardRef } from "react"
+import css from "./UserBarPopover.module.css"
+
+
+const UserBarPopover = forwardRef(
+ ({ styles, attributes, onSettingsClick, onLogOutClick, closePopover }, ref) => {
+ return (
+
+
+
+
+ );
+ }
+);
+UserBarPopover.displayName = "UserBarPopover"
+export default UserBarPopover;
diff --git a/src/components/UserBarPopover/UserBarPopover.module.css b/src/components/UserBarPopover/UserBarPopover.module.css
new file mode 100644
index 0000000..2d27854
--- /dev/null
+++ b/src/components/UserBarPopover/UserBarPopover.module.css
@@ -0,0 +1,33 @@
+/* .userbarpopover {
+ position: absolute;
+ background-color: white;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+ border-radius: 8px;
+ padding: 8px 0;
+ z-index: 1000;
+ width: auto;
+}
+
+.popoverbutton {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 12px 20px;
+ width: 100%;
+ text-align: left;
+ font-family: var(--font-family, Arial, sans-serif);
+ font-size: 14px;
+ font-weight: 600;
+ color: #323f47;
+ background: none;
+ border: none;
+ cursor: pointer;
+}
+
+.popoverbutton:hover {
+ background-color: #f5f7f9;
+}
+
+.popoverbutton:focus {
+ outline: 2px solid #0073e6;
+} */
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..daf8589
--- /dev/null
+++ b/src/components/UserPanel/UserPanel.jsx
@@ -0,0 +1,42 @@
+import { useState } from "react";
+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 = ({ userName, avatarUrl }) => {
+ const defaultUserName = userName || "Nadia";
+ const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);
+ const [isLogOutModalOpen, setIsLogOutModalOpen] = useState(false);
+
+ const handleOpenSettings = () => {
+ // console.log("Settings modal opened");
+ setIsSettingsModalOpen(true);
+ };
+ const handleOpenLogOut = () => {
+ // console.log("Log out modal opened");
+ 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..472fa70
--- /dev/null
+++ b/src/components/UserPanel/UserPanel.module.css
@@ -0,0 +1,39 @@
+.userpanel {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ /* justify-content: space-between; */
+}
+
+.greeting {
+ font-family: "Gilroy", sans-serif;
+ font-weight: 400;
+ font-size: 32px;
+ /* line-height: 106%;
+ letter-spacing: -0.01em; */
+}
+
+.name {
+ font-family: "Gilroy", sans-serif;
+ font-size: 32px;
+ /* line-height: 106%;
+ letter-spacing: -0.01em; */
+ 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..aef7803
--- /dev/null
+++ b/src/components/UsersSettingsForm/UsersSettingsForm.jsx
@@ -0,0 +1,249 @@
+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";
+
+const validationSettingSchema = Yup.object().shape({
+ avatarUrl: Yup.mixed(),
+ gender: Yup.string().oneOf(["woman", "man"]).required("Gender is required"),
+ name: Yup.string().required("Name is required"),
+ email: Yup.string().email("Invalid email").required("Email is required"),
+ weight: Yup.number()
+ .positive("Weight must be a positive number")
+ .nullable()
+ .required("Weight is required"),
+ activeTime: Yup.number()
+ .min(0, "Active time cannot be negative")
+ .required("Active time is required")
+ .nullable(),
+ dailyNorm: Yup.number()
+ .positive("Water norm must be a positive number")
+ .nullable()
+ .required("Water norm is required"),
+});
+
+const UsersSettingsForm = () => {
+ const [avatarPreview, setAvatarPreview] = useState(null);
+ const [calculateWaterNorm, setCalculateWaterNorm] = useState(null);
+
+ const {
+ register,
+ handleSubmit,
+ setValue,
+ watch,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(validationSettingSchema),
+ });
+
+ const weight = watch("weight");
+ const activeTime = watch("activeTime");
+ const gender = watch("gender");
+
+ useEffect(() => {
+ if (weight && activeTime && gender) {
+ let waterNorm = 0;
+ if (gender === "woman") {
+ waterNorm = Math.max(weight * 0.03 + activeTime * 0.4, 0);
+ } else if (gender === "man") {
+ waterNorm = Math.max(weight * 0.04 + activeTime * 0.6, 0);
+ }
+ setValue("waterDrink", waterNorm.toFixed(1));
+ setCalculateWaterNorm(waterNorm.toFixed(1));
+ }
+ }, [weight, activeTime, gender, setValue]);
+
+ const handleAvatarChange = (e) => {
+ const file = e.target.files[0];
+ if (file) {
+ setAvatarPreview(URL.createObjectURL(file));
+ setValue("avatarUrl", e.target.files);
+ }
+ };
+
+ 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..ab081e2
--- /dev/null
+++ b/src/components/UsersSettingsForm/UsersSettingsForm.module.css
@@ -0,0 +1,378 @@
+.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;
+}
+
+.settingAvatarIcon {
+ stroke: #2f2f2f;
+ fill: none;
+ stroke-width: 4px;
+ @media (min-width: 768px) {
+ width: 20px;
+ height: 20px;
+ }
+}
+
+.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);
+}
+
+.settingDailyForm {
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
+ justify-content: start;
+ align-items: start;
+ margin-bottom: 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;
+ }
+}
+
+.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;
+ @media (min-width: 768px) {
+ line-height: 1.5;
+ }
+}
+
+.settingFormButton:hover {
+ background-color: #87d28d;
+}
+
+.settingFormButton:focus {
+ background-color: #e6e6e6;
+}
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..c8d495f
--- /dev/null
+++ b/src/components/WaterDailyNorma/WaterDailyNorma.jsx
@@ -0,0 +1,22 @@
+import { useSelector } from "react-redux";
+import { selectDailyNorm } from "../../redux/settings/selectors.js";
+import css from "./WaterDailyNorma.module.css";
+
+export const formatVolume = (ml) => {
+ return `${(ml / 1000).toFixed(1)}`;
+};
+
+const WaterDailyNorma = () => {
+ const dailyNorma = useSelector(selectDailyNorm);
+
+ 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..1fd2f6a
--- /dev/null
+++ b/src/components/WaterDetailedInfo/WaterDetailedInfo.module.css
@@ -0,0 +1,22 @@
+.container {
+ 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..9ce867e
--- /dev/null
+++ b/src/components/WaterForm/WaterForm.jsx
@@ -0,0 +1,132 @@
+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 { postWaterData } from "../../redux/water/operations.js";
+
+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 }) => {
+ const [amount, setAmount] = useState(initialValues.amountOfWater);
+
+ const handleSubmit = (values) => {
+ const formattedTime = values.recordingTime.toISOString().split(".")[0];
+
+ const entries = {
+ amount: values.amountOfWater,
+ date: formattedTime,
+ };
+ postWaterData(entries);
+ console.log("Values:", entries);
+ };
+
+ 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..89a1853
--- /dev/null
+++ b/src/components/WaterItem/WaterItem.jsx
@@ -0,0 +1,60 @@
+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, createdAt }) => {
+ const [logOutModalisOpen, setLogOutModalisOpen] = useState(false);
+ const openLogOutModal = () => setLogOutModalisOpen(true);
+ const closeLogOutModal = () => setLogOutModalisOpen(false);
+ const dispatch = useDispatch();
+ return (
+
+
+
+
+
250 ml {amount}
+
7:00 AM {createdAt}
+
+
+
+
+
+
+
+ {/* icon
+
+
{amount} ml
+
{createdAt}
+
+
+
+
+
*/}
+
+ );
+};
+
+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..8487094
--- /dev/null
+++ b/src/components/WaterItem/WaterItem.module.css
@@ -0,0 +1,87 @@
+/*style*/
+.wrapper {
+ display: flex;
+ align-items: center;
+ 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){
+
+} */
+
+@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..61daf65
--- /dev/null
+++ b/src/components/WaterList/WaterList.jsx
@@ -0,0 +1,80 @@
+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 { useSelector } from "react-redux";
+import { selectWaterItems } from "../../redux/water/selectors";
+import { useEffect } from "react";
+import { fetchWaterItems } from "../../redux/water/operations";
+const WaterList = () => {
+ const items = useSelector(selectWaterItems);
+
+ const dispatch = useDispatch();
+ useEffect(() => {
+ dispatch(fetchWaterItems());
+
+ fetchWaterItems();
+ }, [dispatch]);
+ return (
+
+ console.log(swiper)}
+ onSlideChange={() => console.log("slide change")}
+ >
+ {items.map((item) => {
+ return (
+ -
+
+
+
+
+ );
+ })}
+
+ {/*
+
+
+
+
+
+
+
+
+
+
+ */}
+
+ {/*
+
+ */}
+ {/* {items.map((item) => {
+ return (
+ -
+
+
+ );
+ })} */}
+
+ );
+};
+
+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..92c1070
--- /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 { fetchWaterData } from "../../redux/water/operations.js";
+
+const WaterMainInfo = () => {
+ const dispatch = useDispatch();
+
+ useEffect(() => {
+ dispatch(getUserInfo());
+ }, [dispatch]);
+
+ useEffect(() => {
+ const today = new Date().toLocaleDateString("en-CA");
+ dispatch(fetchWaterData({ type: "day", date: 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..4043967
--- /dev/null
+++ b/src/components/WaterProgressBar/WaterProgressBar.jsx
@@ -0,0 +1,48 @@
+import { useSelector } from "react-redux";
+import { selectWaterAmountForToday } from "../../redux/water/selectors.js";
+import { selectDailyNorm } from "../../redux/settings/selectors.js";
+import css from "./WaterProgressBar.module.css";
+import { formatVolume } from "../WaterDailyNorma/WaterDailyNorma.jsx";
+
+const WaterProgressBar = () => {
+ const currentAmount = useSelector(selectWaterAmountForToday);
+ // console.log(currentAmount);
+ const dailyNorma = useSelector(selectDailyNorm);
+
+ const waterPercentage = formatVolume(
+ Math.round((currentAmount / dailyNorma) * 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..e8af7bc
--- /dev/null
+++ b/src/components/WelcomeSection/WelcomeSection.module.css
@@ -0,0 +1,139 @@
+/* Reset Default Styles */
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ line-height: 1;
+}
+
+/* Logo Component */
+.logo {
+ margin-bottom: 74px;
+}
+
+/* Headers Styles */
+.headersWrapper {
+ display: flex;
+ flex-direction: column-reverse;
+ text-align: left;
+}
+
+.subtitle {
+ font-family: 'Poppins', sans-serif;
+ font-weight: 400;
+ font-size: 14px;
+ 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);
+}
+
+/* Buttons Styles */
+.buttonsWrapper {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 10px;
+}
+
+.btn {
+ font-family: 'Poppins', sans-serif;
+ font-size: 14px;
+ font-weight: 700;
+ text-align: center;
+ border-radius: 30px;
+ display: inline-block;
+ text-decoration: none;
+ transition: background-color 0.3s ease;
+}
+
+.btnPrimary {
+ color: var(--text-primary-dark);
+ background-color: var(--accent);
+ padding: 14px 19px;
+}
+
+.btnSecondary {
+ color: var(--text-primary-dark);
+ border: 1px solid var(--text-primary-dark);
+ padding: 14px 28px;
+}
+
+.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;
+ }
+
+ .contentWrapper {
+ padding: 32px;
+ margin-bottom: 50px;
+ }
+
+ .subtitle {
+ font-size: 16px;
+ }
+
+ .title {
+ font-size: 64px;
+ line-height: 1em;
+ margin-bottom: 32px;
+ }
+
+ .btnPrimary {
+ padding: 18px 40px;
+ }
+
+ .btnSecondary {
+ padding: 18px 40px;
+ }
+}
+
+/* lg */
+@media (min-width: 1440px) {
+ .contentWrapper {
+ padding: 32px;
+ margin-bottom: 188px;
+ }
+
+ .logo {
+ font-size: 24px;
+ margin-bottom: 132px;
+ }
+
+ .title {
+ font-size: 80px;
+ }
+
+ .btnPrimary {
+ padding: 18px 40px;
+ }
+
+ .btnSecondary {
+ padding: 18px 40px;
+ }
+}
diff --git a/src/img/advantages/Avatar1.png b/src/img/advantages/Avatar1.png
new file mode 100644
index 0000000..49a5a4b
Binary files /dev/null and b/src/img/advantages/Avatar1.png differ
diff --git a/src/img/advantages/Avatar1@2x.png b/src/img/advantages/Avatar1@2x.png
new file mode 100644
index 0000000..39d634c
Binary files /dev/null and b/src/img/advantages/Avatar1@2x.png differ
diff --git a/src/img/advantages/Avatar2.png b/src/img/advantages/Avatar2.png
new file mode 100644
index 0000000..a800e06
Binary files /dev/null and b/src/img/advantages/Avatar2.png differ
diff --git a/src/img/advantages/Avatar2@2x.png b/src/img/advantages/Avatar2@2x.png
new file mode 100644
index 0000000..be14580
Binary files /dev/null and b/src/img/advantages/Avatar2@2x.png differ
diff --git a/src/img/advantages/Avatar3.png b/src/img/advantages/Avatar3.png
new file mode 100644
index 0000000..3ca405a
Binary files /dev/null and b/src/img/advantages/Avatar3.png differ
diff --git a/src/img/advantages/Avatar3@2x.png b/src/img/advantages/Avatar3@2x.png
new file mode 100644
index 0000000..46d4aef
Binary files /dev/null and b/src/img/advantages/Avatar3@2x.png 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/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/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/girlD.webp b/src/img/advantages/girlD.webp
new file mode 100644
index 0000000..14789e6
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..acbbae4
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..edc2f81
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..7ac7607
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..13f958b
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..6b684a0
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..1ccc356
--- /dev/null
+++ b/src/modals/DeleteWaterModal/DeleteWaterModal.jsx
@@ -0,0 +1,47 @@
+import css from "./DeleteWaterModal.module.css";
+import Modal from "../Modal/Modal";
+import { useDispatch } from "react-redux";
+import { apiDeleteWater } from "../../redux/water/operations";
+
+const DeleteWaterModal = ({ isOpen, onClose }) => {
+ const dispatch = useDispatch();
+
+ const handleDelete = () => {
+ // логика удаления воды
+ dispatch(apiDeleteWater());
+ // оповещение с помощью Toast
+ onClose();
+ // актуализировать с помощью 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..714520f
--- /dev/null
+++ b/src/modals/LogOutModal/LogOutModal.jsx
@@ -0,0 +1,56 @@
+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 toast from "react-hot-toast";
+
+const LogOutModal = ({ isOpen, onClose }) => {
+ const dispatch = useDispatch();
+
+ const navigateTo = useNavigate();
+ const handleRedirect = () => {
+ navigateTo("/"); // переадресация на главную страницу
+ };
+
+ const handleLogOut = () => {
+ dispatch(apiLogout());
+ onClose();
+ handleRedirect();
+ // вставить оповещение с помощью Toast, типа:
+ // toast.success('Successfully logged Out!')
+ };
+
+ 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..838f2e5
--- /dev/null
+++ b/src/modals/Modal/Modal.module.css
@@ -0,0 +1,58 @@
+.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;
+ transform: translateY(-50px);
+ transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
+}
+.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..0484b1c
--- /dev/null
+++ b/src/modals/WaterModal/WaterModal.jsx
@@ -0,0 +1,39 @@
+import WaterForm from "../../components/WaterForm/WaterForm.jsx";
+import Modal from "../Modal/Modal.jsx";
+
+const WaterModal = ({ operationType, data, isOpen, onClose }) => {
+ const messages = {
+ add: {
+ title: "Add water",
+ paragraph: "Choose a value",
+ },
+ edit: {
+ title: "Edit the entered amount of water",
+ paragraph: "Correct entered data",
+ },
+ };
+
+ const initialValues =
+ operationType === "add"
+ ? { amountOfWater: 50, recordingTime: new Date() }
+ : {
+ ...data,
+ recordingTime: new Date(`1970-01-01T${data.recordingTime}:00`),
+ };
+
+ const { title, paragraph } = 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..88d6bf9
--- /dev/null
+++ b/src/pages/HomePage/HomePage.module.css
@@ -0,0 +1,65 @@
+/* Initial Container Settings (Mobile First) */
+.wrap {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
+/* Section Styles */
+.welcomeSection {
+ border-radius: 30px;
+ border: solid 1px var(--background-secondary-light);
+}
+
+.welcomeSection {
+ background-color: var(--background-secondary-light);
+ border: solid 1px var(--background-secondary-light);
+ color: var(--background-primary-dark);
+ min-height: 411px;
+ padding: 24px 0px 16px 0px;
+ width: 100%;
+ height: 411px;
+}
+
+.advantagesSection {
+ background-color: var(--background-secondary-light);
+ border: solid 1px var(--background-secondary-light);
+ 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;
+ height: 812px;
+ }
+}
+
+/* md */
+@media (min-width: 768px) {
+ .welcomeSection {
+ height: 498px;
+ padding: 32px 0px;
+ }
+}
+
+/* lg */
+@media (min-width: 1440px) {
+ .wrap {
+ flex-direction: row;
+ width: 1376px;
+ gap: 32px;
+ }
+
+ .welcomeSection {
+ padding: 32px 0px;
+ height: 736px;
+ 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..4958bf2
--- /dev/null
+++ b/src/pages/SignUpPage/SignUpPage.jsx
@@ -0,0 +1,64 @@
+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";
+
+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 && LOADING .........
}
+
+ 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..19f0814
--- /dev/null
+++ b/src/redux/auth/operations.js
@@ -0,0 +1,81 @@
+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);
+ }
+ }
+);
diff --git a/src/redux/auth/selectors.js b/src/redux/auth/selectors.js
new file mode 100644
index 0000000..bb60e33
--- /dev/null
+++ b/src/redux/auth/selectors.js
@@ -0,0 +1,9 @@
+//селектори
+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;
diff --git a/src/redux/auth/slice.js b/src/redux/auth/slice.js
new file mode 100644
index 0000000..8a2b770
--- /dev/null
+++ b/src/redux/auth/slice.js
@@ -0,0 +1,80 @@
+import { createSlice } from "@reduxjs/toolkit";
+import { apiLogin, apiLogout, apiRegister } from "./operations";
+
+const INITIAL_STATE = {
+ user: {
+ name: "",
+ email: "",
+ },
+ token: null,
+ isRegisteredSuccess: false,
+ isLoggedIn: false,
+ isRefreshing: false,
+ error: null,
+ isLoading: false,
+};
+
+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;
+ })
+ .addCase(apiRegister.fulfilled, (state, action) => {
+ // console.log("apiRegister fulfilled:", action.payload);
+ state.user = action.payload.user;
+ state.isRegisteredSuccess = true;
+ state.isLoading = false;
+ })
+ .addCase(apiRegister.rejected, (state, action) => {
+ // console.error("apiRegister rejected :", action);
+ state.error = action.payload;
+ state.isRegisteredSuccess = false;
+ state.isLoading = false;
+ })
+
+ .addCase(apiLogin.pending, (state) => {
+ state.error = null;
+ })
+ .addCase(apiLogin.fulfilled, (state, action) => {
+ state.isLoggedIn = true;
+ state.token = action.payload.accessToken;
+ })
+ .addCase(apiLogin.rejected, (state, action) => {
+ state.error = action.payload;
+ })
+
+ .addCase(apiLogout.pending, (state) => {
+ state.error = null;
+ })
+ .addCase(apiLogout.fulfilled, () => {
+ return INITIAL_STATE;
+ })
+ .addCase(apiLogout.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..2380ba5
--- /dev/null
+++ b/src/redux/settings/operations.js
@@ -0,0 +1,51 @@
+import { createAsyncThunk } from "@reduxjs/toolkit";
+import { selectAuthToken } from "../auth/selectors.js";
+// import { instance } from "../auth/operations.js";
+
+// export const getUserInfo = createAsyncThunk(
+// "users/getUserInfo",
+// async (_, thunkApi) => {
+// try {
+// const token = selectAuthToken(thunkApi.getState());
+// console.log(token);
+// const { data } = await instance.get("/users");
+// // console.log("Data received from API:", data);
+// return data;
+// } catch (error) {
+// return thunkApi.rejectWithValue(error.message);
+// }
+// }
+// );
+
+import axios from "axios";
+// import { useSelector } from "react-redux";
+
+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 getUserInfo = createAsyncThunk(
+ "users/getUserInfo",
+ async (_, thunkApi) => {
+ try {
+ const token = selectAuthToken(thunkApi.getState());
+ console.log(token);
+ // const token = useSelector(selectAuthToken);
+ // console.log(token);
+ if (!token) {
+ throw new Error("No token found");
+ }
+ setAuthHeaders(token);
+ const { data } = await instance.get("/");
+
+ console.log("Data received from API:", data);
+ 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..368d26f
--- /dev/null
+++ b/src/redux/settings/selectors.js
@@ -0,0 +1,2 @@
+export const selectDaysNotAsInWeek = (state) => state.settings.DaysNotAsInWeek; // Чи виставляти дні без врахування, як вони в тижні
+export const selectDailyNorm = (state) => state.settings.user.dailyNorm;
diff --git a/src/redux/settings/slice.js b/src/redux/settings/slice.js
new file mode 100644
index 0000000..78ef5b8
--- /dev/null
+++ b/src/redux/settings/slice.js
@@ -0,0 +1,37 @@
+import { createSlice } from "@reduxjs/toolkit";
+import { getUserInfo } from "./operations.js";
+// import { } from "./operations";
+
+const INITIAL_STATE = {
+ DaysNotAsInWeek: false,
+ user: {},
+};
+
+const settingsSlice = createSlice({
+ name: "settings",
+ initialState: INITIAL_STATE,
+ reducers: {
+ setDaysNotAsInWeek(state, action) {
+ state.DaysNotAsInWeek = action.payload;
+ },
+ },
+ extraReducers: (builder) => {
+ builder
+ .addCase(getUserInfo.pending, (state) => {
+ state.loading = true;
+ state.error = null;
+ })
+ .addCase(getUserInfo.fulfilled, (state, { payload }) => {
+ state.loading = false;
+ // console.log("User info payload:", payload);
+ state.user = payload.data;
+ })
+ .addCase(getUserInfo.rejected, (state, { payload }) => {
+ state.loading = false;
+ 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..2feef52
--- /dev/null
+++ b/src/redux/water/operations.js
@@ -0,0 +1,102 @@
+import axios from "axios";
+import { createAsyncThunk } from "@reduxjs/toolkit";
+
+axios.defaults.baseURL = "https://back-inter-mafia.onrender.com/api/water";
+
+export const fetchWaterData = createAsyncThunk(
+ "water/fetchWaterData",
+ async ({ type, date }, thunkAPI) => {
+ try {
+ const endpoint = type === "month" ? "/month" : "/day";
+ // console.log(endpoint);
+
+ const response = await axios.get(endpoint, {
+ params: { date },
+ });
+
+ // console.dir(response.data);
+ return response.data;
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.response.data);
+ }
+ }
+);
+
+export const apiDeleteWater = createAsyncThunk(
+ "water/apiDeleteWater",
+ async (waterId, thunkApi) => {
+ try {
+ const { data } = await axios.delete(`/water/${waterId}`);
+ return data;
+ } catch (error) {
+ return thunkApi.rejectWithValue(error.message);
+ }
+ }
+);
+
+export const postWaterData = async (entries) => {
+ try {
+ const response = await axios.post("/", entries);
+ return response.data;
+ } catch (e) {
+ throw new Error(e.response?.status || "Post water error");
+ }
+};
+
+export const editWaterData = async (entries) => {
+ try {
+ const response = await axios.patch(`/`, entries);
+ return response.data;
+ } catch (e) {
+ throw new Error(e.response?.status || "Post water error");
+ }
+};
+
+export const fetchWaterItems = createAsyncThunk(
+ "water/fetchAll",
+ async (_, thunkAPI) => {
+ try {
+ const response = await axios.get("/");
+ console.log(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 axios.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);
+// }
+// }
+// );
diff --git a/src/redux/water/selectors.js b/src/redux/water/selectors.js
new file mode 100644
index 0000000..1487e3f
--- /dev/null
+++ b/src/redux/water/selectors.js
@@ -0,0 +1,20 @@
+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 selectWaterAmountForToday = (state) => {
+ const today = new Date().toLocaleDateString("en-CA");
+ const dayDetails = state.water.dayDetails;
+ const todayData = dayDetails.filter((detail) => {
+ const recordDate = new Date(detail.date).toLocaleDateString("en-CA");
+ return recordDate === today;
+ });
+ const totalWaterAmount = todayData.reduce(
+ (total, record) => total + record.amount,
+ 0
+ );
+ return totalWaterAmount;
+};
diff --git a/src/redux/water/slice.js b/src/redux/water/slice.js
new file mode 100644
index 0000000..8ac7bc8
--- /dev/null
+++ b/src/redux/water/slice.js
@@ -0,0 +1,105 @@
+import { createSlice } from "@reduxjs/toolkit";
+import {
+ addWaterItem,
+ deleteWaterItem,
+ fetchWaterData,
+ fetchWaterItems,
+} 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, // Помилки
+};
+
+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;
+ })
+ .addCase(fetchWaterItems.pending, (state) => {
+ state.loading = true;
+ state.error = null;
+ })
+ .addCase(fetchWaterItems.fulfilled, (state, action) => {
+ (state.loading = false), (state.items = 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.items.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.items = state.items.filter((item) => {
+ item._id !== action.payload._id;
+ });
+ })
+ .addCase(deleteWaterItem.rejected, (state, action) => {
+ state.loading = false;
+ state.error = action.payload;
+ // })
+ // .addCase(editWaterItem.pending, (state) => {
+ // state.loading = true;
+ // })
+ // .addCase(editWaterItem.fulfilled, (state, action) => {
+ // state.loading = false;
+ // state.error = null;
+ // })
+ // .addCase(editWaterItem.rejected, (state, action) => {
+ // state.loading = false;
+ // state.error = action.payload;
+ });
+ },
+});
+
+export const { setChosenMonth, setChosenDate } = waterSlice.actions;
+export const waterReducer = waterSlice.reducer;
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()],
-})
+});