diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000..3e212e1
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,21 @@
+module.exports = {
+ root: true,
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:react/recommended',
+ 'plugin:react/jsx-runtime',
+ 'plugin:react-hooks/recommended',
+ ],
+ ignorePatterns: ['dist', '.eslintrc.cjs'],
+ parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
+ settings: { react: { version: '18.2' } },
+ plugins: ['react-refresh'],
+ rules: {
+ 'react/jsx-no-target-blank': 'off',
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..eb33691
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,28 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# Other files to ignore
+yarn.lock
+.env
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..72652e9
--- /dev/null
+++ b/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ Tanami Admin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..c8bf1bf
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,7133 @@
+{
+ "name": "optifii-admin",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "optifii-admin",
+ "version": "0.0.0",
+ "dependencies": {
+ "@chakra-ui/icons": "^2.1.1",
+ "@chakra-ui/react": "^2.8.2",
+ "@emotion/react": "^11.11.4",
+ "@emotion/styled": "^11.11.5",
+ "@hookform/resolvers": "^3.3.4",
+ "@reduxjs/toolkit": "^2.2.3",
+ "apexcharts": "^3.52.0",
+ "axios": "^1.7.2",
+ "bootstrap": "5.3.3",
+ "chart.js": "^4.4.3",
+ "dotenv": "^16.4.5",
+ "framer-motion": "^11.1.5",
+ "js-cookie": "^3.0.5",
+ "react": "^18.2.0",
+ "react-apexcharts": "^1.4.1",
+ "react-beautiful-dnd": "^13.1.1",
+ "react-chartjs-2": "^5.2.0",
+ "react-dom": "^18.2.0",
+ "react-hook-form": "^7.51.3",
+ "react-icons": "^5.1.0",
+ "react-quill": "^0.0.2",
+ "react-redux": "^9.1.1",
+ "react-router-dom": "^6.22.3",
+ "redux-persist": "^6.0.0",
+ "redux-persist-transform-encrypt": "^5.1.1",
+ "uuid": "^10.0.0",
+ "xlsx": "^0.18.5",
+ "yup": "^1.4.0"
+ },
+ "devDependencies": {
+ "@types/react": "^18.2.66",
+ "@types/react-dom": "^18.2.22",
+ "@vitejs/plugin-react-swc": "^3.5.0",
+ "eslint": "^8.57.0",
+ "eslint-plugin-react": "^7.34.1",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.6",
+ "vite": "^5.2.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+ "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.25.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+ "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.25.2"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
+ "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.25.0",
+ "@babel/types": "^7.25.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.25.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+ "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.25.0",
+ "@babel/parser": "^7.25.3",
+ "@babel/template": "^7.25.0",
+ "@babel/types": "^7.25.2",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.25.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+ "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.24.8",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@chakra-ui/accordion": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.3.1.tgz",
+ "integrity": "sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/descendant": "3.1.0",
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-controllable-state": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/transition": "2.1.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/alert": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/alert/-/alert-2.2.2.tgz",
+ "integrity": "sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/spinner": "2.1.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/anatomy": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.2.2.tgz",
+ "integrity": "sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==",
+ "license": "MIT"
+ },
+ "node_modules/@chakra-ui/avatar": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-2.3.0.tgz",
+ "integrity": "sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/image": "2.1.0",
+ "@chakra-ui/react-children-utils": "2.0.6",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/breadcrumb": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-2.2.0.tgz",
+ "integrity": "sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-children-utils": "2.0.6",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/breakpoint-utils": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.8.tgz",
+ "integrity": "sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/shared-utils": "2.0.5"
+ }
+ },
+ "node_modules/@chakra-ui/button": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/button/-/button-2.1.0.tgz",
+ "integrity": "sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/spinner": "2.1.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/card": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/card/-/card-2.2.0.tgz",
+ "integrity": "sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/checkbox": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-2.3.2.tgz",
+ "integrity": "sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/form-control": "2.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-callback-ref": "2.1.0",
+ "@chakra-ui/react-use-controllable-state": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
+ "@chakra-ui/react-use-update-effect": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/visually-hidden": "2.2.0",
+ "@zag-js/focus-visible": "0.16.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/clickable": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-2.1.0.tgz",
+ "integrity": "sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/close-button": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-2.1.1.tgz",
+ "integrity": "sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/icon": "3.2.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/color-mode": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-2.2.0.tgz",
+ "integrity": "sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/control-box": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-2.1.0.tgz",
+ "integrity": "sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/counter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/counter/-/counter-2.1.0.tgz",
+ "integrity": "sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/number-utils": "2.0.7",
+ "@chakra-ui/react-use-callback-ref": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/css-reset": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-2.3.0.tgz",
+ "integrity": "sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@emotion/react": ">=10.0.35",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/descendant": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-3.1.0.tgz",
+ "integrity": "sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/dom-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/dom-utils/-/dom-utils-2.1.0.tgz",
+ "integrity": "sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==",
+ "license": "MIT"
+ },
+ "node_modules/@chakra-ui/editable": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/editable/-/editable-3.1.0.tgz",
+ "integrity": "sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-callback-ref": "2.1.0",
+ "@chakra-ui/react-use-controllable-state": "2.1.0",
+ "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
+ "@chakra-ui/react-use-update-effect": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/event-utils": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/event-utils/-/event-utils-2.0.8.tgz",
+ "integrity": "sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==",
+ "license": "MIT"
+ },
+ "node_modules/@chakra-ui/focus-lock": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-2.1.0.tgz",
+ "integrity": "sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/dom-utils": "2.1.0",
+ "react-focus-lock": "^2.9.4"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/form-control": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.2.0.tgz",
+ "integrity": "sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/hooks": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.2.1.tgz",
+ "integrity": "sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-utils": "2.0.12",
+ "@chakra-ui/utils": "2.0.15",
+ "compute-scroll-into-view": "3.0.3",
+ "copy-to-clipboard": "3.3.3"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/icon": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.2.0.tgz",
+ "integrity": "sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/icons": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-2.1.1.tgz",
+ "integrity": "sha512-3p30hdo4LlRZTT5CwoAJq3G9fHI0wDc0pBaMHj4SUn0yomO+RcDRlzhdXqdr5cVnzax44sqXJVnf3oQG0eI+4g==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/icon": "3.2.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/image": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/image/-/image-2.1.0.tgz",
+ "integrity": "sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/input": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/input/-/input-2.1.2.tgz",
+ "integrity": "sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/form-control": "2.2.0",
+ "@chakra-ui/object-utils": "2.1.0",
+ "@chakra-ui/react-children-utils": "2.0.6",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/layout": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.3.1.tgz",
+ "integrity": "sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/breakpoint-utils": "2.0.8",
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/object-utils": "2.1.0",
+ "@chakra-ui/react-children-utils": "2.0.6",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/lazy-utils": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/lazy-utils/-/lazy-utils-2.0.5.tgz",
+ "integrity": "sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==",
+ "license": "MIT"
+ },
+ "node_modules/@chakra-ui/live-region": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-2.1.0.tgz",
+ "integrity": "sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/media-query": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.3.0.tgz",
+ "integrity": "sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/breakpoint-utils": "2.0.8",
+ "@chakra-ui/react-env": "3.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/menu": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.2.1.tgz",
+ "integrity": "sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/clickable": "2.1.0",
+ "@chakra-ui/descendant": "3.1.0",
+ "@chakra-ui/lazy-utils": "2.0.5",
+ "@chakra-ui/popper": "3.1.0",
+ "@chakra-ui/react-children-utils": "2.0.6",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-animation-state": "2.1.0",
+ "@chakra-ui/react-use-controllable-state": "2.1.0",
+ "@chakra-ui/react-use-disclosure": "2.1.0",
+ "@chakra-ui/react-use-focus-effect": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/react-use-outside-click": "2.2.0",
+ "@chakra-ui/react-use-update-effect": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/transition": "2.1.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/modal": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/modal/-/modal-2.3.1.tgz",
+ "integrity": "sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/close-button": "2.1.1",
+ "@chakra-ui/focus-lock": "2.1.0",
+ "@chakra-ui/portal": "2.1.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/transition": "2.1.0",
+ "aria-hidden": "^1.2.3",
+ "react-remove-scroll": "^2.5.6"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/number-input": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-2.1.2.tgz",
+ "integrity": "sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/counter": "2.1.0",
+ "@chakra-ui/form-control": "2.2.0",
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-callback-ref": "2.1.0",
+ "@chakra-ui/react-use-event-listener": "2.1.0",
+ "@chakra-ui/react-use-interval": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
+ "@chakra-ui/react-use-update-effect": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/number-utils": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/number-utils/-/number-utils-2.0.7.tgz",
+ "integrity": "sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==",
+ "license": "MIT"
+ },
+ "node_modules/@chakra-ui/object-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/object-utils/-/object-utils-2.1.0.tgz",
+ "integrity": "sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==",
+ "license": "MIT"
+ },
+ "node_modules/@chakra-ui/pin-input": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-2.1.0.tgz",
+ "integrity": "sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/descendant": "3.1.0",
+ "@chakra-ui/react-children-utils": "2.0.6",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-controllable-state": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/popover": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/popover/-/popover-2.2.1.tgz",
+ "integrity": "sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/close-button": "2.1.1",
+ "@chakra-ui/lazy-utils": "2.0.5",
+ "@chakra-ui/popper": "3.1.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-animation-state": "2.1.0",
+ "@chakra-ui/react-use-disclosure": "2.1.0",
+ "@chakra-ui/react-use-focus-effect": "2.1.0",
+ "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/popper": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/popper/-/popper-3.1.0.tgz",
+ "integrity": "sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@popperjs/core": "^2.9.3"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/portal": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/portal/-/portal-2.1.0.tgz",
+ "integrity": "sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/progress": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/progress/-/progress-2.2.0.tgz",
+ "integrity": "sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-context": "2.1.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/provider": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/provider/-/provider-2.4.2.tgz",
+ "integrity": "sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/css-reset": "2.3.0",
+ "@chakra-ui/portal": "2.1.0",
+ "@chakra-ui/react-env": "3.1.0",
+ "@chakra-ui/system": "2.6.2",
+ "@chakra-ui/utils": "2.0.15"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0",
+ "@emotion/styled": "^11.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/radio": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/radio/-/radio-2.1.2.tgz",
+ "integrity": "sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/form-control": "2.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@zag-js/focus-visible": "0.16.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.8.2.tgz",
+ "integrity": "sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/accordion": "2.3.1",
+ "@chakra-ui/alert": "2.2.2",
+ "@chakra-ui/avatar": "2.3.0",
+ "@chakra-ui/breadcrumb": "2.2.0",
+ "@chakra-ui/button": "2.1.0",
+ "@chakra-ui/card": "2.2.0",
+ "@chakra-ui/checkbox": "2.3.2",
+ "@chakra-ui/close-button": "2.1.1",
+ "@chakra-ui/control-box": "2.1.0",
+ "@chakra-ui/counter": "2.1.0",
+ "@chakra-ui/css-reset": "2.3.0",
+ "@chakra-ui/editable": "3.1.0",
+ "@chakra-ui/focus-lock": "2.1.0",
+ "@chakra-ui/form-control": "2.2.0",
+ "@chakra-ui/hooks": "2.2.1",
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/image": "2.1.0",
+ "@chakra-ui/input": "2.1.2",
+ "@chakra-ui/layout": "2.3.1",
+ "@chakra-ui/live-region": "2.1.0",
+ "@chakra-ui/media-query": "3.3.0",
+ "@chakra-ui/menu": "2.2.1",
+ "@chakra-ui/modal": "2.3.1",
+ "@chakra-ui/number-input": "2.1.2",
+ "@chakra-ui/pin-input": "2.1.0",
+ "@chakra-ui/popover": "2.2.1",
+ "@chakra-ui/popper": "3.1.0",
+ "@chakra-ui/portal": "2.1.0",
+ "@chakra-ui/progress": "2.2.0",
+ "@chakra-ui/provider": "2.4.2",
+ "@chakra-ui/radio": "2.1.2",
+ "@chakra-ui/react-env": "3.1.0",
+ "@chakra-ui/select": "2.1.2",
+ "@chakra-ui/skeleton": "2.1.0",
+ "@chakra-ui/skip-nav": "2.1.0",
+ "@chakra-ui/slider": "2.1.0",
+ "@chakra-ui/spinner": "2.1.0",
+ "@chakra-ui/stat": "2.1.1",
+ "@chakra-ui/stepper": "2.3.1",
+ "@chakra-ui/styled-system": "2.9.2",
+ "@chakra-ui/switch": "2.1.2",
+ "@chakra-ui/system": "2.6.2",
+ "@chakra-ui/table": "2.1.0",
+ "@chakra-ui/tabs": "3.0.0",
+ "@chakra-ui/tag": "3.1.1",
+ "@chakra-ui/textarea": "2.1.2",
+ "@chakra-ui/theme": "3.3.1",
+ "@chakra-ui/theme-utils": "2.0.21",
+ "@chakra-ui/toast": "7.0.2",
+ "@chakra-ui/tooltip": "2.3.1",
+ "@chakra-ui/transition": "2.1.0",
+ "@chakra-ui/utils": "2.0.15",
+ "@chakra-ui/visually-hidden": "2.2.0"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0",
+ "@emotion/styled": "^11.0.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-children-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-children-utils/-/react-children-utils-2.0.6.tgz",
+ "integrity": "sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-context": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-context/-/react-context-2.1.0.tgz",
+ "integrity": "sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-env": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-3.1.0.tgz",
+ "integrity": "sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-types/-/react-types-2.0.7.tgz",
+ "integrity": "sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-animation-state": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.1.0.tgz",
+ "integrity": "sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/dom-utils": "2.1.0",
+ "@chakra-ui/react-use-event-listener": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-callback-ref": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.1.0.tgz",
+ "integrity": "sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-controllable-state": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.1.0.tgz",
+ "integrity": "sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-callback-ref": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-disclosure": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.1.0.tgz",
+ "integrity": "sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-callback-ref": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-event-listener": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.1.0.tgz",
+ "integrity": "sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-callback-ref": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-focus-effect": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.1.0.tgz",
+ "integrity": "sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/dom-utils": "2.1.0",
+ "@chakra-ui/react-use-event-listener": "2.1.0",
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
+ "@chakra-ui/react-use-update-effect": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-focus-on-pointer-down": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.1.0.tgz",
+ "integrity": "sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-event-listener": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-interval": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-interval/-/react-use-interval-2.1.0.tgz",
+ "integrity": "sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-callback-ref": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-latest-ref": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.1.0.tgz",
+ "integrity": "sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-merge-refs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.1.0.tgz",
+ "integrity": "sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-outside-click": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.2.0.tgz",
+ "integrity": "sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-callback-ref": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-pan-event": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.1.0.tgz",
+ "integrity": "sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/event-utils": "2.0.8",
+ "@chakra-ui/react-use-latest-ref": "2.1.0",
+ "framesync": "6.1.2"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-previous": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-previous/-/react-use-previous-2.1.0.tgz",
+ "integrity": "sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-safe-layout-effect": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.1.0.tgz",
+ "integrity": "sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-size": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-size/-/react-use-size-2.1.0.tgz",
+ "integrity": "sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/element-size": "0.10.5"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-timeout": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-timeout/-/react-use-timeout-2.1.0.tgz",
+ "integrity": "sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-use-callback-ref": "2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-use-update-effect": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.1.0.tgz",
+ "integrity": "sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/react-utils": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-2.0.12.tgz",
+ "integrity": "sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/utils": "2.0.15"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/select": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/select/-/select-2.1.2.tgz",
+ "integrity": "sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/form-control": "2.2.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/shared-utils": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.5.tgz",
+ "integrity": "sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==",
+ "license": "MIT"
+ },
+ "node_modules/@chakra-ui/skeleton": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-2.1.0.tgz",
+ "integrity": "sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/media-query": "3.3.0",
+ "@chakra-ui/react-use-previous": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/skip-nav": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/skip-nav/-/skip-nav-2.1.0.tgz",
+ "integrity": "sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/slider": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/slider/-/slider-2.1.0.tgz",
+ "integrity": "sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/number-utils": "2.0.7",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-callback-ref": "2.1.0",
+ "@chakra-ui/react-use-controllable-state": "2.1.0",
+ "@chakra-ui/react-use-latest-ref": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/react-use-pan-event": "2.1.0",
+ "@chakra-ui/react-use-size": "2.1.0",
+ "@chakra-ui/react-use-update-effect": "2.1.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/spinner": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.1.0.tgz",
+ "integrity": "sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/stat": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/stat/-/stat-2.1.1.tgz",
+ "integrity": "sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/stepper": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/stepper/-/stepper-2.3.1.tgz",
+ "integrity": "sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/styled-system": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.2.tgz",
+ "integrity": "sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/shared-utils": "2.0.5",
+ "csstype": "^3.1.2",
+ "lodash.mergewith": "4.6.2"
+ }
+ },
+ "node_modules/@chakra-ui/switch": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/switch/-/switch-2.1.2.tgz",
+ "integrity": "sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/checkbox": "2.3.2",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/system": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-2.6.2.tgz",
+ "integrity": "sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/color-mode": "2.2.0",
+ "@chakra-ui/object-utils": "2.1.0",
+ "@chakra-ui/react-utils": "2.0.12",
+ "@chakra-ui/styled-system": "2.9.2",
+ "@chakra-ui/theme-utils": "2.0.21",
+ "@chakra-ui/utils": "2.0.15",
+ "react-fast-compare": "3.2.2"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0",
+ "@emotion/styled": "^11.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/table": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/table/-/table-2.1.0.tgz",
+ "integrity": "sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/tabs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-3.0.0.tgz",
+ "integrity": "sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/clickable": "2.1.0",
+ "@chakra-ui/descendant": "3.1.0",
+ "@chakra-ui/lazy-utils": "2.0.5",
+ "@chakra-ui/react-children-utils": "2.0.6",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-controllable-state": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/react-use-safe-layout-effect": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/tag": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/tag/-/tag-3.1.1.tgz",
+ "integrity": "sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/icon": "3.2.0",
+ "@chakra-ui/react-context": "2.1.0"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/textarea": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-2.1.2.tgz",
+ "integrity": "sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/form-control": "2.2.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/theme": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.3.1.tgz",
+ "integrity": "sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/anatomy": "2.2.2",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/theme-tools": "2.1.2"
+ },
+ "peerDependencies": {
+ "@chakra-ui/styled-system": ">=2.8.0"
+ }
+ },
+ "node_modules/@chakra-ui/theme-tools": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.1.2.tgz",
+ "integrity": "sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/anatomy": "2.2.2",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "color2k": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@chakra-ui/styled-system": ">=2.0.0"
+ }
+ },
+ "node_modules/@chakra-ui/theme-utils": {
+ "version": "2.0.21",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/theme-utils/-/theme-utils-2.0.21.tgz",
+ "integrity": "sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/styled-system": "2.9.2",
+ "@chakra-ui/theme": "3.3.1",
+ "lodash.mergewith": "4.6.2"
+ }
+ },
+ "node_modules/@chakra-ui/toast": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/toast/-/toast-7.0.2.tgz",
+ "integrity": "sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/alert": "2.2.2",
+ "@chakra-ui/close-button": "2.1.1",
+ "@chakra-ui/portal": "2.1.0",
+ "@chakra-ui/react-context": "2.1.0",
+ "@chakra-ui/react-use-timeout": "2.1.0",
+ "@chakra-ui/react-use-update-effect": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5",
+ "@chakra-ui/styled-system": "2.9.2",
+ "@chakra-ui/theme": "3.3.1"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": "2.6.2",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/tooltip": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-2.3.1.tgz",
+ "integrity": "sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/dom-utils": "2.1.0",
+ "@chakra-ui/popper": "3.1.0",
+ "@chakra-ui/portal": "2.1.0",
+ "@chakra-ui/react-types": "2.0.7",
+ "@chakra-ui/react-use-disclosure": "2.1.0",
+ "@chakra-ui/react-use-event-listener": "2.1.0",
+ "@chakra-ui/react-use-merge-refs": "2.1.0",
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/transition": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/transition/-/transition-2.1.0.tgz",
+ "integrity": "sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@chakra-ui/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "framer-motion": ">=4.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@chakra-ui/utils": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.0.15.tgz",
+ "integrity": "sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash.mergewith": "4.6.7",
+ "css-box-model": "1.2.1",
+ "framesync": "6.1.2",
+ "lodash.mergewith": "4.6.2"
+ }
+ },
+ "node_modules/@chakra-ui/visually-hidden": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz",
+ "integrity": "sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@chakra-ui/system": ">=2.0.0",
+ "react": ">=18"
+ }
+ },
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz",
+ "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/serialize": "^1.2.0",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.13.1",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz",
+ "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/sheet": "^1.4.0",
+ "@emotion/utils": "^1.4.0",
+ "@emotion/weak-memoize": "^0.4.0",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz",
+ "integrity": "sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.13.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.0.tgz",
+ "integrity": "sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.12.0",
+ "@emotion/cache": "^11.13.0",
+ "@emotion/serialize": "^1.3.0",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0",
+ "@emotion/utils": "^1.4.0",
+ "@emotion/weak-memoize": "^0.4.0",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.0.tgz",
+ "integrity": "sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/unitless": "^0.9.0",
+ "@emotion/utils": "^1.4.0",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/styled": {
+ "version": "11.13.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz",
+ "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.12.0",
+ "@emotion/is-prop-valid": "^1.3.0",
+ "@emotion/serialize": "^1.3.0",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0",
+ "@emotion/utils": "^1.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0-rc.0",
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.9.0.tgz",
+ "integrity": "sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz",
+ "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz",
+ "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
+ "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",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@hookform/resolvers": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz",
+ "integrity": "sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react-hook-form": "^7.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@kurkle/color": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
+ "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==",
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@reduxjs/toolkit": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.7.tgz",
+ "integrity": "sha512-faI3cZbSdFb8yv9dhDTmGwclW0vk0z5o1cia+kf7gCbaCwHI5e+7tP57mJUv22pNcNbeA62GSrPpfrUfdXcQ6g==",
+ "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/@remix-run/router": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz",
+ "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
+ "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
+ "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
+ "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
+ "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
+ "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
+ "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
+ "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
+ "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
+ "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
+ "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
+ "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
+ "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
+ "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
+ "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
+ "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
+ "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@swc/core": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.11.tgz",
+ "integrity": "sha512-AB+qc45UrJrDfbhPKcUXk+9z/NmFfYYwJT6G7/iur0fCse9kXjx45gi40+u/O2zgarG/30/zV6E3ps8fUvjh7g==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.12"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.7.11",
+ "@swc/core-darwin-x64": "1.7.11",
+ "@swc/core-linux-arm-gnueabihf": "1.7.11",
+ "@swc/core-linux-arm64-gnu": "1.7.11",
+ "@swc/core-linux-arm64-musl": "1.7.11",
+ "@swc/core-linux-x64-gnu": "1.7.11",
+ "@swc/core-linux-x64-musl": "1.7.11",
+ "@swc/core-win32-arm64-msvc": "1.7.11",
+ "@swc/core-win32-ia32-msvc": "1.7.11",
+ "@swc/core-win32-x64-msvc": "1.7.11"
+ },
+ "peerDependencies": {
+ "@swc/helpers": "*"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.11.tgz",
+ "integrity": "sha512-HRQv4qIeMBPThZ6Y/4yYW52rGsS6yrpusvuxLGyoFo45Y0y12/V2yXkOIA/0HIQyrqoUAxn1k4zQXpPaPNCmnw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.11.tgz",
+ "integrity": "sha512-vtMQj0F3oYwDu5yhO7SKDRg1XekRSi6/TbzHAbBXv+dBhlGGvcZZynT1H90EVFTv+7w7Sh+lOFvRv5Z4ZTcxow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.11.tgz",
+ "integrity": "sha512-mHtzWKxhtyreI4CSxs+3+ENv8t/Qo35WFoYG66qHEgJz/Z2Lh6jv1E+MYgHdYwnpQHgHbdvAco7HsBu/Dt6xXw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.11.tgz",
+ "integrity": "sha512-FRwe/x0GfXSQjGP2lIk+NO0pUFS/lI/RorCLBPiK808EVE9JTbh9DKCc/4Bbb4jgScAjNkrFCUVObQYl3YKmpA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.11.tgz",
+ "integrity": "sha512-GY/rs0+GUq14Gbnza90KOrQd/9yHd5qQMii5jcSWcUCT5A8QTa8kiicsM2NxZeTJ69xlKmT7sLod5l99lki/2A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.11.tgz",
+ "integrity": "sha512-QDkGRwSPmp2RBOlSs503IUXlWYlny8DyznTT0QuK0ML2RpDFlXWU94K/EZhS0RBEUkMY/W51OacM8P8aS/dkCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.11.tgz",
+ "integrity": "sha512-SBEfKrXy6zQ6ksnyxw1FaCftrIH4fLfA81xNnKb7x/6iblv7Ko6H0aK3P5C86jyqF/82+ONl9C7ImGkUFQADig==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.11.tgz",
+ "integrity": "sha512-a2Y4xxEsLLYHJN7sMnw9+YQJDi3M1BxEr9hklfopPuGGnYLFNnx5CypH1l9ReijEfWjIAHNi7pq3m023lzW1Hg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.11.tgz",
+ "integrity": "sha512-ZbZFMwZO+j8ulhegJ7EhJ/QVZPoQ5qc30ylJQSxizizTJaen71Q7/13lXWc6ksuCKvg6dUKrp/TPgoxOOtSrFA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.11.tgz",
+ "integrity": "sha512-IUohZedSJyDu/ReEBG/mqX6uG29uA7zZ9z6dIAF+p6eFxjXmh9MuHryyM+H8ebUyoq/Ad3rL+rUCksnuYNnI0w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swc/types": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz",
+ "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/counter": "^0.1.3"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/lodash": {
+ "version": "4.17.7",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz",
+ "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash.mergewith": {
+ "version": "4.6.7",
+ "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz",
+ "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.12",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
+ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.3",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
+ "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
+ "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-redux": {
+ "version": "7.1.33",
+ "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.33.tgz",
+ "integrity": "sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hoist-non-react-statics": "^3.3.0",
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0",
+ "redux": "^4.0.0"
+ }
+ },
+ "node_modules/@types/react-redux/node_modules/redux": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2"
+ }
+ },
+ "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/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@vitejs/plugin-react-swc": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz",
+ "integrity": "sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@swc/core": "^1.5.7"
+ },
+ "peerDependencies": {
+ "vite": "^4 || ^5"
+ }
+ },
+ "node_modules/@yr/monotone-cubic-spline": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz",
+ "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/dom-query": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.16.0.tgz",
+ "integrity": "sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/element-size": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.10.5.tgz",
+ "integrity": "sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/focus-visible": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.16.0.tgz",
+ "integrity": "sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "0.16.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/adler-32": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
+ "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/apexcharts": {
+ "version": "3.52.0",
+ "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.52.0.tgz",
+ "integrity": "sha512-7dg0ADKs8AA89iYMZMe2sFDG0XK5PfqllKV9N+i3hKHm3vEtdhwz8AlXGm+/b0nJ6jKiaXsqci5LfVxNhtB+dA==",
+ "license": "MIT",
+ "dependencies": {
+ "@yr/monotone-cubic-spline": "^1.0.3",
+ "svg.draggable.js": "^2.2.2",
+ "svg.easing.js": "^2.0.0",
+ "svg.filter.js": "^2.0.2",
+ "svg.pathmorphing.js": "^0.1.3",
+ "svg.resize.js": "^1.4.3",
+ "svg.select.js": "^3.0.1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-hidden": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "license": "MIT",
+ "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",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+ "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/bootstrap": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
+ "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/twbs"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/bootstrap"
+ }
+ ],
+ "license": "MIT",
+ "peerDependencies": {
+ "@popperjs/core": "^2.11.8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cfb": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
+ "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "adler-32": "~1.3.0",
+ "crc-32": "~1.2.0"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk/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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/chart.js": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz",
+ "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==",
+ "license": "MIT",
+ "dependencies": {
+ "@kurkle/color": "^0.3.0"
+ },
+ "engines": {
+ "pnpm": ">=8"
+ }
+ },
+ "node_modules/codepage": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
+ "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "license": "MIT"
+ },
+ "node_modules/color2k": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz",
+ "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==",
+ "license": "MIT"
+ },
+ "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/compute-scroll-into-view": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz",
+ "integrity": "sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==",
+ "license": "MIT"
+ },
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
+ "node_modules/copy-to-clipboard": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
+ "license": "MIT",
+ "dependencies": {
+ "toggle-selection": "^1.0.6"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
+ "license": "MIT"
+ },
+ "node_modules/css-box-model": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz",
+ "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==",
+ "license": "MIT",
+ "dependencies": {
+ "tiny-invariant": "^1.0.6"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "license": "MIT",
+ "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/debug": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "license": "MIT"
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
+ "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.3",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "iterator.prototype": "^1.1.2",
+ "safe-array-concat": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.35.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz",
+ "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.0.19",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.0",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.11",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.9",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz",
+ "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=7"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/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,
+ "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"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-diff": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.0.1.tgz",
+ "integrity": "sha512-anEzYJ8VOA5iAMjDOVMTVMrUOXveDTMMk5x0E4p0nJ3VPoIOolF51AqYyE+UD0QIyggUwqppqH7XVA9lF3fdaQ==",
+ "license": "Apache 2.0"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "license": "MIT"
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/focus-lock": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.5.tgz",
+ "integrity": "sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "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",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/frac": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
+ "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "11.3.28",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.3.28.tgz",
+ "integrity": "sha512-dqhoawipEAjqdv32zbv72sOMJZjol7dROWn7t/FOq23WXJ40O4OUybgnO2ldnuS+3YquSn8xO/KKRavZ+TBVOQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/framesync": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz",
+ "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "2.4.0"
+ }
+ },
+ "node_modules/framesync/node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "license": "0BSD"
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "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",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "license": "MIT"
+ },
+ "node_modules/is-async-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+ "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+ "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
+ "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/iterator.prototype": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
+ "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "reflect.getprototypeof": "^1.0.4",
+ "set-function-name": "^2.0.1"
+ }
+ },
+ "node_modules/js-cookie": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "license": "ISC"
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==",
+ "engines": [
+ "node",
+ "rhino"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/memoize-one": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==",
+ "license": "MIT"
+ },
+ "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",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+ "dev": true,
+ "license": "MIT",
+ "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/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "license": "ISC"
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.41",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+ "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "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",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "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"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/quilljs": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/quilljs/-/quilljs-0.18.1.tgz",
+ "integrity": "sha512-VKaO7GNehgnH4LlFPx5ZAl+KFDoRVtboY0I6UUbYXUsPHP8kR80Tg/CFEYqrqrpCOGQr4OQ5Tjm813gV1DUyQw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "eventemitter2": "~0.4.13",
+ "lodash": "~2.4.1",
+ "rich-text": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/raf-schd": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz",
+ "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==",
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-apexcharts": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.4.1.tgz",
+ "integrity": "sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "apexcharts": "^3.41.0",
+ "react": ">=0.13"
+ }
+ },
+ "node_modules/react-beautiful-dnd": {
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz",
+ "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2",
+ "css-box-model": "^1.2.0",
+ "memoize-one": "^5.1.1",
+ "raf-schd": "^4.0.2",
+ "react-redux": "^7.2.0",
+ "redux": "^4.0.4",
+ "use-memo-one": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.5 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-beautiful-dnd/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "license": "MIT"
+ },
+ "node_modules/react-beautiful-dnd/node_modules/react-redux": {
+ "version": "7.2.9",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz",
+ "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.15.4",
+ "@types/react-redux": "^7.1.20",
+ "hoist-non-react-statics": "^3.3.2",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.7.2",
+ "react-is": "^17.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.3 || ^17 || ^18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-beautiful-dnd/node_modules/redux": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2"
+ }
+ },
+ "node_modules/react-chartjs-2": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz",
+ "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "chart.js": "^4.1.1",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-clientside-effect": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz",
+ "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.13"
+ },
+ "peerDependencies": {
+ "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "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-focus-lock": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.12.1.tgz",
+ "integrity": "sha512-lfp8Dve4yJagkHiFrC1bGtib3mF2ktqwPJw4/WGcgPW+pJ/AVQA5X2vI7xgp13FcxFEpYBBHpXai/N2DBNC0Jw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.0.0",
+ "focus-lock": "^1.3.5",
+ "prop-types": "^15.6.2",
+ "react-clientside-effect": "^1.2.6",
+ "use-callback-ref": "^1.3.2",
+ "use-sidecar": "^1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-hook-form": {
+ "version": "7.52.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.2.tgz",
+ "integrity": "sha512-pqfPEbERnxxiNMPd0bzmt1tuaPcVccywFDpyk2uV5xCIBphHV5T8SVnX9/o3kplPE1zzKt77+YIoq+EMwJp56A==",
+ "license": "MIT",
+ "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-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==",
+ "license": "MIT"
+ },
+ "node_modules/react-quill": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-0.0.2.tgz",
+ "integrity": "sha512-PeiHXZ63Sumh41OdovBQExXJH7B4UsJpyCW8CtRvXrNBa2RJXdciaJvTeb0x6pYQfqkoCYPT5EbUvEr0Z1tohg==",
+ "license": "MIT",
+ "dependencies": {
+ "quilljs": "^0.18.1"
+ },
+ "engines": {
+ "node": ">= 0.8.x"
+ },
+ "peerDependencies": {
+ "react": ">=0.11.0"
+ }
+ },
+ "node_modules/react-redux": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
+ "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/use-sync-external-store": "^0.0.3",
+ "use-sync-external-store": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^18.2.25",
+ "react": "^18.0",
+ "redux": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.5.10",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz",
+ "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.6",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "license": "MIT",
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz",
+ "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz",
+ "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.1",
+ "react-router": "6.26.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "license": "MIT",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/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-persist-transform-encrypt": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/redux-persist-transform-encrypt/-/redux-persist-transform-encrypt-5.1.1.tgz",
+ "integrity": "sha512-PN+yypR6fBVMEFBnwZmTN9rEovs+zmBojejIGF8WxP4Qt+Tt1MQtIUUkeUKoeG4QrMWoXtRYmbBkaWpKcdpXHg==",
+ "license": "MIT",
+ "dependencies": {
+ "crypto-js": "^4.2.0",
+ "json-stringify-safe": "^5.0.1"
+ },
+ "peerDependencies": {
+ "redux": ">3.0.0",
+ "redux-persist": "^6.x.x"
+ }
+ },
+ "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,
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "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"
+ },
+ "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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rich-text": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/rich-text/-/rich-text-1.0.3.tgz",
+ "integrity": "sha512-L+Mi0fBH4/TBGH68XZqUXdUr5Ze+ViYkrKuwEvCpeyB1Blbp4CLO4LyYleutTNybujCMQfcmivaNrE3YLrEUgg==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-diff": "~1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
+ "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.20.0",
+ "@rollup/rollup-android-arm64": "4.20.0",
+ "@rollup/rollup-darwin-arm64": "4.20.0",
+ "@rollup/rollup-darwin-x64": "4.20.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.20.0",
+ "@rollup/rollup-linux-arm64-musl": "4.20.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-gnu": "4.20.0",
+ "@rollup/rollup-linux-x64-musl": "4.20.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.20.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.20.0",
+ "@rollup/rollup-win32-x64-msvc": "4.20.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
+ "license": "MIT",
+ "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/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ssf": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
+ "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "frac": "~1.1.2"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "license": "MIT"
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg.draggable.js": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz",
+ "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==",
+ "license": "MIT",
+ "dependencies": {
+ "svg.js": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.easing.js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz",
+ "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==",
+ "license": "MIT",
+ "dependencies": {
+ "svg.js": ">=2.3.x"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.filter.js": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz",
+ "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==",
+ "license": "MIT",
+ "dependencies": {
+ "svg.js": "^2.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.js": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz",
+ "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==",
+ "license": "MIT"
+ },
+ "node_modules/svg.pathmorphing.js": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz",
+ "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==",
+ "license": "MIT",
+ "dependencies": {
+ "svg.js": "^2.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.resize.js": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz",
+ "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==",
+ "license": "MIT",
+ "dependencies": {
+ "svg.js": "^2.6.5",
+ "svg.select.js": "^2.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.resize.js/node_modules/svg.select.js": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz",
+ "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==",
+ "license": "MIT",
+ "dependencies": {
+ "svg.js": "^2.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/svg.select.js": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz",
+ "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==",
+ "license": "MIT",
+ "dependencies": {
+ "svg.js": "^2.6.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tiny-case": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
+ "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==",
+ "license": "MIT"
+ },
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "license": "MIT"
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/toggle-selection": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+ "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==",
+ "license": "MIT"
+ },
+ "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/tslib": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "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",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "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",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-memo-one": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz",
+ "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "license": "MIT",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/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/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+ "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.41",
+ "rollup": "^4.13.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz",
+ "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.0.5",
+ "is-finalizationregistry": "^1.0.2",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.1.4",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wmf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
+ "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/word": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
+ "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/xlsx": {
+ "version": "0.18.5",
+ "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
+ "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "adler-32": "~1.3.0",
+ "cfb": "~1.2.1",
+ "codepage": "~1.15.0",
+ "crc-32": "~1.2.1",
+ "ssf": "~0.11.2",
+ "wmf": "~1.0.1",
+ "word": "~0.3.0"
+ },
+ "bin": {
+ "xlsx": "bin/xlsx.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "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"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..15006a0
--- /dev/null
+++ b/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "optifii-admin",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@chakra-ui/icons": "^2.1.1",
+ "@chakra-ui/react": "^2.8.2",
+ "@emotion/react": "^11.11.4",
+ "@emotion/styled": "^11.11.5",
+ "@hookform/resolvers": "^3.3.4",
+ "@reduxjs/toolkit": "^2.2.3",
+ "apexcharts": "^3.52.0",
+ "axios": "^1.7.2",
+ "bootstrap": "5.3.3",
+ "chart.js": "^4.4.3",
+ "dotenv": "^16.4.5",
+ "framer-motion": "^11.1.5",
+ "js-cookie": "^3.0.5",
+ "react": "^18.2.0",
+ "react-apexcharts": "^1.4.1",
+ "react-beautiful-dnd": "^13.1.1",
+ "react-chartjs-2": "^5.2.0",
+ "react-dom": "^18.2.0",
+ "react-hook-form": "^7.51.3",
+ "react-icons": "^5.1.0",
+ "react-quill": "^0.0.2",
+ "react-redux": "^9.1.1",
+ "react-router-dom": "^6.22.3",
+ "redux-persist": "^6.0.0",
+ "redux-persist-transform-encrypt": "^5.1.1",
+ "uuid": "^10.0.0",
+ "xlsx": "^0.18.5",
+ "yup": "^1.4.0"
+ },
+ "devDependencies": {
+ "@types/react": "^18.2.66",
+ "@types/react-dom": "^18.2.22",
+ "@vitejs/plugin-react-swc": "^3.5.0",
+ "eslint": "^8.57.0",
+ "eslint-plugin-react": "^7.34.1",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.6",
+ "vite": "^5.2.0"
+ }
+}
diff --git a/public/vite.svg b/public/vite.svg
new file mode 100644
index 0000000..e7b8dfb
--- /dev/null
+++ b/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/App.css b/src/App.css
new file mode 100644
index 0000000..4a4f6bf
--- /dev/null
+++ b/src/App.css
@@ -0,0 +1,491 @@
+@import url("https://fonts.googleapis.com/css2?family=League+Spartan:wght@100..900&display=swap");
+@import url("https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,100..900;1,100..900&display=swap");
+@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
+
+@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap');
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ /* font-family: "League Spartan", sans-serif !important; */
+ font-family: "Poppins", sans-serif !important;
+
+ /* font-family: "Lato", sans-serif !important; */
+}
+
+::selection {
+ background-color: #6311CB; /* Change this to your desired color */
+ color: white; /* Optional: Change the text color */
+}
+
+.pointer {
+ cursor: pointer !important;
+}
+
+.activee {
+ text-decoration: none; /* Remove underline */
+ font-weight: bold; /* Optionally change font weight for active link */
+ background: linear-gradient(
+ to right,
+ #7a45fb,
+ #de41b5
+ ); /* Gradient background */
+ -webkit-background-clip: text; /* Clip text to the background area */
+ -webkit-text-fill-color: transparent; /* Fill text with the background color */
+ transition: all 0.3s ease-in-out;
+}
+
+.active {
+ background-color: #1a04361c;
+ /* color: #fff; */
+ /* background-color: #e2e8f01c; */
+}
+
+.link {
+ text-decoration: none;
+ transition: all 0.2s ease-in-out;
+ font-weight: 400;
+}
+
+.link:hover {
+ background-color: #1a04361c;
+ /* color: #fff; */
+ /* background-color: #e2e8f01c !important; */
+}
+
+.active:hover {
+ background-color: #1a04361c;
+ /* color: #fff; */
+ /* background-color: #e2e8f01c !important; */
+}
+
+.web-text-small {
+ font-size: 12px !important;
+}
+.web-text-xxsmall {
+ font-size: 9px !important;
+}
+.web-text-xsmall {
+ font-size: 11px !important;
+}
+
+.web-text-medium {
+ font-size: 13px !important;
+}
+
+.web-text-large {
+ font-size: 15px !important;
+}
+
+.rubix-text-dark {
+ color: #000000;
+}
+
+.arrow-button {
+ transition: all 0.5s;
+}
+
+.arrow-button:active {
+ background: #fff;
+}
+
+.arrow-button:focus {
+ background: #fff;
+}
+
+.arrow-button:hover {
+ background: linear-gradient(90deg, #de41b5 0%, #7a45fb 100%);
+}
+
+.greeting {
+ text-decoration: none; /* Remove underline */
+ font-weight: bold; /* Optionally change font weight for active link */
+ background: linear-gradient(
+ to right,
+ #7a45fb,
+ #de41b5
+ ); /* Gradient background */
+ -webkit-background-clip: text; /* Clip text to the background area */
+ -webkit-text-fill-color: transparent; /* Fill text with the background color */
+ transition: all 0.3s ease-in-out;
+}
+
+.primary-btn {
+ background-color: #004118 !important;
+}
+
+.team-slider .swiper-button-next:after {
+ position: absolute;
+ top: 185px;
+ width: 38px;
+ height: 38px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 50px;
+ font-size: 18px;
+ color: #000;
+ font-weight: 700;
+ right: 110px;
+ background-image: radial-gradient(
+ circle,
+ #ffffff,
+ #eee2f2,
+ #e7c3dc,
+ #e5a3ba,
+ #de858e
+ );
+}
+.team-slider .swiper-button-prev:after {
+ position: absolute;
+ top: 185px;
+ width: 38px;
+ height: 38px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 50px;
+ font-size: 18px;
+ color: #000;
+ font-weight: 700;
+ left: 110px;
+ background-image: radial-gradient(
+ circle,
+ #ffffff,
+ #eee2f2,
+ #e7c3dc,
+ #e5a3ba,
+ #de858e
+ );
+}
+
+.text-animate {
+ animation-name: text;
+ animation-duration: 5s;
+ animation-iteration-count: 1;
+}
+
+.table-scroll::-webkit-scrollbar{
+ width: 2px !important;
+ height: 10px !important;
+}
+
+/* Total scrollbar width */
+::-webkit-scrollbar {
+ width: 2px;
+ height: 12px;
+}
+
+/* The track (background) of the scrollbar */
+::-webkit-scrollbar-track {
+ background: transparent;
+ border-radius: 0px;
+}
+
+/* The draggable scrollbar handle */
+::-webkit-scrollbar-thumb {
+ background: #0041184f;
+ border-radius: 0px;
+ cursor: grabbing;
+}
+
+/* On hover */
+::-webkit-scrollbar-thumb:hover {
+ background: #0041189a;
+}
+
+
+
+
+#google_translate_element {
+ /* display: none; Hide the default Google Translate dropdown */
+
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ opacity: 0.1;
+}
+.goog-te-banner-frame {
+ display: none;
+}
+
+.goog-te-banner-frame.skiptranslate {
+ display: none !important;
+}
+.goog-logo-link {
+ display: none !important;
+}
+.goog-te-gadget {
+ color: transparent !important;
+}
+
+
+@keyframes text {
+ 0% {
+ color: #DE858E;
+ /* margin-bottom: -40px; */
+ }
+ 30% {
+ letter-spacing: 10px;
+ /* margin-bottom: -40px; */
+ }
+ 85% {
+ letter-spacing: 8px;
+ /* margin-bottom: -40px; */
+ }
+ 100% {
+ /* margin-bottom: 20px; */
+ }
+}
+
+.rotate {
+ animation: animName 10s linear infinite;
+}
+
+@keyframes animName {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+.lds-ellipsis {
+ display: inline-block;
+ position: relative;
+ width: 64px;
+ height: 10px;
+}
+.lds-ellipsis div {
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ border-radius: 50%;
+ background: #fff;
+ animation-timing-function: cubic-bezier(0, 1, 1, 0);
+}
+.lds-ellipsis div:nth-child(1) {
+ left: 6px;
+ animation: lds-ellipsis1 0.6s infinite;
+}
+.lds-ellipsis div:nth-child(2) {
+ left: 6px;
+ animation: lds-ellipsis2 0.6s infinite;
+}
+.lds-ellipsis div:nth-child(3) {
+ left: 26px;
+ animation: lds-ellipsis2 0.6s infinite;
+}
+.lds-ellipsis div:nth-child(4) {
+ left: 45px;
+ animation: lds-ellipsis3 0.6s infinite;
+}
+@keyframes lds-ellipsis1 {
+ 0% {
+ transform: scale(0);
+ }
+ 100% {
+ transform: scale(1);
+ }
+}
+@keyframes lds-ellipsis3 {
+ 0% {
+ transform: scale(1);
+ }
+ 100% {
+ transform: scale(0);
+ }
+}
+@keyframes lds-ellipsis2 {
+ 0% {
+ transform: translate(0, 0);
+ }
+ 100% {
+ transform: translate(19px, 0);
+ }
+}
+
+/* Extra small devices (phones, 600px and down) */
+@media only screen and (max-width: 600px) {
+ body {
+ font-size: 14px !important;
+ }
+}
+
+/* Small devices (portrait tablets and large phones, 600px and up) */
+@media only screen and (min-width: 600px) {
+ body {
+ font-size: 16px !important;
+ }
+}
+
+/* Medium devices (landscape tablets, 768px and up) */
+@media only screen and (min-width: 768px) {
+ body {
+ font-size: 18px !important;
+ }
+}
+
+/* Large devices (laptops/desktops, 992px and up) */
+@media only screen and (min-width: 992px) {
+ body {
+ font-size: 20px !important;
+ }
+}
+
+/* Extra large devices (large laptops and desktops, 1200px and up) */
+@media only screen and (min-width: 1200px) {
+ body {
+ font-size: 22px !important;
+ }
+}
+
+
+
+
+
+/* ========= [ switch BTN ============ */
+
+
+
+/* From Uiverse.io by Nawsome */
+.switch {
+ display: block;
+ background-color: black;
+ width: 85px;
+ height: 115px;
+ box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0 1px 2px black, inset 0 2px 2px -2px white, inset 0 0 2px 15px #47434c, inset 0 0 2px 22px black;
+ border-radius: 5px;
+ padding: 20px;
+ perspective: 700px;
+}
+
+.switch input {
+ display: none;
+}
+
+.switch input:checked + .button {
+ transform: translateZ(20px) rotateX(25deg);
+ box-shadow: 0 -10px 20px #ff1818;
+}
+
+.switch input:checked + .button .light {
+ animation: flicker 0.2s infinite 0.3s;
+}
+
+.switch input:checked + .button .shine {
+ opacity: 1;
+}
+
+.switch input:checked + .button .shadow {
+ opacity: 0;
+}
+
+.switch .button {
+ display: block;
+ transition: all 0.3s cubic-bezier(1, 0, 1, 1);
+ transform-origin: center center -20px;
+ transform: translateZ(20px) rotateX(-25deg);
+ transform-style: preserve-3d;
+ background-color: #9b0621;
+ height: 100%;
+ position: relative;
+ cursor: pointer;
+ background: linear-gradient(#980000 0%, #6f0000 30%, #6f0000 70%, #980000 100%);
+ background-repeat: no-repeat;
+}
+
+.switch .button::before {
+ content: "";
+ background: linear-gradient(rgba(255, 255, 255, 0.8) 10%, rgba(255, 255, 255, 0.3) 30%, #650000 75%, #320000) 50% 50%/97% 97%, #b10000;
+ background-repeat: no-repeat;
+ width: 100%;
+ height: 50px;
+ transform-origin: top;
+ transform: rotateX(-90deg);
+ position: absolute;
+ top: 0;
+}
+
+.switch .button::after {
+ content: "";
+ background-image: linear-gradient(#650000, #320000);
+ width: 100%;
+ height: 58px;
+ transform-origin: top;
+ transform: translateY(50px) rotateX(-90deg);
+ position: absolute;
+ bottom: 0;
+ box-shadow: 0 50px 8px 0px black, 0 80px 20px 0px rgba(0, 0, 0, 0.5);
+}
+
+.switch .light {
+ opacity: 0;
+ animation: light-off 1s;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-image: radial-gradient(#ffc97e, #ff1818 40%, transparent 70%);
+}
+
+.switch .dots {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-image: radial-gradient(transparent 30%, rgba(101, 0, 0, 0.7) 70%);
+ background-size: 10px 10px;
+}
+
+.switch .characters {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(white, white) 50% 20%/5% 20%, radial-gradient(circle, transparent 50%, white 52%, white 70%, transparent 72%) 50% 80%/33% 25%;
+ background-repeat: no-repeat;
+}
+
+.switch .shine {
+ transition: all 0.3s cubic-bezier(1, 0, 1, 1);
+ opacity: 0.3;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(white, transparent 3%) 50% 50%/97% 97%, linear-gradient(rgba(255, 255, 255, 0.5), transparent 50%, transparent 80%, rgba(255, 255, 255, 0.5)) 50% 50%/97% 97%;
+ background-repeat: no-repeat;
+}
+
+.switch .shadow {
+ transition: all 0.3s cubic-bezier(1, 0, 1, 1);
+ opacity: 1;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(transparent 70%, rgba(0, 0, 0, 0.8));
+ background-repeat: no-repeat;
+}
+
+@keyframes flicker {
+ 0% {
+ opacity: 1;
+ }
+
+ 80% {
+ opacity: 0.8;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes light-off {
+ 0% {
+ opacity: 1;
+ }
+
+ 80% {
+ opacity: 0;
+ }
+}
\ No newline at end of file
diff --git a/src/App.jsx b/src/App.jsx
new file mode 100644
index 0000000..5256323
--- /dev/null
+++ b/src/App.jsx
@@ -0,0 +1,82 @@
+import React, { useContext, useEffect, useState } from "react";
+import "bootstrap/dist/css/bootstrap.min.css";
+import "bootstrap/dist/js/bootstrap.bundle.min.js";
+import {
+ BrowserRouter as Router,
+ Routes,
+ Route,
+ Navigate,
+} from "react-router-dom";
+import "./App.css"; // Import CSS file
+import DefaultLayout from "./Layout/DefaultLayout";
+import NotFound from "./Pages/NotFound";
+import Login from "./Pages/Login";
+import GlobalStateContext from "./Contexts/GlobalStateContext";
+import Cookies from "js-cookie";
+import NoInternetScreen from "./Pages/NoInternetScreen";
+import Welcome from "./Pages/PaymentSuccess";
+import PaymentFailed from "./Pages/PaymentFailed";
+
+const App = () => {
+ // const { isAuthenticate } = useSelector((state) => state?.auth);
+
+ const { isAuthenticate } = useContext(GlobalStateContext);
+ const isAuthenticatedInCookie = Cookies.get("isAuthenticated");
+
+ const [isOnline, setIsOnline] = useState(navigator.onLine);
+
+ useEffect(() => {
+ const handleOnlineStatusChange = () => {
+ setIsOnline(navigator.onLine);
+ };
+
+ window.addEventListener("online", handleOnlineStatusChange);
+ window.addEventListener("offline", handleOnlineStatusChange);
+
+ return () => {
+ window.removeEventListener("online", handleOnlineStatusChange);
+ window.removeEventListener("offline", handleOnlineStatusChange);
+ };
+ }, []);
+
+ // const token = localStorage.getItem('accessToken')
+ // console.log(token);
+
+
+ // const PrivateRoute = ({ children }) => {
+ // if (!isAuthenticate && isAuthenticatedInCookie !== "true") {
+ // return ;
+ // }
+ // return children;
+ // };
+
+ return (
+
+
+ } />
+ } />
+ } />
+
+ ) : (
+
+ )
+ // ) : (
+ //
+ // )
+ }
+ />
+
+ } />
+
+
+ );
+};
+
+export default App;
diff --git a/src/Components/Banner/AddBanner.jsx b/src/Components/Banner/AddBanner.jsx
new file mode 100644
index 0000000..c8ec5fd
--- /dev/null
+++ b/src/Components/Banner/AddBanner.jsx
@@ -0,0 +1,421 @@
+import {
+ Box,
+ FormControl,
+ FormHelperText,
+ FormLabel,
+ Input,
+ Stack,
+ Textarea,
+ Heading,
+ Button,
+ useToast,
+ Divider,
+ Image,
+} from "@chakra-ui/react";
+import React, { useState } from "react";
+import fallbackImage from "../../assets/ultp-fallback-img.webp";
+import { TiWarning } from "react-icons/ti";
+
+import { motion } from "framer-motion";
+import { OPACITY_ON_LOAD } from "../../Layout/animations";
+
+import { yupResolver } from "@hookform/resolvers/yup";
+import { useForm } from "react-hook-form";
+import {
+ addCommunityBannerSchema,
+ addCommunitySchema,
+} from "../../Validations/Validations";
+import { useNavigate } from "react-router-dom";
+import Loader01 from "../../Components/Loaders/Loader01";
+import Header from "../Header";
+import ToastBox from "../ToastBox";
+import BannerMainCard from "./BannerMainCard";
+
+const AddBanner = ({ createApi, navigateLink, title, center }) => {
+ const toast = useToast();
+ const navigate = useNavigate();
+ const [isLoading, setIsLoading] = useState(false);
+ const [selectedImage, setSelectedImage] = useState(fallbackImage);
+ const [largeImageData, setLargeImageData] = useState(null);
+
+ const {
+ register,
+ handleSubmit,
+ reset,
+ watch,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(addCommunityBannerSchema),
+ });
+
+ const formData = watch();
+
+ const onSubmit = async (data) => {
+ try {
+ setIsLoading(true);
+ const formData = new FormData();
+ formData.append("heading", data.heading);
+ formData.append("sub_heading", data.sub_heading);
+ formData.append("CTO_button_link", data.CTO_button_link);
+ formData.append("CTO_button_title", data.CTO_button_title);
+ if (selectedImage[0]) {
+ formData.append("banner_image", data.banner_image[0]);
+ }
+ // Trigger the mutation
+ createApi(formData)
+ .then((response) => {
+
+ if (response?.data?.statusCode === 200) {
+ setIsLoading(false);
+ toast({
+ render: () => (
+
+ ),
+ });
+ reset();
+ navigate(navigateLink);
+ } else if (response?.data?.statusCode === 500) {
+ setIsLoading(false);
+ toast({
+ render: () => (
+
+ ),
+ });
+ }
+ })
+ .catch((error) => {
+ // Handle errors
+ // // console.error("Error creating community:", error);
+ setIsLoading(false);
+ // Handle error notification if needed
+ });
+ } catch (error) {
+ // Handle errors
+ // // console.error("Error creating community:", error);
+ setIsLoading(false);
+ }
+ };
+
+ const handleImageChange = (e) => {
+ const file = e.target.files[0];
+ setLargeImageData(file);
+ if (file) {
+ const reader = new FileReader();
+ reader.onloadend = () => {
+ setSelectedImage(reader.result);
+ };
+ reader.readAsDataURL(file);
+ }
+ };
+
+ return (
+
+
+
+
+
+
+ Banner info
+
+
+ Select the platform for which you need to create this campaign.
+
+
+
+
+
+ Banner image
+
+
+ Below is the profile that will be displayed on the community page.
+
+
+
+ <>
+ {/* */}
+
+
+
+ {selectedImage === fallbackImage || largeImageData === null ? (
+ ""
+ ) : (
+
+ {largeImageData?.name}
+
+ {(largeImageData?.size / (1024 * 1024)).toFixed(2)} mb
+
+
+ )}
+ >
+
+
+
+
+
+
+
+ );
+};
+
+export default AddBanner;
diff --git a/src/Components/Banner/BannerEdit.jsx b/src/Components/Banner/BannerEdit.jsx
new file mode 100644
index 0000000..b885c58
--- /dev/null
+++ b/src/Components/Banner/BannerEdit.jsx
@@ -0,0 +1,489 @@
+import React, { useEffect, useState } from "react";
+import { useNavigate, useParams } from "react-router-dom";
+import {
+ useGetCommunityBannerByIdQuery,
+ useGetCommunityByIdQuery,
+ useUpdateCommunityBannerMutation,
+ useUpdateCommunityMutation,
+} from "../../Services/api.service";
+import { editCommunityBannerSchema, schemaEdit } from "../../Validations/Validations";
+import { useForm } from "react-hook-form";
+import { yupResolver } from "@hookform/resolvers/yup";
+import {
+ Box,
+ Divider,
+ FormControl,
+ FormHelperText,
+ FormLabel,
+ Heading,
+ Image,
+ Input,
+ Stack,
+ Textarea,
+ Button,
+ Skeleton,
+ useToast,
+ Switch,
+ Tag,
+ Text,
+} from "@chakra-ui/react";
+import { TiWarning } from "react-icons/ti";
+import { OPACITY_ON_LOAD } from "../../Layout/animations";
+import { motion } from "framer-motion";
+import Loader01 from "../../Components/Loaders/Loader01";
+import FullscreenLoaders from "../../Components/Loaders/FullscreenLoaders";
+import fallbackImage from "../../assets/ultp-fallback-img.webp";
+import Header from "../../Components/Header";
+import CommunityBannerCard from "../../Pages/Community/CommunityBannerCard";
+import BannerMainCard from "./BannerMainCard";
+import ToastBox from "../ToastBox";
+import { IMAGE_URI } from "../../Constants/Paginations";
+
+const BannerEdit = ({isLoading, data, updateBanner, navigateTo, refetch, center}) => {
+ const { id } = useParams();
+ const toast = useToast();
+ const navigate = useNavigate();
+ const [isLoadingEdit, setIsLoadingEdit] = useState(false);
+ const [selectedImage, setSelectedImage] = useState();
+ const [largeImageData, setLargeImageData] = useState(null);
+ const [title, setTitle] = useState("");
+
+ const handleTitleChange = (e) => {
+ setTitle(e.target.value);
+ };
+
+
+ const {
+ register,
+ handleSubmit,
+ reset,
+ formState: { errors },
+ setValue,
+ watch
+ } = useForm({
+ resolver: yupResolver(editCommunityBannerSchema),
+ defaultValues: {
+ heading: data?.data?.Heading,
+ sub_heading: data?.data?.sub_heading,
+ CTO_button_title: data?.data?.CTO_button_title,
+ CTO_button_link: data?.data?.CTO_button_link,
+ },
+ });
+
+
+ // Watch form values to update preview
+ const formData = watch();
+
+
+
+ useEffect(() => {
+ if (data?.data) {
+ setSelectedImage(
+ `${IMAGE_URI}/${data?.data?.banner_image}`
+ );
+ setValue("heading", data?.data?.Heading);
+ setValue("sub_heading", data?.data?.sub_heading);
+ setValue("CTO_button_title", data?.data?.CTO_button_title);
+ setValue("CTO_button_link", data?.data?.CTO_button_link);
+ setValue("banner_image", data?.data?.banner_image);
+ watch()
+ }
+ }, [data, setValue]);
+
+
+ // useEffect(() => {
+ // const subscription = watch((value) => {setFormData(value)});
+ // return () => subscription.unsubscribe();
+ // }, [watch]);
+
+ const onSubmit = async (formData) => {
+ setIsLoadingEdit(true);
+ const form = new FormData();
+ form.append("heading", formData.heading);
+ form.append("sub_heading", formData.sub_heading);
+ form.append("CTO_button_title", formData.CTO_button_title);
+ form.append("CTO_button_link", formData.CTO_button_link);
+ if (formData.banner_image[0]) {
+ form.append("banner_image", formData.banner_image[0]);
+ }
+ if (formData?.banner_image === data?.data?.banner_image) {
+ form.delete("banner_image");
+ }
+ const mutationResult = await updateBanner({ id: id, data: form })
+ .then((response) => {
+
+ if (response?.data?.statusCode === 200) {
+ setIsLoadingEdit(false);
+ toast({
+ render: () => (
+
+ ),
+ });
+ refetch()
+ navigate(navigateTo);
+ // setDeleteAlert(false);
+ }
+ })
+ .catch((error) => {
+ // // console.error("Error creating community:", error);
+ setIsLoadingEdit(false);
+ // setDeleteIsLoading(false);
+ // setDeleteAlert(false);
+ });
+
+
+
+ reset();
+ };
+
+ const handleImageChange = (e) => {
+ const file = e.target.files[0];
+ setLargeImageData(file);
+ if (file) {
+ const reader = new FileReader();
+ reader.onloadend = () => {
+ setSelectedImage(reader.result);
+ };
+ reader.readAsDataURL(file);
+ }
+ };
+
+ return isLoading ? (
+
+ ) : (
+
+
+
+
+
+
+ Display Info
+
+
+ Select the platform for which you need to create this campaign.
+
+
+
+
+
+ Display banner
+
+
+ Below is the profile that will be displayed on the community page.
+
+
+
+
+ {/* */}
+
+
+
+
+
+
+ {selectedImage === fallbackImage || largeImageData === null ? (
+ ""
+ ) : (
+
+ {largeImageData?.name}
+
+ {(largeImageData?.size / (1024 * 1024)).toFixed(2)} mb
+
+
+ )}
+
+
+
+
+
+
+
+ );
+};
+
+export default BannerEdit;
diff --git a/src/Components/Banner/BannerMainCard.jsx b/src/Components/Banner/BannerMainCard.jsx
new file mode 100644
index 0000000..fe34985
--- /dev/null
+++ b/src/Components/Banner/BannerMainCard.jsx
@@ -0,0 +1,63 @@
+import { Box, Button, Text } from '@chakra-ui/react'
+import React from 'react'
+
+const BannerMainCard = ({heading, subHeading, buttonTitle, imgLink, center}) => {
+
+
+ const words = heading?.split(' ');
+ const firstThreeWords = words.slice(0, 3).join(' ');
+ const remainingWords = words.slice(3).join(' ');
+
+
+
+ return (
+
+
+
+ {firstThreeWords}
+ {' '}
+ {remainingWords}
+
+
+ {subHeading}
+
+
+
+
+ )
+}
+
+export default BannerMainCard
\ No newline at end of file
diff --git a/src/Components/Banner/BannerTable.jsx b/src/Components/Banner/BannerTable.jsx
new file mode 100644
index 0000000..691c192
--- /dev/null
+++ b/src/Components/Banner/BannerTable.jsx
@@ -0,0 +1,368 @@
+import React, { useRef, useState } from "react";
+import {
+ Box,
+ Text,
+ Tooltip,
+ HStack,
+ Input,
+ Select,
+ Image,
+ Menu,
+ MenuButton,
+ MenuList,
+ MenuItem,
+ Switch,
+ Portal,
+ useToast,
+} from "@chakra-ui/react";
+import { Link as RouterLink } from "react-router-dom";
+import { HiDotsVertical } from "react-icons/hi";
+import { formatDate } from "../../Components/Functions/UTCConvertor";
+import CustomAlertDialog from "../../Components/CustomAlertDialog";
+import DataTable from "../DataTable/DataTable";
+import Header from "../Header";
+import { OPACITY_ON_LOAD } from "../../Layout/animations";
+import { IMAGE_URI, TABLE_PAGINATION } from "../../Constants/Paginations";
+import {
+ CheckCircleIcon,
+ ChevronLeftIcon,
+ ChevronRightIcon,
+ WarningIcon,
+} from "@chakra-ui/icons";
+import ToastBox from "../ToastBox";
+const API_URL = import.meta.env.VITE_API_BASE_URL;
+
+const BannerCommunity = ({
+ dataArray,
+ deleteApi,
+ statusUpdateApi,
+ title,
+ addLink,
+ viewLink,
+ editLink,
+}) => {
+ // ====================================================[Hooks]===================================================================
+ const toast = useToast();
+ const [deleteAlert, setDeleteAlert] = useState(false);
+ const [actionId, setActionId] = useState(null);
+ const [actionStatus, setActionStatus] = useState(null);
+ const [deleteIsLoading, setDeleteIsLoading] = useState(false);
+ const [searchTerm, setSearchTerm] = useState("");
+ const [statusFilter, setStatusFilter] = useState("all");
+
+ // const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size);
+ // const [currentPage, setCurrentPage] = useState(1);
+ // const [displayRange, setDisplayRange] = useState({
+ // start: TABLE_PAGINATION?.page,
+ // end: pageSize,
+ // });
+
+ // ====================================================[Functions]===================================================================
+ const handleDelete = async (bannerId, status) => {
+ if (status) {
+ return toast({
+ render: () => (
+
+ ),
+ });
+ }
+ try {
+ // Trigger the mutation
+ setDeleteIsLoading(true);
+ await deleteApi(bannerId)
+ .then((response) => {
+ // Handle the response here
+
+ if (response?.data?.statusCode === 200) {
+ setDeleteIsLoading(false);
+ setDeleteAlert(false);
+ toast({
+ render: () => (
+
+ ),
+ });
+ }
+ })
+ .catch((error) => {
+ // // console.error("Error creating community:", error);
+ setDeleteIsLoading(false);
+ setDeleteAlert(false);
+ });
+ } catch (error) {
+ // Handle errors
+ // // console.error("Error deleting community:", error);
+ }
+ };
+
+ const handleUpdateStatus = async (id, status) => {
+ if (status) {
+ return toast({
+ render: () => (
+
+ ),
+ });
+ } else {
+ try {
+ // Trigger the mutation
+ await statusUpdateApi({ id })
+ .then((response) => {
+ if (response?.data?.statusCode === 201) {
+ toast({
+ render: () => ,
+ });
+ }
+ })
+ .catch((error) => {
+ });
+ } catch (error) {
+ // Handle errors
+ // // console.error("Error updating community status:", error);
+ }
+ }
+ };
+
+ // ====================================================[Table Filter]================================================================
+ const filteredData = dataArray?.data?.data?.rows?.filter((item) => {
+ // Filter by name (case insensitive)
+ const name = item.Heading;
+ const searchLower = searchTerm.toLowerCase();
+ const nameMatches = name.toLowerCase().includes(searchLower);
+
+ const status = item.status;
+
+ const statusMatches =
+ statusFilter === "all" ||
+ (statusFilter === "active" && status === true) ||
+ (statusFilter === "inactive" && status === false);
+
+ return nameMatches && statusMatches;
+ });
+
+ // ====================================================[Table Setup]================================================================
+ const tableHeadRow = [
+ "Banner image",
+ "Heading",
+ "Sub heading",
+ "Button title",
+ "Active",
+ "Created At",
+ ];
+
+ const extractedArray = filteredData?.map((item, index) => {
+ return {
+ "Banner image": (
+
+ ),
+ Heading: (
+
+
+
+ {item?.Heading}
+
+
+
+ ),
+ "Sub heading": (
+
+
+
+ {item?.sub_heading}
+
+
+
+ ),
+ "Button title":
+
+ {item?.CTO_button_title},
+ Active: (
+ handleUpdateStatus(item.id, item?.status)}
+ isChecked={item.status}
+ // disabled={item.status}
+ />
+ ),
+ "Created At": (
+
+
+ {formatDate(item?.createdAt)}
+
+
+
+ ),
+ };
+ });
+
+ // ====================================================[Pagination Setup]================================================================
+ const paginationPrev = () => {
+ if (currentPage > 1) {
+ setCurrentPage(currentPage - 1);
+ updateDisplayRange(currentPage - 1);
+ }
+ };
+
+ const paginationNext = () => {
+ const totalPages = Math.ceil(community?.data?.data?.totalItems / pageSize);
+ if (currentPage < totalPages) {
+ setCurrentPage(currentPage + 1);
+ updateDisplayRange(currentPage + 1);
+ }
+ };
+ const updateDisplayRange = (page) => {
+ const start = (page - 1) * pageSize + 1;
+ const end = Math.min(
+ start + pageSize - 1,
+ community?.data?.data?.totalItems
+ );
+ setDisplayRange({ start, end });
+ };
+
+ return (
+
+
+ {/* ====================================================[ Top bar ]================================================================ */}
+
+
+
+ setSearchTerm(e.target.value)}
+ />
+
+
+
+ {/* */}
+
+ {/*
+
+
+ {displayRange.start} - {displayRange.end} of{" "}
+ {dataArray?.data?.data?.totalItems}
+
+
+ */}
+
+
+
+
+ {/* ====================================================[ Table ]================================================================ */}
+
+ {/* ====================================================[ Alert ]================================================================ */}
+ setDeleteAlert(false)}
+ isOpen={deleteAlert}
+ alertHandler={() => handleDelete(actionId, actionStatus)}
+ message={"Are you sure you want to delete member?"}
+ isLoading={deleteIsLoading}
+ />
+
+ );
+};
+
+export default BannerCommunity;
diff --git a/src/Components/Banner/BannerView.jsx b/src/Components/Banner/BannerView.jsx
new file mode 100644
index 0000000..6c80bd2
--- /dev/null
+++ b/src/Components/Banner/BannerView.jsx
@@ -0,0 +1,165 @@
+import React from "react";
+import { useParams } from "react-router-dom";
+import { useGetBuildBannerByIdQuery } from "../../Services/api.service";
+import { OPACITY_ON_LOAD } from "../../Layout/animations";
+import FullscreenLoaders from "../../Components/Loaders/FullscreenLoaders";
+import { formatDate } from "../../Components/Functions/UTCConvertor";
+import Header from "../../Components/Header";
+import {
+ Box,
+ Button,
+ Divider,
+ Image,
+ StackDivider,
+ Tag,
+ Text,
+ VStack,
+} from "@chakra-ui/react";
+import BannerMainCard from "./BannerMainCard";
+const API_URL = import.meta.env.VITE_API_BASE_URL;
+
+const BannerView = ({data, isLoading, editLink, center}) => {
+ const banner = data?.data;
+
+ return isLoading ? (
+
+ ) : (
+
+
+
+
+
+ Banners Info
+
+
+ Select the platform for which you need to create this campaign.
+
+
+
+
+
+ Display banner
+
+
+ Below is the profile that will be displayed on the community page.
+
+
+
+ {/* */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Status
+
+ {data?.data?.status ? (
+
+ Active
+
+ ) : (
+
+ Inactive
+
+ )}
+
+
+
+
+ Heading
+
+
+ {banner?.Heading}
+
+
+
+
+
+ Sub heading
+
+
+ {banner?.sub_heading}
+
+
+
+
+
+ Button title
+
+
+ {banner?.CTO_button_title}
+
+
+
+
+
+ Button link
+
+
+ {banner?.CTO_button_link}
+
+
+
+
+
+ Created At
+
+
+ {formatDate(banner?.createdAt)}
+
+
+
+
+
+ Updated At
+
+
+ {formatDate(banner?.updatedAt)}
+
+
+
+
+
+
+
+ );
+};
+
+export default BannerView;
diff --git a/src/Components/BannerStack.jsx b/src/Components/BannerStack.jsx
new file mode 100644
index 0000000..a4d1744
--- /dev/null
+++ b/src/Components/BannerStack.jsx
@@ -0,0 +1,84 @@
+import { ArrowForwardIcon } from "@chakra-ui/icons";
+import { Box, Button, HStack, Skeleton, Text } from "@chakra-ui/react";
+import React from "react";
+import { Link } from "react-router-dom";
+import CommunityBannerCard from "../Pages/Community/CommunityBannerCard";
+
+const BannerStack = ({
+ stackTitle,
+ viewAllLink,
+ bannerIsLoading,
+ bannerArray,
+ viewBannerLink,
+}) => {
+
+
+ return (
+
+
+
+ {stackTitle}
+
+
+
+ }
+ colorScheme={"purple"}
+ size="sm"
+ >
+ View all
+
+
+
+
+
+ {bannerIsLoading
+ ? Array.from({ length: 3 }).map((_, index) => (
+
+
+
+ ))
+ : bannerArray?.map(
+ ({
+ id,
+ CTO_button_title,
+ banner_image,
+ Heading,
+ createdAt,
+ sub_heading,
+ status
+ }) => (
+
+
+
+ )
+ )}
+
+
+ );
+};
+
+export default BannerStack;
diff --git a/src/Components/Buttons/PrimaryButton.jsx b/src/Components/Buttons/PrimaryButton.jsx
new file mode 100644
index 0000000..796bc16
--- /dev/null
+++ b/src/Components/Buttons/PrimaryButton.jsx
@@ -0,0 +1,30 @@
+import { Button } from '@chakra-ui/button'
+import React from 'react'
+
+const PrimaryButton = ({title, onClick, ...props}) => {
+ return (
+
+
+ )
+}
+
+export default PrimaryButton
\ No newline at end of file
diff --git a/src/Components/Buttons/SecondaryButton.jsx b/src/Components/Buttons/SecondaryButton.jsx
new file mode 100644
index 0000000..3068046
--- /dev/null
+++ b/src/Components/Buttons/SecondaryButton.jsx
@@ -0,0 +1,21 @@
+import { Button } from '@chakra-ui/button'
+import React from 'react'
+
+const SecondaryButton = ({title, onClick, ...props}) => {
+ return (
+
+
+ )
+}
+
+export default SecondaryButton
\ No newline at end of file
diff --git a/src/Components/ChipSelector/ChipSelector.css b/src/Components/ChipSelector/ChipSelector.css
new file mode 100644
index 0000000..4b2247d
--- /dev/null
+++ b/src/Components/ChipSelector/ChipSelector.css
@@ -0,0 +1,60 @@
+
+label {
+ display: inline-block;
+ margin-bottom: 0.5rem;
+ font-weight: bold;
+ }
+
+ .input-container {
+ display: flex;
+ flex-wrap: wrap;
+ row-gap: 1rem;
+ align-items: center;
+ border: 1px solid rgb(212, 206, 206);
+ border-radius: 0.2rem;
+ }
+
+
+
+ .chips {
+ list-style: none;
+ display: flex;
+ }
+
+ .chip {
+ background-color: #cfe1ff;
+ display: flex;
+ align-items: center;
+ padding: 0.2rem;
+ border-radius: 0.5rem;
+ margin-right: 1rem;
+ }
+
+ .chip span {
+ color: #013380;
+ }
+
+ .chip svg {
+ font-size: 2.5rem;
+ fill: #3270d1;
+ cursor: pointer;
+ transition: fill 0.2s;
+ }
+
+ .chip svg:hover {
+ fill: #2857a3;
+ transition: all 0.2s;
+ }
+
+ input {
+ font-size: 1.6rem;
+ background: transparent;
+ border: none;
+ outline: none;
+ }
+
+ .error-message {
+ margin-top: 1rem;
+ color: red;
+ }
+
\ No newline at end of file
diff --git a/src/Components/ChipSelector/ChipSelector.jsx b/src/Components/ChipSelector/ChipSelector.jsx
new file mode 100644
index 0000000..d969d75
--- /dev/null
+++ b/src/Components/ChipSelector/ChipSelector.jsx
@@ -0,0 +1,68 @@
+import React, { useState } from "react";
+import { Box, FormHelperText, Input, Tag, TagCloseButton, TagLabel } from "@chakra-ui/react";
+import { TiWarning } from "react-icons/ti";
+
+const ChipSelector = ({chips, setChips, type}) => {
+ const [text, setText] = useState("");
+ const [validationError, setValidationError] = useState("");
+
+ function removeChip(chipToRemove) {
+ const updatedChips = chips.filter((chip, index) => index !== chipToRemove);
+ setChips(updatedChips);
+ }
+
+
+ function handlePressEnter(e) {
+ if (e.key === "Enter") e.preventDefault();
+ if (e.key !== "Enter" || !text) return;
+ if (chips.includes(text)) {
+ return setValidationError("Cannot add the same input more than once");
+ }
+ setChips((prevState) => [...prevState, text]);
+ setText("");
+ setValidationError("");
+ }
+
+ return (
+
+
+ setText(e.target.value)}
+ onKeyDown={handlePressEnter}
+ />
+ {validationError && {validationError}}
+
+
+ {type ? "Please select and press enter to add date." : "Please type and press enter to add tags."}
+
+
+
+ {chips?.map((chip, i) => (
+
+ {chip}
+ removeChip(i)} />
+
+ ))}
+
+
+
+ );
+};
+
+export default ChipSelector;
diff --git a/src/Components/CommunityBanner.jsx b/src/Components/CommunityBanner.jsx
new file mode 100644
index 0000000..f1d044e
--- /dev/null
+++ b/src/Components/CommunityBanner.jsx
@@ -0,0 +1,153 @@
+import { Box, Button, Container, Text } from "@chakra-ui/react";
+import banner from "../assets/communityBanner.webp";
+
+const BannerContent = [
+ {
+ heading1: `Welcome To The`,
+ heading2: `Rubix Community`,
+ },
+ {
+ subheading: `This is a space for enterprises, dApp developers, stakeholders
+ and blockchain advocates to aggregate resources and ideas to make a difference
+ through our green blockchain technology.`,
+ },
+ {
+ btn: `Explore our community`,
+ },
+];
+
+const CommunityBanner = () => {
+ return (
+
+
+
+
+
+ {BannerContent[0].heading1}
+ {" "}
+
+ {BannerContent[0].heading2}
+
+
+
+ {BannerContent[1].subheading}
+
+
+
+
+
+
+ );
+};
+
+export default CommunityBanner;
diff --git a/src/Components/CreateIOld.jsx b/src/Components/CreateIOld.jsx
new file mode 100644
index 0000000..5728acc
--- /dev/null
+++ b/src/Components/CreateIOld.jsx
@@ -0,0 +1,777 @@
+import React, { useContext, useEffect, useState } from "react";
+import { OPACITY_ON_LOAD } from "../../Layout/animations";
+import {
+ Box,
+ Divider,
+ FormControl,
+ FormLabel,
+ Heading,
+ Input,
+ Select,
+ Textarea,
+ Button,
+ Text,
+ Image,
+ Tabs,
+ TabList,
+ Tab,
+ TabPanel,
+ TabPanels,
+ Tooltip,
+ Switch,
+ useDisclosure,
+} from "@chakra-ui/react";
+import { useForm, Controller } from "react-hook-form";
+import { yupResolver } from "@hookform/resolvers/yup";
+import * as yup from "yup";
+import {
+ AddIcon,
+ CloseIcon,
+ DeleteIcon,
+ EditIcon,
+ ViewIcon,
+ WarningTwoIcon,
+} from "@chakra-ui/icons";
+import { TiWarning } from "react-icons/ti";
+import GlobalStateContext from "../../Contexts/GlobalStateContext";
+import { useNavigate } from "react-router-dom";
+import FormField from "../../Components/FormField";
+import { v4 as uuidv4 } from "uuid";
+import AddIOCharges from "./AddIOCharges";
+import FormInputMain from "../../Components/FormInputMain";
+import DataTable from "../../Components/DataTable/DataTable";
+import { debounce } from "../Master/Sponser/AddSponser";
+import CustomAlertDialog from "../../Components/CustomAlertDialog";
+import { formatDate } from "../../Components/Functions/UTCConvertor";
+import InvestmentDocuments from "./InvestmentDocuments";
+
+const schema = yup.object().shape({
+ ioName: yup.string().required("Arabic name is required"),
+ ioNameArabic: yup.string().required("Investment Object name is required"),
+ discription: yup.string().required("Sponser name is required"),
+ discriptionArabic: yup.string().required("Arabic name is required"),
+ typeName: yup.string().required("Investment Object name is required"),
+ typeNameArabic: yup.string().required("Sponser name is required"),
+ sponserName: yup.string().required("Arabic name is required"),
+ sponserNameArabic: yup
+ .string()
+ .required("Investment Object name is required"),
+ holdingPeriod: yup.string().required("Sponser name is required"),
+ ioStartus: yup.string().required("Investment Object name is required"),
+ ioStartusArabic: yup.string().required("Sponser name is required"),
+ goalAmount: yup.string().required("Arabic name is required"),
+ closingDate: yup.string().required("Investment Object name is required"),
+ minInvestment: yup.string().required("Sponser name is required"),
+ maxInvestment: yup.string().required("Arabic name is required"),
+ expectedReturn: yup.string().required("Investment Object name is required"),
+ originalValue: yup.string().required("Sponser name is required"),
+ keyname: yup.string().required("Arabic name is required"),
+ keyNameArabic: yup.string().required("Investment Object name is required"),
+ keyDescription: yup.string().required("Sponser name is required"),
+ keyDescriptionArabic: yup.string().required("Sponser name is required"),
+ docType: yup.string().required("Sponser name is required"),
+
+ destributedAmount: yup
+ .number()
+ .required("Distributed Amount is required")
+ .positive("Must be a positive number"),
+ year: yup.string().required("Year is required"),
+ tenure: yup
+ .number()
+ .required("Tenure is required")
+ .positive("Must be a positive number"),
+ annualReturn: yup
+ .number()
+ .required("Annual Return is required")
+ .positive("Must be a positive number"),
+ miniInvest: yup
+ .number()
+ .required("Minimum Invest is required")
+ .positive("Must be a positive number"),
+ quaterly: yup.string().required("Quaterly is required"),
+ targetClose: yup.date().required("Target close date is required"),
+ annualyield: yup
+ .number()
+ .required("Annual Yield is required")
+ .positive("Must be a positive number"),
+ iconUpload: yup.mixed().required("Profile image is required"),
+ bannerImages: yup.mixed().required("Profile image is required"),
+ otherImage: yup.mixed().required("Profile image is required"),
+ docAttach: yup.mixed().required("Profile image is required"),
+ videos: yup.mixed().required("Profile image is required"),
+});
+
+const startYear = 2024;
+const endYear = 2124;
+const years = Array.from(
+ { length: endYear - startYear + 1 },
+ (_, i) => startYear + i
+).map((year) => ({ value: year, label: year }));
+
+const CreateIO = () => {
+ const navigate = useNavigate();
+ const { create, setCreate, sponser, setSponser, investment, setInvestment } =
+ useContext(GlobalStateContext);
+ const [bannerImageData, setBannerImageData] = useState(null);
+ const [otherImageData, setOtherImageData] = useState(null);
+ const [selectedBannerImageData, setSelectedBannerImageData] = useState(null);
+ const [selectedOtherImageData, setSelectedOtherImageData] = useState(null);
+ const [charges, setCharges] = useState([]);
+ const [totalCharge, setTotalCharge] = useState(0.0);
+ const [totalAmount, setTotalAmount] = useState(0.0);
+
+ const [searchTerm, setSearchTerm] = useState("");
+ const [isLoading, setIsLoading] = useState(true);
+ const [deleteAlert, setDeleteAlert] = useState(false);
+ const [actionId, setActionId] = useState(false);
+ const [mouseEntered, setMouseEntered] = useState(false);
+ const [mouseEnteredId, setMouseEnteredId] = useState("");
+
+ const {
+ control,
+ handleSubmit,
+ reset,
+ watch,
+ setValue,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(schema),
+ });
+
+ console.log(errors);
+
+ useEffect(() => {
+ // Simulate loading
+ const timer = setTimeout(() => {
+ setIsLoading(false);
+ }, 1500);
+
+ // Cleanup the timer on component unmount
+ return () => clearTimeout(timer);
+ }, []);
+
+ const tableHeadRow = [
+ "Sponsor name",
+ "Address",
+ "Mobile no",
+ "Created At",
+ "Action",
+ ];
+
+ const handleUpdateStatus = debounce((id) => {
+ setCreate((prevCreate) =>
+ prevCreate.map((create) =>
+ create.id === id ? { ...create, status: !create.status } : create
+ )
+ );
+ toast({
+ render: () => ,
+ });
+ }, 300);
+
+ const filteredData = create?.filter((item) => {
+ // Filter by name (case insensitive)
+ const name = item.sponserName;
+ const searchLower = searchTerm.toLowerCase();
+ const nameMatches = name.toLowerCase().includes(searchLower);
+
+ return nameMatches;
+ });
+
+ const handleDelete = () => {
+ const updatedCreate = create.filter((create) => create.id !== actionId);
+
+ setTimeout(() => {
+ setSponser(updatedCreate);
+ setDeleteAlert(false);
+ setIsLoading(false);
+ }, 100);
+ setIsLoading(true);
+ };
+
+ const extractedArray = filteredData?.map((item) => ({
+ id: item?.id,
+ "Sponsor name": (
+
+ "{item.sponserName}"
+
+ ),
+ Address: (
+
+
+ " {item.sponserAddress}"
+
+
+ ),
+ "Mobile no": (
+
+
+ "{item.mobileNo}"
+
+
+ ),
+
+ "Created At": (
+
+
+ {formatDate(item.createdAt)}
+
+
+ ),
+ Action: ,
+ }));
+
+
+ const destributedAmount = Number(watch().destributedAmount) || 0;
+
+ useEffect(() => {
+ const calculateTotalCharge = () => {
+ const totalChargeValue = charges.reduce(
+ (acc, { value }) => acc + Number(value),
+ 0
+ );
+ setTotalCharge(totalChargeValue);
+ };
+
+ const calculateTotalAmount = () => {
+ const totalChargeValue = charges.reduce(
+ (acc, { value }) => acc + Number(value),
+ 0
+ );
+ setTotalAmount(destributedAmount + totalChargeValue);
+ };
+
+ calculateTotalCharge();
+ calculateTotalAmount();
+ }, [charges, destributedAmount]);
+
+ const onSubmit = (data) => {
+ // setValue("banner_image", selectedBannerImageData);
+ data.banner_image = selectedBannerImageData;
+ const updatedData = { ...data, status: "Available" };
+ setInvestment([...investment, updatedData]);
+ navigate("/view-io");
+ reset();
+ };
+
+ // Extract options for the select input
+ const createOptions = create.map((item) => ({
+ value: item.sponserName,
+ label: item.sponserName,
+ }));
+
+ const handleBannerImageChange = (e) => {
+ const file = e.target.files[0];
+ setBannerImageData(file);
+ if (file) {
+ const reader = new FileReader();
+ reader.onloadend = () => {
+ setSelectedBannerImageData(reader.result);
+ };
+ reader.readAsDataURL(file);
+ }
+ };
+
+ const { isOpen, onOpen, onClose } = useDisclosure();
+ const firstField = React.useRef();
+
+ // Handler for file input
+ const handleOtherImageChange = (e) => {
+ const files = Array.from(e.target.files);
+ const newImageData = [...(otherImageData || []), ...files]; // Ensure otherImageData is an array
+
+ setOtherImageData(newImageData);
+
+ const readers = files.map((file) => {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onloadend = () => {
+ resolve(reader.result);
+ };
+ reader.onerror = reject;
+ reader.readAsDataURL(file);
+ });
+ });
+
+ Promise.all(readers)
+ .then((results) => {
+ setSelectedOtherImageData([
+ ...(selectedOtherImageData || []),
+ ...results,
+ ]); // Ensure selectedOtherImageData is an array
+ })
+ .catch((error) => {
+ console.error("Error reading files:", error);
+ });
+ };
+ // Function to remove a specific image
+ const removeOtherImage = (index) => {
+ const newImageData = otherImageData.filter((_, i) => i !== index);
+ const newSelectedImageData = selectedOtherImageData.filter(
+ (_, i) => i !== index
+ );
+
+ setOtherImageData(newImageData);
+ setSelectedOtherImageData(newSelectedImageData);
+ };
+
+ const formFields = [
+ {
+ label: "IO Name (English)",
+ placeHolder: " ",
+ name: "ioName",
+ type: "text",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ },
+ {
+ label: "IO Name (Arabic)",
+ placeHolder: " ",
+ name: "ioNameArabic",
+ type: "text",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ },
+ {
+ label: "Description (English)",
+ placeHolder: " ",
+ name: "discription",
+ type: "textarea",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ },
+ {
+ label: "Description (Arabic)",
+ placeHolder: " ",
+ name: "discriptionArabic",
+ type: "textarea",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ },
+ {
+ label: "Investment Type (English)",
+ placeHolder: " ",
+ name: "typeName",
+ type: "select",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ options: [
+ {
+ label: "option 1",
+ value: "option 1",
+ },
+ {
+ label: "option 2",
+ value: "option 2",
+ },
+ {
+ label: "option 3",
+ value: "option 3",
+ },
+ {
+ label: "option 4",
+ value: "option 4",
+ },
+ ],
+ },
+ {
+ label: "Investment Type (Arabic)",
+ placeHolder: " ",
+ name: "typeNameArabic",
+ type: "select",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ options: [
+ {
+ label: "option 1",
+ value: "option 1",
+ },
+ {
+ label: "option 2",
+ value: "option 2",
+ },
+ {
+ label: "option 3",
+ value: "option 3",
+ },
+ {
+ label: "option 4",
+ value: "option 4",
+ },
+ ],
+ },
+ {
+ label: "Sponsor Name (English)",
+ placeHolder: " ",
+ name: "sponserName",
+ type: "text",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ },
+ {
+ label: "Goal Amount (English)",
+ placeHolder: " ",
+ name: "goalAmount",
+ type: "Number",
+ isRequired: true,
+ section: " ",
+ width: "49%",
+ },
+ {
+ label: "Minimum Investment Amount (English)",
+ placeHolder: " ",
+ name: "minInvestment",
+ type: "number",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Maximum Investment Amount (English)",
+ placeHolder: " ",
+ name: "maxInvestment",
+ type: "number",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Holding Period (English)",
+ placeHolder: " ",
+ name: "holdingPeriod",
+ type: "number",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Expected Return Estimated (English)",
+ placeHolder: " ",
+ name: "expectedReturn",
+ type: "number",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Closing Date (English)",
+ placeHolder: " ",
+ name: "closingDate",
+ type: "date",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "IO Status (English)",
+ placeHolder: " ",
+ name: "minInvestment",
+ type: "text",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ ];
+
+ const keyMerits = [
+ {
+ label: "Name (English)",
+ placeHolder: " ",
+ name: "keyname",
+ type: "text",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Name (Arabic)",
+ placeHolder: " ",
+ name: "keyNameArabic",
+ type: "text",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Icon",
+ placeHolder: " ",
+ name: "iconUpload",
+ type: "fileNormal",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Description (English)",
+ placeHolder: " ",
+ name: "keyDescription",
+ type: "textarea",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Description (Arabic)",
+ placeHolder: " ",
+ name: "keyDescriptionArabic",
+ type: "textarea",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ ];
+
+ const images = [
+ {
+ label: "Banner Images ",
+ placeHolder: " ",
+ name: "bannerImages",
+ type: "fileNormal",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+
+ {
+ label: "Other Images",
+ placeHolder: " ",
+ name: "otherImage",
+ type: "fileNormal",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ ];
+
+ const documents = [
+ {
+ label: "Type",
+ placeHolder: " ",
+ name: "docType",
+ type: "text",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ {
+ label: "Attachment",
+ placeHolder: " ",
+ name: "type",
+ type: "docAttach",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ ];
+
+ const Videos = [
+ {
+ label: "Videos",
+ placeHolder: " ",
+ name: "videos",
+ type: "fileNormal",
+ isRequired: true,
+ section: " ",
+ width: "32.3%",
+ },
+ ];
+
+ const groupedFields = formFields.reduce((groups, field) => {
+ const { section } = field;
+ if (!groups[section]) {
+ groups[section] = [];
+ }
+ groups[section].push(field);
+ return groups;
+ }, {});
+
+ const groupedFieldsTwo = keyMerits.reduce((groups, field) => {
+ const { section } = field;
+ if (!groups[section]) {
+ groups[section] = [];
+ }
+ groups[section].push(field);
+ return groups;
+ }, {});
+
+ const groupedFieldsThree = images.reduce((groups, field) => {
+ const { section } = field;
+ if (!groups[section]) {
+ groups[section] = [];
+ }
+ groups[section].push(field);
+ return groups;
+ }, {});
+
+ const groupedFieldsFour = documents.reduce((groups, field) => {
+ const { section } = field;
+ if (!groups[section]) {
+ groups[section] = [];
+ }
+ groups[section].push(field);
+ return groups;
+ }, {});
+
+ const groupedFieldsFive = Videos.reduce((groups, field) => {
+ const { section } = field;
+ if (!groups[section]) {
+ groups[section] = [];
+ }
+ groups[section].push(field);
+ return groups;
+ }, {});
+
+ return (
+
+
+
+
+ IO Details
+
+
+ Investment Documents
+
+
+ Key Merits
+
+
+ IO artifacts
+
+
+ Investors
+
+
+ IO Cash detail
+
+
+ IO NAV detail
+
+
+ Distribution
+
+
+
+
+
+
+
+
+
+ setSearchTerm(e.target.value)}
+ />
+ } onClick={onOpen}
+ size={"sm"}
+ // width={"44.5%"}
+ fontSize={'xs'}
+ rounded={"sm"}
+ colorScheme='green'
+ >
+ Add
+
+
+
+
+ setDeleteAlert(false)}
+ isOpen={deleteAlert}
+ message={"Are you sure you want to delete sponers?"}
+ alertHandler={handleDelete}
+ isLoading={isLoading}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CreateIO;
diff --git a/src/Components/CurrencyInput.jsx b/src/Components/CurrencyInput.jsx
new file mode 100644
index 0000000..573c341
--- /dev/null
+++ b/src/Components/CurrencyInput.jsx
@@ -0,0 +1,90 @@
+import React, { forwardRef } from 'react';
+import { Input } from "@chakra-ui/react";
+
+export const formatCurrency = (value) => {
+ if (value === undefined || value === null) return '';
+ const [integer, decimal] = String(value).split('.');
+ const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
+ return decimal !== undefined ? `${formattedInteger}.${decimal}` : formattedInteger;
+};
+const CurrencyInput = forwardRef(({ value, onChange, ...props }, ref) => {
+
+ const handleChange = (event) => {
+ let { value } = event?.target;
+
+ // Remove non-numeric characters except decimal point
+ value = value.replace(/[^0-9.]/g, '');
+
+ // Ensure only one decimal point
+ const parts = value.split('.');
+ if (parts.length > 2) {
+ value = parts[0] + '.' + parts.slice(1).join('');
+ }
+
+ // Restrict to two decimal places
+ if (parts[1]?.length > 2) {
+ value = parts[0] + '.' + parts[1].slice(0, 2);
+ }
+
+ onChange(value); // Pass the raw value to parent
+ };
+
+ return (
+
+ );
+});
+
+export default CurrencyInput;
+
+
+
+
+// import React, { forwardRef } from 'react';
+// import { Input } from "@chakra-ui/react";
+
+// export const formatCurrency = (value) => {
+// if (value === undefined || value === null) return ''; // Handle undefined or null values
+// const [integer, decimal] = String(value).split('.'); // Convert value to string before splitting
+// const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
+// return decimal ? `${formattedInteger}.${decimal}` : formattedInteger;
+// };
+
+// const CurrencyInput = forwardRef(({ value, onChange, ...props }, ref) => {
+
+// const handleChange = (event) => {
+// let { value } = event?.target;
+
+// // Remove non-numeric characters except decimal point
+// value = value?.replace(/[^0-9.]/g, '');
+
+// // Ensure only one decimal point and restrict to two decimal places
+// const parts = value?.split('.');
+// if (parts.length > 2) {
+// value = parts[0] + '.' + parts?.slice(1)?.join('');
+// }
+
+// if (parts[1]?.length > 2) {
+// value = parts[0] + '.' + parts[1]?.slice(0, 2);
+// }
+
+// onChange(value); // Pass the raw value to parent or use it directly
+// };
+
+// return (
+//
+// );
+// });
+
+// export default CurrencyInput;
diff --git a/src/Components/CustomAlertDialog.jsx b/src/Components/CustomAlertDialog.jsx
new file mode 100644
index 0000000..a54e383
--- /dev/null
+++ b/src/Components/CustomAlertDialog.jsx
@@ -0,0 +1,47 @@
+import { AlertDialog, AlertDialogBody, AlertDialogCloseButton, AlertDialogContent, AlertDialogFooter, AlertDialogOverlay, Button, useDisclosure } from "@chakra-ui/react";
+import React, { useRef } from "react";
+
+const CustomAlertDialog = ({ isOpen, onOpen, onClose, alertHandler, isLoading, message }) => {
+ // const cancelRef = useRef();
+
+ return (
+
+
+
+
+
+
+ {message}
+
+
+
+
+
+
+
+ );
+};
+
+export default CustomAlertDialog;
diff --git a/src/Components/CutomBreadcrumb.jsx b/src/Components/CutomBreadcrumb.jsx
new file mode 100644
index 0000000..52934b8
--- /dev/null
+++ b/src/Components/CutomBreadcrumb.jsx
@@ -0,0 +1,106 @@
+import React from "react";
+import {
+ Box,
+ Breadcrumb,
+ BreadcrumbItem,
+ BreadcrumbLink,
+ Text,
+ Button,
+} from "@chakra-ui/react";
+import { Link, useLocation } from "react-router-dom";
+import { nav } from "../Routes/Nav";
+import { MinusIcon } from "@chakra-ui/icons";
+
+const CustomBreadcrumb = () => {
+ const { pathname } = useLocation();
+
+ // Remove leading slash and split path into parts
+ const pathParts = pathname.replace(/^\//, "").split("/");
+
+ // Find the current menu item based on the provided path
+ const findMenuItem = (path) => {
+ let menuItem = null;
+ nav.forEach((menu) => {
+ if (menu.submenu) {
+ menu.submenu.forEach((item) => {
+ if (item.path === path) {
+ menuItem = item;
+ }
+ });
+ }
+ });
+ return menuItem;
+ };
+
+ // Generate breadcrumb items based on the current path
+ const generateBreadcrumbs = (pathParts) => {
+ const breadcrumbs = [];
+ let currentPath = "";
+ pathParts.forEach((part, index) => {
+ currentPath += `/${part}`;
+ const menuItem = findMenuItem(currentPath);
+ if (menuItem) {
+ breadcrumbs.push({ path: currentPath, title: menuItem.title });
+ } else {
+ // For nested paths without direct match, create a custom breadcrumb title
+ const customTitle = part.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
+ breadcrumbs.push({ path: currentPath, title: customTitle });
+ }
+ });
+ return breadcrumbs;
+ };
+
+ const breadcrumbs = generateBreadcrumbs(pathParts);
+
+ return (
+
+ {" "}
+ {breadcrumbs.map((item, index) => (
+
+
+
+ {/* */}
+ -
+
+
+
+
+ ))}
+
+ );
+};
+
+export default CustomBreadcrumb;
diff --git a/src/Components/DataTable/DataTable.jsx b/src/Components/DataTable/DataTable.jsx
new file mode 100644
index 0000000..752a8bb
--- /dev/null
+++ b/src/Components/DataTable/DataTable.jsx
@@ -0,0 +1,157 @@
+import React, { useContext, useState } from "react";
+import {
+ Table,
+ TableContainer,
+ Tbody,
+ Td,
+ Th,
+ Thead,
+ Tr,
+ Skeleton,
+ TableCaption,
+ Box,
+} from "@chakra-ui/react";
+import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";
+import EmptySearchList from "../EmptySearchList";
+import { useNavigate } from "react-router-dom";
+
+import GlobalStateContext from "../../Contexts/GlobalStateContext";
+
+const DataTable = ({
+ data,
+ setData,
+ isLoading,
+ tableHeadRow,
+ tableHeadRowTwo,
+ emptyMessage,
+ centered,
+ setMouseEntered,
+ setMouseEnteredId,
+ caption,
+ isDraggable
+}) => {
+ const navigate = useNavigate();
+ const { slideFromRight } = useContext(GlobalStateContext);
+ if (isLoading) {
+ return (
+
+ {Array.from({ length: 10 }).map((_, index) => (
+
+ ))}
+
+ );
+ }
+
+
+
+ const handleDragEnd = (result) => {
+ if (!result.destination) return;
+ const reorderedItems = Array.from(data);
+ const [removed] = reorderedItems.splice(result.source.index, 1);
+ reorderedItems.splice(result.destination.index, 0, removed);
+ setData(reorderedItems)
+ // console.log("New Order:", reorderedItems.map((item, index) => ({ index, item })));
+ };
+
+ return (
+
+ {data?.length === 0 ? (
+
+ ) : (
+
+
+ {(provided) => (
+ <>
+ {/* {caption} */}
+
+ {caption}
+
+
+ {tableHeadRow.map((heading, index) => (
+ |
+ {heading}
+ |
+ ))}
+
+
+
+ {data?.map((item, index) => (
+ item.id && isDraggable ? (
+
+ {(provided, snapshot) => (
+
+ {tableHeadRow.map((heading, i) => (
+ |
+
+ {item[heading]}
+
+ |
+ ))}
+
+ )}
+
+ ) : (
+
+ {tableHeadRow.map((heading, i) => (
+ |
+
+ {item[heading]}
+
+ |
+ ))}
+
+ )
+ ))}
+ {provided.placeholder}
+
+
+ >
+ )}
+
+
+ )}
+
+ );
+};
+
+export default DataTable;
diff --git a/src/Components/DataTable/NormalTable.jsx b/src/Components/DataTable/NormalTable.jsx
new file mode 100644
index 0000000..97abfe4
--- /dev/null
+++ b/src/Components/DataTable/NormalTable.jsx
@@ -0,0 +1,115 @@
+import React from "react";
+import {
+ Table,
+ TableContainer,
+ Tbody,
+ Td,
+ Th,
+ Thead,
+ Tr,
+ Skeleton,
+ TableCaption,
+ Tfoot,
+} from "@chakra-ui/react";
+import EmptySearchList from "../EmptySearchList";
+import { TABLE_PAGINATION } from "../../Constants/Paginations";
+
+const DataTable = ({
+ data,
+ isLoading,
+ tableHeadRow,
+ emptyMessage,
+ centered,
+ total,
+}) => {
+ console.log(data);
+
+ const columnWidth =
+ data && data[0]
+ ? `${(100 / Object.keys(data[0]).length).toFixed(2)}%`
+ : "auto";
+ return (
+
+ {data?.length === 0 ? (
+
+ ) : (
+
+
+ {total ? total : "Tanami v1.0.0"}
+
+
+
+ {tableHeadRow.map((heading, index) => (
+ |
+ {isLoading ? : heading}
+ {/* {heading} */}
+ |
+ ))}
+
+
+
+ {isLoading
+ ? Array.from({ length: TABLE_PAGINATION?.size }).map(
+ (_, index) => (
+
+ {tableHeadRow.map((_, i) => (
+ |
+
+ |
+ ))}
+
+ )
+ )
+ : data?.map((item, index) => (
+
+ {tableHeadRow.map((heading, i) => (
+ |
+ {item[heading]}
+ |
+ ))}
+
+ ))}
+
+
+ )}
+
+ );
+};
+
+export default DataTable;
diff --git a/src/Components/Doughnut/ApexDonut.jsx b/src/Components/Doughnut/ApexDonut.jsx
new file mode 100644
index 0000000..a3eb1e6
--- /dev/null
+++ b/src/Components/Doughnut/ApexDonut.jsx
@@ -0,0 +1,55 @@
+import React, { useState } from 'react';
+import ApexCharts from 'react-apexcharts';
+
+const ApexChart = ({ data }) => {
+
+ // Customize colors and series titles here
+ const [options] = useState({
+ chart: {
+ width: 600,
+ type: 'donut',
+ },
+ plotOptions: {
+ pie: {
+ startAngle: -90,
+ endAngle: 270,
+ donut: {
+ size: '45%' // Adjust the donut size here (percentage of chart size)
+ }
+ }
+ },
+ labels:data?.labels,
+ dataLabels: {
+ enabled: false
+ },
+ fill: {
+ type: 'gradient',
+ },
+ colors: data?.backgroundColor,
+ legend: {
+ show: false,
+ position: 'right',
+ labels: {
+ colors: ['#000'], // Customize the color of the legend labels
+ useSeriesColors: true
+ }
+ },
+ responsive: [{
+ breakpoint: 480,
+ options: {
+ chart: {
+ width: 500
+ },
+ legend: {
+ position: 'center'
+ }
+ }
+ }]
+ });
+
+ return (
+
+ );
+};
+
+export default ApexChart;
diff --git a/src/Components/Doughnut/ApexLine.jsx b/src/Components/Doughnut/ApexLine.jsx
new file mode 100644
index 0000000..8e27e25
--- /dev/null
+++ b/src/Components/Doughnut/ApexLine.jsx
@@ -0,0 +1,66 @@
+import React, { useState } from 'react';
+import ReactApexChart from 'react-apexcharts';
+
+function ApexLine() {
+ const [chartOptions, setChartOptions] = useState({
+ series: [{
+ name: 'Rate',
+ data: [45, 23, 70, 65, 5, 34, 32],
+ gradientToColors: ['#004017'],
+ }],
+ options: {
+ chart: {
+ height: 350,
+ type: 'line',
+ toolbar: {
+ show: false // Hide the action icons
+ }
+ },
+ stroke: {
+ width: 5,
+ curve: 'smooth',
+ colors: ['#598369'], // Customize the line color here
+ },
+ markers: {
+ size: 6, // Size of markers
+ colors: ['#004118'], // Marker (dot) color
+ strokeColor: '#fff', // Stroke color of the marker
+ strokeWidth: 2
+ },
+ xaxis: {
+ type: 'category', // Change from 'datetime' to 'category'
+ categories: ['BH', 'KW', 'OM', 'QA', 'SA', 'UAE', 'IND'],
+ tickAmount: 7
+ },
+ title: {
+ text: 'Exchange Rate Currency', // Adjust the title if needed
+ align: 'left',
+ style: {
+ fontSize: '15px',
+ color: '#000',
+ fontWeight: 400
+ }
+ },
+ fill: {
+ type: 'gradient',
+ gradient: {
+ shade: 'dark',
+ gradientToColors: ['#004017'],
+ shadeIntensity: 4,
+ type: 'horizontal',
+ opacityFrom: 1,
+ opacityTo: 1,
+ stops: [0, 100] // Gradient stops
+ },
+ }
+ }
+ });
+
+ return (
+
+
+
+ );
+}
+
+export default ApexLine;
diff --git a/src/Components/Doughnut/DonutChart.jsx b/src/Components/Doughnut/DonutChart.jsx
new file mode 100644
index 0000000..57a9e74
--- /dev/null
+++ b/src/Components/Doughnut/DonutChart.jsx
@@ -0,0 +1,39 @@
+// DonutChart.jsx
+import React from 'react';
+import { Doughnut } from 'react-chartjs-2';
+import { Chart as ChartJS, Title, Tooltip, Legend, ArcElement } from 'chart.js';
+
+ChartJS.register(Title, Tooltip, Legend, ArcElement);
+
+const DonutChart = ({ data, width = 300, height = 250 }) => {
+ const chartData = {
+ labels: data.labels,
+ datasets: [
+ {
+ label: 'My Dataset',
+ data: data.values,
+ backgroundColor: [ '#3182ce', '#004118', '#D69E2E', '#E53E3E' ],
+ borderColor: ['#FFF'],
+ borderWidth: 2,
+ },
+ ],
+ };
+
+ const options = {
+ responsive: true,
+ plugins: {
+ legend: {
+ display: false, // Hide the legend
+ },
+ tooltip: {
+ callbacks: {
+ label: (tooltipItem) => `${tooltipItem.label}: ${tooltipItem.raw}`,
+ },
+ },
+ },
+ };
+
+ return ;
+};
+
+export default DonutChart;
diff --git a/src/Components/Doughnut/LineChart.jsx b/src/Components/Doughnut/LineChart.jsx
new file mode 100644
index 0000000..db31867
--- /dev/null
+++ b/src/Components/Doughnut/LineChart.jsx
@@ -0,0 +1,80 @@
+// LineChart.jsx
+import React from 'react';
+import { Line } from 'react-chartjs-2';
+import { Chart as ChartJS, Title, Tooltip, Legend, LineElement, PointElement, LinearScale, CategoryScale } from 'chart.js';
+
+// Register the necessary components
+ChartJS.register( Title, Tooltip, Legend, LineElement, PointElement, LinearScale, CategoryScale );
+
+// Sample options for the chart
+// Sample options for the chart
+const options = {
+ responsive: true,
+ plugins: {
+ legend: {
+ position: 'top',
+ },
+ tooltip: {
+ callbacks: {
+ label: function (context) {
+ let label = context.dataset.label || '';
+ if (label) {
+ label += ': ';
+ }
+ if (context.parsed.y !== null) {
+ label += `${context.parsed.y}`;
+ }
+ return label;
+ }
+ }
+ }
+ },
+ animation: {
+ tension: {
+ duration: 2000,
+ easing: 'linear',
+ from: 1,
+ to: 0,
+ loop: true
+ }
+ }
+};
+
+
+const Utils = {
+ numbers: ({ count, min, max }) => Array.from({ length: count }, () => Math.floor(Math.random() * (max - min + 1)) + min),
+ CHART_COLORS: {
+ red: 'rgba(255, 99, 132, 1)',
+ darkGreen: 'rgba(0, 65, 24, 1)' // Added color related to #004118
+ },
+ transparentize: (color, opacity) => {
+ // Use regex to replace the alpha value
+ return color.replace(/(rgba\(\d+, \d+, \d+, )\d+(\))/, `$1${opacity}$2`);
+ }
+};
+
+
+const LineChart = ({ width = 300, height = 250 }) => {
+ const data = {
+ labels: ['Bahrain', 'Kuwait', 'Oman', 'Qatar', 'Saudi Arabia', 'UAE', 'India'],
+ datasets: [
+ {
+ label: 'Exchange rate',
+ data: [45.9087, 23.8798, 99.9809, 65.8987, 65.8987, 34.9898, 32.8987],
+ borderColor: Utils.CHART_COLORS.darkGreen,
+ backgroundColor: Utils.transparentize(Utils.CHART_COLORS.darkGreen, 0.5),
+ pointStyle: 'rectRounded',
+ pointRadius: 10,
+ pointHoverRadius: 15
+ }
+ ]
+ };
+
+
+
+ return (
+
+ );
+};
+
+export default LineChart;
diff --git a/src/Components/DummyComponent.jsx b/src/Components/DummyComponent.jsx
new file mode 100644
index 0000000..56f9d5a
--- /dev/null
+++ b/src/Components/DummyComponent.jsx
@@ -0,0 +1,41 @@
+import { Box, Input } from "@chakra-ui/react";
+import React, { useRef, useState } from "react";
+import audioClick from "../assets/click-151673.mp3";
+
+const DummyComponent = () => {
+ // Define the state for the checkbox
+ const [isSwitchOn, setIsSwitchOn] = useState(false);
+
+ const audio = useRef();
+
+ // Function to toggle the switch
+ const handleToggle = () => {
+ setIsSwitchOn(!isSwitchOn);
+ if(audio.current){
+ audio.current.play();
+ }
+ };
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default DummyComponent;
diff --git a/src/Components/EmptySearchList.jsx b/src/Components/EmptySearchList.jsx
new file mode 100644
index 0000000..f78ab51
--- /dev/null
+++ b/src/Components/EmptySearchList.jsx
@@ -0,0 +1,23 @@
+import { Box, Image, Text } from "@chakra-ui/react"
+// import EmptySearchListImage from "../assets/empty_state_empty_folder.svg"
+import EmptySearchListImage from "../assets/EmptySearchList.png"
+
+const EmptySearchList = ({message}) => {
+ return (
+
+
+ {/* {message} */}
+ We do not have any records
+ {/* Posts of tanami will appear here. */}
+
+
+ )
+}
+
+export default EmptySearchList
\ No newline at end of file
diff --git a/src/Components/FormField.jsx b/src/Components/FormField.jsx
new file mode 100644
index 0000000..c18c14f
--- /dev/null
+++ b/src/Components/FormField.jsx
@@ -0,0 +1,549 @@
+import {
+ FormControl,
+ FormLabel,
+ Input,
+ Textarea,
+ Select,
+ Checkbox,
+ RadioGroup,
+ Radio,
+ Stack,
+ Box,
+ Heading,
+ FormHelperText,
+ Kbd,
+ Image,
+ Text,
+ Table,
+ Thead,
+ Tr,
+ Th,
+ Tbody,
+ Td,
+ InputGroup,
+ InputRightAddon,
+} from "@chakra-ui/react";
+import { Controller } from "react-hook-form";
+import { TiWarning } from "react-icons/ti";
+import { motion } from "framer-motion";
+import { AddIcon, CloseIcon } from "@chakra-ui/icons";
+import CurrencyInput from "./CurrencyInput";
+
+const today = new Date().toISOString().split("T")[0];
+
+export const formatDatee = (dateString) => {
+ const date = new Date(dateString);
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, "0"); // Months are zero-based
+ const day = String(date.getDate()).padStart(2, "0");
+ return `${year}-${month}-${day}`;
+};
+
+const defaultDate = "8/2/2024";
+
+// Format the default date as YYYY-MM-DD
+const formattedDate = formatDatee(defaultDate);
+
+const FormField = ({
+ label,
+ control,
+ name,
+ id,
+ type = "text",
+ options = [],
+ errors,
+ isRequired,
+ rules,
+ arabic,
+ placeHolder,
+ helperText,
+ multiple,
+ handleImageChange,
+ selectedImageData,
+ setSelectedImageData,
+ removeImage,
+ imageData,
+ width,
+ value,
+ handleInputChange,
+ align,
+ maxLength,
+ dateValue,
+ ...props
+}) => (
+
+
+ {label}
+
+ {
+ if (type === "select") {
+ return (
+
+ );
+ } else if (type === "textarea") {
+ return (
+
+ );
+ } else if (type === "checkbox") {
+ return (
+
+ {label}
+
+ );
+ } else if (type === "radio") {
+ return (
+
+
+ {options.map((option, index) => (
+
+ {option.label}
+
+ ))}
+
+
+ );
+ } else if (type === "file") {
+ return (
+ <>
+
+
+
+
+
+
+ Drop images here
+
+
+ or click to upload
+
+
+
+
+ {
+ field.onChange(e);
+ handleImageChange(e);
+ }}
+ onDrop={(e) => {
+ field.onChange(e);
+ handleImageChange(e);
+ }}
+ />
+
+
+ >
+ );
+ } else if (type === "fileNormal") {
+ return (
+ <>
+ {
+ field.onChange(e);
+ handleImageChange(e);
+ }}
+ />
+ {multiple && (
+
+ You can select multiple images using{" "}
+
+
+ ctrl
+ {" "}
+ + select
+
+
+ )}
+ {selectedImageData &&
+ (multiple ? (
+ selectedImageData?.length > 0 && (
+
+ {selectedImageData?.map((imageDataLink, index) => (
+
+
+
+ removeImage(index)}
+ bg={"#fff"}
+ className="link pointer"
+ p={1}
+ fontSize={"lg"}
+ color={"red"}
+ fontWeight={"500"}
+ rounded={"md"}
+ position={"absolute"}
+ bottom={0}
+ right={0}
+ />
+
+ {imageData[index]?.name}
+
+
+ {(imageData[index]?.size / (1024 * 1024)).toFixed(
+ 2
+ )}{" "}
+ mb
+
+
+
+ ))}
+ document.getElementById(id).click()}
+ rounded={"md"}
+ width={50}
+ height={50}
+ mt={26}
+ p={4}
+ cursor={"pointer"}
+ className="link"
+ />
+
+ )
+ ) : (
+
+
+
+ setSelectedImageData(null)}
+ className="link pointer"
+ p={1}
+ fontSize={"lg"}
+ color={"red"}
+ fontWeight={"500"}
+ rounded={"md"}
+ position={"absolute"}
+ top={1}
+ right={0}
+ />
+
+ {imageData?.name}
+
+
+ {(imageData?.size / (1024 * 1024)).toFixed(2)} mb
+
+
+
+ ))}
+ >
+ );
+ } else if (type === "table") {
+ return (
+
+ );
+ } else if(type === 'date'){
+ return (
+
+ );
+
+ }else if(type === 'number'){
+ return (
+
+ );} else{
+ return (
+
+ );
+ }
+ }}
+ />
+ {errors[name] && (
+
+ {errors[name].message}
+
+ )}
+ {helperText && (
+ {helperText}
+ )}
+ {type === "file" && (
+
+ Maximum limit of image is 10MB.
+
+ )}
+
+);
+
+export default FormField;
diff --git a/src/Components/FormFieldMainReference.jsx b/src/Components/FormFieldMainReference.jsx
new file mode 100644
index 0000000..978a41f
--- /dev/null
+++ b/src/Components/FormFieldMainReference.jsx
@@ -0,0 +1,256 @@
+import React, { useContext, useState } from "react";
+import { OPACITY_ON_LOAD } from "../../../Layout/animations";
+import {
+ Box,
+ Divider,
+ FormControl,
+ FormLabel,
+ Heading,
+ Input,
+ Select,
+ Textarea,
+ Button,
+ Text,
+} from "@chakra-ui/react";
+import { useForm, Controller } from "react-hook-form";
+import { yupResolver } from "@hookform/resolvers/yup";
+import * as yup from "yup";
+import { WarningTwoIcon } from "@chakra-ui/icons";
+import { TiWarning } from "react-icons/ti";
+import GlobalStateContext from "../../../Contexts/GlobalStateContext";
+import { useNavigate } from "react-router-dom";
+import FormField from "../../../Components/FormField";
+import { v4 as uuidv4 } from "uuid";
+import FormInputMain from "../../../Components/AddEditComponentMain";
+
+export const addSponser = yup.object().shape({
+ sponserName: yup.string().required("Sponsorer name is required"),
+ sponserNameArabic: yup.string().required("Sponsorer name is required"),
+ mobileNo: yup.string().required("Mobile no is required"),
+ sponserAddress: yup.string().required("Sponsorer address is required"),
+
+ bankName: yup.string().required("Bank Name is required"),
+ accountNumber: yup.string().required("Account Number is required"),
+ swiftCode: yup.string().required("SWIFT/BIC Code is required"),
+ bankEmail: yup.string().email("Invalid email format"),
+
+ // routingNumber: yup.string().required("Routing Number is required"),
+ // iban: yup.string().required("IBAN is required"),
+ // accountType: yup.string().required("Account Type is required"),
+ // bankPhoneNumber: yup.string().required("Bank Phone Number is required"),
+ // bankBranch: yup.string().required("Bank Branch is required"),
+ // branchAddress: yup.string().required("Branch Address is required"),
+ // ifscCode: yup.string().required("IFSC Code is required"),
+ // accountHolderName: yup.string().required("Account Holder's Name is required"),
+});
+
+
+
+export function debounce(func, delay) {
+ let debounceTimer;
+ return function(...args) {
+ clearTimeout(debounceTimer);
+ debounceTimer = setTimeout(() => func.apply(this, args), delay);
+ };
+}
+
+const AddSponser = () => {
+ const navigate = useNavigate();
+ const [bannerImageData, setBannerImageData] = useState(null);
+ const [selectedBannerImageData, setSelectedBannerImageData] = useState(null);
+
+
+ const [otherImageData, setOtherImageData] = useState(null);
+ const [selectedOtherImageData, setSelectedOtherImageData] = useState(null);
+
+
+
+ const { sponser, setSponser } = useContext(GlobalStateContext);
+ const {
+ control,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(addSponser),
+ });
+
+
+ const handleBannerImageChange = (e) => {
+ const file = e.target.files[0];
+ setBannerImageData(file);
+ if (file) {
+ const reader = new FileReader();
+ reader.onloadend = () => {
+ setSelectedBannerImageData(reader.result);
+ };
+ reader.readAsDataURL(file);
+ }
+ };
+
+
+ // Handler for file input
+ const handleOtherImageChange = (e) => {
+ const files = Array.from(e.target.files);
+ const newImageData = [...(otherImageData || []), ...files]; // Ensure otherImageData is an array
+
+ setOtherImageData(newImageData);
+
+ const readers = files.map((file) => {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onloadend = () => {
+ resolve(reader.result);
+ };
+ reader.onerror = reject;
+ reader.readAsDataURL(file);
+ });
+ });
+
+ Promise.all(readers)
+ .then((results) => {
+ setSelectedOtherImageData([
+ ...(selectedOtherImageData || []),
+ ...results,
+ ]); // Ensure selectedOtherImageData is an array
+ })
+ .catch((error) => {
+ console.error("Error reading files:", error);
+ });
+ };
+
+ // Function to remove a specific image
+ const removeOtherImage = (index) => {
+ const newImageData = otherImageData.filter((_, i) => i !== index);
+ const newSelectedImageData = selectedOtherImageData.filter(
+ (_, i) => i !== index
+ );
+
+ setOtherImageData(newImageData);
+ setSelectedOtherImageData(newSelectedImageData);
+ };
+
+
+ const formFields = [
+ {
+ label: "Sponsrorer name",
+ name: "sponserName",
+ type: "text",
+ isRequired: true,
+ section: "Personal Details",
+ },
+ {
+ label: "Sponsrorer Name (Arabic)",
+ name: "sponserNameArabic",
+ type: "text",
+ isRequired: true,
+ arabic: true,
+ section: "Personal Details",
+ },
+ {
+ label: "Mobile no",
+ name: "mobileNo",
+ type: "number",
+ isRequired: true,
+ section: "Personal Details",
+ },
+ {
+ label: "Sponsrorer address",
+ name: "sponserAddress",
+ type: "text",
+ isRequired: true,
+ section: "Personal Details",
+ },
+ {
+ label: "Bank name",
+ name: "bankName",
+ type: "text",
+ isRequired: true,
+ section: "Bank Details",
+ },
+ {
+ label: "Account Name",
+ name: "accountNumber",
+ type: "text",
+ isRequired: true,
+ section: "Bank Details",
+ },
+ {
+ label: "SWIFT/BIC Code",
+ name: "swiftCode",
+ type: "number",
+ isRequired: true,
+ section: "Bank Details",
+ },
+ {
+ label: "Account Email",
+ name: "bankEmail",
+ type: "text",
+ isRequired: true,
+ section: "Bank Details",
+ },
+ {
+ label: "Banner image",
+ name: "banner_image",
+ id:"banner_image",
+ type: "fileNormal",
+ isRequired: true,
+ section: "Bank Details",
+ multiple:false,
+ selectedImageData:selectedBannerImageData,
+ setSelectedImageData:setSelectedBannerImageData,
+ imageData:bannerImageData,
+ handleImageChange:handleBannerImageChange
+ },
+ {
+ label: "Multi Image",
+ name: "OtherImage",
+ id:"OtherImage",
+ type: "fileNormal",
+ isRequired: true,
+ section: "Bank Details",
+ multiple:true,
+ selectedImageData:selectedOtherImageData,
+ setSelectedImageData:setSelectedOtherImageData,
+ imageData:otherImageData,
+ handleImageChange:handleOtherImageChange,
+ removeImage:removeOtherImage
+ },
+ ];
+
+ const groupedFields = formFields.reduce((groups, field) => {
+ const { section } = field;
+ if (!groups[section]) {
+ groups[section] = [];
+ }
+ groups[section].push(field);
+ return groups;
+ }, {});
+
+
+ const onSubmit = (data) => {
+ setSponser([
+ {
+ ...data,
+ status: true,
+ id: uuidv4(),
+ createdAt: new Date().toISOString(),
+ },
+ ...sponser,
+ ]);
+ navigate("/sponser");
+ };
+
+ return (
+
+
+ );
+};
+
+export default AddSponser;
diff --git a/src/Components/FormInputMain.jsx b/src/Components/FormInputMain.jsx
new file mode 100644
index 0000000..15cdd42
--- /dev/null
+++ b/src/Components/FormInputMain.jsx
@@ -0,0 +1,138 @@
+import { Box, Button, Divider, FormHelperText, Heading, Spinner, Text } from "@chakra-ui/react";
+import React from "react";
+import FormField from "./FormField";
+import { OPACITY_ON_LOAD } from "../Layout/animations";
+import { ArrowBackIcon } from "@chakra-ui/icons";
+
+const FormInputMain = ({
+ register,
+ groupedFields,
+ control,
+ errors,
+ onSubmit,
+ children,
+ onCancle,
+ submitTitle,
+ p,
+ w,
+ btnLoading,
+ btnhidden,
+
+}) => {
+ return (
+
+ {Object.entries(groupedFields).map(([section, fields], index) => (
+
+
+ {/* */}
+ {section}
+
+
+ {fields.map(
+ (
+ {
+ label,
+ name,
+ id,
+ arabic,
+ type,
+ isRequired,
+ selectedImageData,
+ setSelectedImageData,
+ imageData,
+ handleImageChange,
+ removeImage,
+ placeHolder,
+ options,
+ helperText,
+ multiple,
+ width,
+ value,
+ handleInputChange,
+ align,
+ maxLength,
+ dateValue
+ },
+ key
+ ) => (
+
+ )
+ )}
+
+
+ {index < Object.entries(groupedFields).length - 1 && }
+
+ ))}
+
+ {children}
+
+
+
+ {onCancle && (
+
+ )}
+ {btnhidden ? (
+ ""
+ ) : (
+ }
+ type="submit"
+ colorScheme={"forestGreen"}
+ >
+ {submitTitle ? submitTitle : "Submit"}
+
+ )}
+
+
+
+ );
+};
+
+export default FormInputMain;
diff --git a/src/Components/FormInputView.jsx b/src/Components/FormInputView.jsx
new file mode 100644
index 0000000..ff0c467
--- /dev/null
+++ b/src/Components/FormInputView.jsx
@@ -0,0 +1,157 @@
+import {
+ Box,
+ Button,
+ Divider,
+ FormHelperText,
+ FormLabel,
+ Heading,
+ Image,
+ Input,
+ InputGroup,
+ InputRightAddon,
+ Table,
+ Tbody,
+ Td,
+ Th,
+ Thead,
+ Tr,
+} from "@chakra-ui/react";
+import React from "react";
+
+const FormInputView = ({
+ groupedFields,
+ name,
+ groupedFieldsTwo,
+ errors,
+ onSubmit,
+ children,
+}) => {
+ return (
+
+ );
+};
+
+export default FormInputView;
diff --git a/src/Components/Functions/DebounceFunction.jsx b/src/Components/Functions/DebounceFunction.jsx
new file mode 100644
index 0000000..2f929b5
--- /dev/null
+++ b/src/Components/Functions/DebounceFunction.jsx
@@ -0,0 +1,13 @@
+import React from "react";
+
+const DebounceFunction = (func, delay) => {
+ let timeoutId;
+ return (...args) => {
+ clearTimeout(timeoutId);
+ timeoutId = setTimeout(() => {
+ func.apply(this, args);
+ }, delay);
+ };
+};
+
+export default DebounceFunction;
diff --git a/src/Components/Functions/FileNameAlter.jsx b/src/Components/Functions/FileNameAlter.jsx
new file mode 100644
index 0000000..c65feea
--- /dev/null
+++ b/src/Components/Functions/FileNameAlter.jsx
@@ -0,0 +1,8 @@
+const extractFilename = (filePath) => {
+ // Use the split method to break the path into parts based on '/'
+ const parts = filePath.split('/');
+ // Return the last part, which is the filename
+ return parts[parts.length - 1];
+};
+
+export default extractFilename ;
diff --git a/src/Components/Functions/TimeCalculator.jsx b/src/Components/Functions/TimeCalculator.jsx
new file mode 100644
index 0000000..46bce24
--- /dev/null
+++ b/src/Components/Functions/TimeCalculator.jsx
@@ -0,0 +1,35 @@
+import { useState, useEffect } from "react";
+
+const TimeCalculator = ({ JoiningDate }) => {
+ const [elapsedTime, setElapsedTime] = useState(0);
+
+ useEffect(() => {
+ const calculateTimeElapsed = () => {
+ const startDate = new Date(JoiningDate);
+ const currentDate = new Date();
+ const difference = currentDate - startDate;
+ setElapsedTime(Math.floor(difference / 1000)); // Convert milliseconds to seconds
+ };
+
+ // Calculate time elapsed initially
+ calculateTimeElapsed();
+
+ // Update time elapsed every second
+ const intervalId = setInterval(calculateTimeElapsed, 1000);
+
+ // Clear interval on component unmount
+ return () => clearInterval(intervalId);
+ }, []);
+
+ // Convert seconds to years, months, days, hours, minutes, and remaining seconds
+ const years = Math.floor(elapsedTime / (365 * 24 * 60 * 60));
+ const months = Math.floor((elapsedTime % (365 * 24 * 60 * 60)) / (30 * 24 * 60 * 60)); // Approximating a month to 30 days
+ const days = Math.floor((elapsedTime % (30 * 24 * 60 * 60)) / (24 * 60 * 60));
+ const hours = Math.floor((elapsedTime % (24 * 60 * 60)) / (60 * 60));
+ const minutes = Math.floor((elapsedTime % (60 * 60)) / 60);
+ const seconds = elapsedTime % 60;
+
+ return `${years}Y ${months}M ${hours}H ${minutes}M ${seconds}S`;
+};
+
+export default TimeCalculator;
diff --git a/src/Components/Functions/Toaster.jsx b/src/Components/Functions/Toaster.jsx
new file mode 100644
index 0000000..1b25e43
--- /dev/null
+++ b/src/Components/Functions/Toaster.jsx
@@ -0,0 +1,11 @@
+import { useToast } from "@chakra-ui/react";
+
+export const toaster = () => {
+ const toast = useToast();
+
+ return toast({
+ title: "Loged In",
+ status: "success",
+ isClosable: true,
+ });
+}
\ No newline at end of file
diff --git a/src/Components/Functions/UTCConvertor.jsx b/src/Components/Functions/UTCConvertor.jsx
new file mode 100644
index 0000000..beab87f
--- /dev/null
+++ b/src/Components/Functions/UTCConvertor.jsx
@@ -0,0 +1,16 @@
+export const formatDate = (dateString) => {
+ const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+
+ // Create a new Date object from the provided string
+ const date = new Date(dateString);
+
+ // Extract day, month, and year components
+ const day = date.getDate();
+ const month = months[date.getMonth()];
+ const year = date.getFullYear();
+
+ // Format the date in "DD-Mon-YYYY" format
+ const formattedDate = `${day}-${month}-${year}`;
+
+ return formattedDate;
+}
\ No newline at end of file
diff --git a/src/Components/Header.jsx b/src/Components/Header.jsx
new file mode 100644
index 0000000..9b93859
--- /dev/null
+++ b/src/Components/Header.jsx
@@ -0,0 +1,82 @@
+import { AddIcon } from "@chakra-ui/icons";
+import { Box, Button, Text } from "@chakra-ui/react";
+import React from "react";
+import { Link } from "react-router-dom";
+import { IoMdDownload } from "react-icons/io";
+import * as XLSX from "xlsx";
+
+const Header = ({ link, btnTitle, title }) => {
+ const { data, error, isLoading } = useGetNewsLetterEmailQuery();
+
+ const handleDownload = () => {
+ if (Array.isArray(data?.data?.rows)) {
+ const worksheet = XLSX.utils.json_to_sheet(data?.data?.rows);
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
+ XLSX.writeFile(workbook, "newsletter_emails.xlsx");
+ } else {
+ // // console.error(
+ // "Expected data to be an array but received:",
+ // data?.data?.rows
+ // );
+ }
+ };
+ return (
+
+ {/* Community */}
+
+
+ {title}
+
+
+ {/*
+ {title}
+ */}
+
+ {btnTitle ? btnTitle != "Export email" ? (
+
+ }
+ colorScheme={"forestGreen"}
+ size="sm"
+ rounded={"lg"}
+ >
+ {btnTitle}
+
+
+ ) : (
+ }
+ backgroundColor={"green.900"}
+ _hover={{
+ backgroundColor: "green.800",
+ }}
+ color={"whitesmoke"}
+ size="sm"
+ rounded={"sm"}
+ onClick={handleDownload}
+ >
+ {btnTitle}
+
+ ):""}
+
+ );
+};
+
+export default Header;
diff --git a/src/Components/HeaderMain copy.jsx b/src/Components/HeaderMain copy.jsx
new file mode 100644
index 0000000..ad6ae52
--- /dev/null
+++ b/src/Components/HeaderMain copy.jsx
@@ -0,0 +1,167 @@
+import React, { useContext, useState } from "react";
+import {
+ Avatar,
+ Box,
+ Button,
+ HStack,
+ Image,
+ Input,
+ InputGroup,
+ InputLeftElement,
+ Popover,
+ PopoverArrow,
+ PopoverBody,
+ PopoverContent,
+ PopoverTrigger,
+ Portal,
+ Text,
+ useDisclosure,
+} from "@chakra-ui/react";
+import { NavLink } from 'react-router-dom';
+import { MdOutlineHeadsetMic, MdNotificationsNone } from "react-icons/md";
+import { RiWallet3Line } from "react-icons/ri";
+import { SearchIcon, ArrowLeftIcon, ArrowRightIcon } from "@chakra-ui/icons";
+import { Link, useNavigate } from "react-router-dom";
+import GlobalStateContext from "../Contexts/GlobalStateContext";
+import mainLogo from "../assets/optifii_logo.svg";
+import PrimaryButton from "./Buttons/PrimaryButton";
+import Notifications from "../Pages/Notifications/Notifications";
+
+const HeaderMain = ({
+ logOutHandler,
+ slideDirecttion,
+ isDrawerOpen,
+ toggleDrawer,
+}) => {
+ const navigate = useNavigate();
+ const { image } = useContext(GlobalStateContext);
+ const [searchTerm, setSearchTerm] = useState("");
+
+ // For controlling the modal
+ const { isOpen, onOpen, onClose } = useDisclosure();
+
+ return (
+
+
+
+
+ navigate("/home")}
+ cursor={"pointer"}
+ />
+
+
+
+
+
+
+
+
+ setSearchTerm(e.target.value)}
+ />
+
+
+
+
+
+ ({
+ borderBottom: isActive ? '1px solid #3725EA' : 'none',
+ })}
+ >
+
+
+ ({
+ borderBottom: isActive ? '1px solid #3725EA' : 'none',
+ })}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ Kartikey Gautam
+
+ navigate("/profile")} title={"View Profile"} />
+
+
+
+
+
+
+
+
+
+ Kartikey Gautam
+
+
+ Website Development India
+
+
+
+
+
+
+
+
+
+ {/* Include the Notifications modal */}
+
+
+ );
+};
+
+export default HeaderMain;
+
\ No newline at end of file
diff --git a/src/Components/HeaderMain.jsx b/src/Components/HeaderMain.jsx
new file mode 100644
index 0000000..8bfd6bb
--- /dev/null
+++ b/src/Components/HeaderMain.jsx
@@ -0,0 +1,145 @@
+import React, { useContext, useState } from "react";
+import {
+ Avatar,
+ Box,
+ Button,
+ HStack,
+ Image,
+ Input,
+ InputGroup,
+ InputLeftElement,
+ Popover,
+ PopoverArrow,
+ PopoverBody,
+ PopoverContent,
+ PopoverTrigger,
+ Portal,
+ Text,
+ useDisclosure,
+} from "@chakra-ui/react";
+import { NavLink } from 'react-router-dom';
+import { MdOutlineHeadsetMic, MdNotificationsNone } from "react-icons/md";
+import { RiWallet3Line } from "react-icons/ri";
+import { SearchIcon, ArrowLeftIcon, ArrowRightIcon } from "@chakra-ui/icons";
+import { Link, useNavigate } from "react-router-dom";
+import GlobalStateContext from "../Contexts/GlobalStateContext";
+import mainLogo from "../assets/optifii_white.svg";
+import PrimaryButton from "./Buttons/PrimaryButton";
+// import Notifications from "../Pages/Notifications/Notifications";
+
+const HeaderMain = ({
+ logOutHandler,
+ slideDirecttion,
+ isDrawerOpen,
+ toggleDrawer,
+}) => {
+ const navigate = useNavigate();
+ const { image } = useContext(GlobalStateContext);
+ const [searchTerm, setSearchTerm] = useState("");
+
+ // For controlling the modal
+ const { isOpen, onOpen, onClose } = useDisclosure();
+
+ return (
+
+
+
+
+ navigate("/home")}
+ cursor={"pointer"}
+ />
+
+
+
+
+
+
+
+
+ setSearchTerm(e.target.value)}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+ Kartikey Gautam
+
+ navigate("/profile")} title={"View Profile"} />
+
+
+
+
+
+
+
+
+
+ Kartikey Gautam
+
+
+ Website Development India
+
+
+
+
+
+
+
+
+
+ {/* Include the Notifications modal */}
+ {/* */}
+
+ );
+};
+
+export default HeaderMain;
+
\ No newline at end of file
diff --git a/src/Components/ImageDropBox.jsx b/src/Components/ImageDropBox.jsx
new file mode 100644
index 0000000..d68ac5a
--- /dev/null
+++ b/src/Components/ImageDropBox.jsx
@@ -0,0 +1,77 @@
+import {
+ AspectRatio,
+ Box,
+ Container,
+ Heading,
+ Input,
+ Stack,
+ Text,
+} from "@chakra-ui/react";
+import React from "react";
+
+import { motion, useAnimation } from "framer-motion";
+
+const ImageDropBox = () => {
+ return (
+
+
+
+
+
+
+ Drop images here
+
+ or click to upload
+
+
+
+
+
+
+ );
+};
+
+export default ImageDropBox;
diff --git a/src/Components/ImageViewer.jsx b/src/Components/ImageViewer.jsx
new file mode 100644
index 0000000..ade0359
--- /dev/null
+++ b/src/Components/ImageViewer.jsx
@@ -0,0 +1,38 @@
+import {
+ Button,
+ Image,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ useDisclosure,
+} from "@chakra-ui/react";
+import React from "react";
+
+const ImageViewer = ({ src, isOpen, onClose }) => {
+ return (
+ <>
+ {/* */}
+
+
+
+
+ {/* */}
+
+
+
+
+
+ >
+ );
+};
+
+export default ImageViewer;
diff --git a/src/Components/Inputs/Input01.jsx b/src/Components/Inputs/Input01.jsx
new file mode 100644
index 0000000..61d7766
--- /dev/null
+++ b/src/Components/Inputs/Input01.jsx
@@ -0,0 +1,44 @@
+import React, { useState } from "react";
+
+const input01Style = {
+ width: "100%",
+ border: "1px solid #ADB3BD",
+ outline: "none",
+ height: 50,
+ fontSize: "16px",
+};
+
+const focusedInputStyle = {
+ border: "1px solid #38187C", // Change border color for focused state
+};
+
+const Input01 = ({ type, placeholder, onChange, name, register }) => {
+ const [isFocused, setIsFocused] = useState(false);
+
+ const handleFocus = () => {
+ setIsFocused(true);
+ };
+
+ const handleBlur = () => {
+ setIsFocused(false);
+ };
+
+ return (
+
+ );
+};
+
+export default Input01;
diff --git a/src/Components/InvestmentCard/InvestmentCard.jsx b/src/Components/InvestmentCard/InvestmentCard.jsx
new file mode 100644
index 0000000..81618c2
--- /dev/null
+++ b/src/Components/InvestmentCard/InvestmentCard.jsx
@@ -0,0 +1,182 @@
+import {
+ Badge,
+ Box,
+ Button,
+ Card,
+ CardBody,
+ Heading,
+ Image,
+ Progress,
+ Stack,
+ Text,
+ Tooltip,
+} from "@chakra-ui/react";
+import { OPACITY_ON_LOAD } from "../../Layout/animations";
+
+const InvestmentCard = ({ investment }) => {
+ return (
+
+
+
+
+
+
+ {investment?.ioName}
+
+ {investment?.status === "Available"
+ ? "Available"
+ : investment?.status === "Upcomming"
+ ? "Upcomming"
+ : "Closed"}
+
+
+
+ Sponsor:
+
+ {investment?.sponserName}
+
+
+
+ Ann return:
+
+ {investment?.annualReturn}
+
+
+
+ Ann Yield:
+
+ {investment?.annualyield}
+
+
+
+
+
+
+
+ Tenure:
+
+ {investment?.tenure}
+
+
+
+ Quaterly:
+
+ {investment?.quaterly}
+
+
+
+ Destributed Amount:
+
+ {investment?.destributedAmount}
+
+
+
+
+
+
+
+ Min.Invests:
+
+ {investment?.miniInvest}
+
+
+
+ Targ Close:
+
+ {new Date(investment?.targetClose).toLocaleDateString()}
+
+
+
+ Year:
+
+ {investment?.year}
+
+
+
+
+
+
+
+
+ $ 500,000.450
+
+
+ 75 % Funded
+
+
+
+
+
+
+
+ );
+};
+
+export default InvestmentCard;
diff --git a/src/Components/Loaders/FullscreenLoaders.css b/src/Components/Loaders/FullscreenLoaders.css
new file mode 100644
index 0000000..e5c1769
--- /dev/null
+++ b/src/Components/Loaders/FullscreenLoaders.css
@@ -0,0 +1,105 @@
+/* From Uiverse.io by abrahamcalsin */
+.dot-spinner {
+ --uib-size: 2.8rem;
+ --uib-speed: .9s;
+ --uib-color: #004717;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ height: var(--uib-size);
+ width: var(--uib-size);
+ }
+
+ .dot-spinner__dot {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ height: 100%;
+ width: 100%;
+ }
+
+ .dot-spinner__dot::before {
+ content: '';
+ height: 20%;
+ width: 20%;
+ border-radius: 50%;
+ background-color: var(--uib-color);
+ transform: scale(0);
+ opacity: 0.5;
+ animation: pulse0112 calc(var(--uib-speed) * 1.111) ease-in-out infinite;
+ box-shadow: 0 0 20px rgba(18, 31, 53, 0.3);
+ }
+
+ .dot-spinner__dot:nth-child(2) {
+ transform: rotate(45deg);
+ }
+
+ .dot-spinner__dot:nth-child(2)::before {
+ animation-delay: calc(var(--uib-speed) * -0.875);
+ }
+
+ .dot-spinner__dot:nth-child(3) {
+ transform: rotate(90deg);
+ }
+
+ .dot-spinner__dot:nth-child(3)::before {
+ animation-delay: calc(var(--uib-speed) * -0.75);
+ }
+
+ .dot-spinner__dot:nth-child(4) {
+ transform: rotate(135deg);
+ }
+
+ .dot-spinner__dot:nth-child(4)::before {
+ animation-delay: calc(var(--uib-speed) * -0.625);
+ }
+
+ .dot-spinner__dot:nth-child(5) {
+ transform: rotate(180deg);
+ }
+
+ .dot-spinner__dot:nth-child(5)::before {
+ animation-delay: calc(var(--uib-speed) * -0.5);
+ }
+
+ .dot-spinner__dot:nth-child(6) {
+ transform: rotate(225deg);
+ }
+
+ .dot-spinner__dot:nth-child(6)::before {
+ animation-delay: calc(var(--uib-speed) * -0.375);
+ }
+
+ .dot-spinner__dot:nth-child(7) {
+ transform: rotate(270deg);
+ }
+
+ .dot-spinner__dot:nth-child(7)::before {
+ animation-delay: calc(var(--uib-speed) * -0.25);
+ }
+
+ .dot-spinner__dot:nth-child(8) {
+ transform: rotate(315deg);
+ }
+
+ .dot-spinner__dot:nth-child(8)::before {
+ animation-delay: calc(var(--uib-speed) * -0.125);
+ }
+
+ @keyframes pulse0112 {
+ 0%,
+ 100% {
+ transform: scale(0);
+ opacity: 0.5;
+ }
+
+ 50% {
+ transform: scale(1);
+ opacity: 1;
+ }
+ }
+
\ No newline at end of file
diff --git a/src/Components/Loaders/FullscreenLoaders.jsx b/src/Components/Loaders/FullscreenLoaders.jsx
new file mode 100644
index 0000000..a821ce3
--- /dev/null
+++ b/src/Components/Loaders/FullscreenLoaders.jsx
@@ -0,0 +1,30 @@
+import { Box, Spinner, Text } from "@chakra-ui/react";
+import React from "react";
+import './FullscreenLoaders.css'
+
+const FullscreenLoaders = ({height}) => {
+ return (
+
+ {/* Loading... */}
+
+ );
+};
+
+export default FullscreenLoaders;
diff --git a/src/Components/Loaders/Loader01.jsx b/src/Components/Loaders/Loader01.jsx
new file mode 100644
index 0000000..d730e32
--- /dev/null
+++ b/src/Components/Loaders/Loader01.jsx
@@ -0,0 +1,20 @@
+import React from "react";
+import './FullscreenLoaders.css'
+
+const Loader01 = () => {
+ return (
+
+
+ );
+};
+
+export default Loader01;
diff --git a/src/Components/MobileView.jsx b/src/Components/MobileView.jsx
new file mode 100644
index 0000000..ca022a6
--- /dev/null
+++ b/src/Components/MobileView.jsx
@@ -0,0 +1,478 @@
+import {
+ Box,
+ Button,
+ Heading,
+ HStack,
+ Image,
+ Modal,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ Progress,
+ Spinner,
+ Stack,
+ Text,
+} from "@chakra-ui/react";
+import React, { useEffect, useState } from "react";
+import Mobile from "../assets/mobileWing.png";
+import mobileBanner from "../assets/welcome.avif";
+import { GrDownload } from "react-icons/gr";
+import { LuClock } from "react-icons/lu";
+import { GiNetworkBars } from "react-icons/gi";
+import { GrLinkedinOption } from "react-icons/gr";
+import { FiInstagram } from "react-icons/fi";
+import { IoBatteryHalf } from "react-icons/io5";
+import { BiWifi } from "react-icons/bi";
+import { useGetIOByIdQuery } from "../Services/io.service";
+import { useNavigate, useParams } from "react-router-dom";
+import FullscreenLoaders from "./Loaders/FullscreenLoaders";
+import { calculatePercentage, formatDate } from "../Constants/Constants";
+import { BsFileText } from "react-icons/bs";
+
+const MobileView = ({ isOpen, onClose, finalRef, actionId }) => {
+ const [time, setTime] = useState(new Date());
+ const navigate = useNavigate();
+ const params = useParams();
+ const id = actionId;
+
+ const {
+ data: IObyID,
+ isLoading: IObyIDisLoading,
+ error: IObyIDerror,
+ } = useGetIOByIdQuery(id, { skip: !id });
+
+ console.log(IObyID);
+
+ const keyMerits = IObyID?.data?.keyMerits || [];
+ const artifactsImage = IObyID?.data?.artifactsImage || [];
+
+ useEffect(() => {
+ const timer = setInterval(() => {
+ setTime(new Date());
+ }, 1000);
+
+ return () => clearInterval(timer);
+ }, []);
+
+ const formatTime = (date) => {
+ return date.toLocaleTimeString([], {
+ hour: "2-digit",
+ minute: "2-digit",
+ hour12: true,
+ });
+ };
+
+ console.log(
+ calculatePercentage(
+ IObyID?.data?.totalAmtInvestmentInUSD,
+ IObyID?.data?.goalAmount
+ )
+ );
+
+ return (
+
+
+
+
+
+
+
+ {IObyIDisLoading ? (
+
+
+
+ ) : (
+ <>
+
+
+
+
+
+
+ {formatTime(time)}
+
+
+
+
+ {/* */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Stock
+
+
+ {" "}
+
+ Closing Date {formatDate(IObyID?.data?.closingDate)}
+
+
+ {artifactsImage?.[0]?.artifactPathName && (
+
+ )}
+
+
+
+ {IObyID?.data?.investmentType?.investmentTypeName}
+
+
+ BHD {IObyID?.data?.goalAmount}
+
+
+
+ {parseFloat(
+ calculatePercentage(
+ IObyID?.data?.totalAmtInvestmentInUSD,
+ IObyID?.data?.goalAmount
+ ) || 0
+ ).toLocaleString(undefined, {
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2,
+ })}
+ % funded
+
+
+ {IObyID?.data?.descriptionEnglish}
+
+
+
+
+
+ Sponsor name:
+
+
+ {IObyID?.data?.sponsor?.sponsorName}
+
+
+
+
+ Estimated return:
+
+
+ {IObyID?.data?.expectedReturn}
+
+
+
+
+ Hoiding period:
+
+
+ {IObyID?.data?.holdingPeriod}
+
+
+
+
+ Minimum investment:
+
+
+ {
+ IObyID?.data?.minInvestmentAmt?.[0]?.country
+ ?.minInvestmentAmt
+ }
+
+
+
+
+
+
+ Key Merits
+
+
+ {keyMerits &&
+ keyMerits.map((item, index) => (
+
+
+
+ {item?.meritsDescription}
+
+
+ ))}
+
+
+
+
+ Investment Documents
+
+
+
+ {/* */}
+
+
+ {IObyID?.data?.documents?.[0]?.documentName}
+
+
+
+
+ {IObyID?.data?.documents?.[0]?.documentSize}
+
+
+
+
+
+
+
+ Videos
+
+
+
+
+
+
+
+
+ >
+ )}
+
+
+
+
+
+ );
+};
+
+export default MobileView;
diff --git a/src/Components/NavBreadCrumbs.jsx b/src/Components/NavBreadCrumbs.jsx
new file mode 100644
index 0000000..01857e3
--- /dev/null
+++ b/src/Components/NavBreadCrumbs.jsx
@@ -0,0 +1,40 @@
+import React from "react";
+import { Link } from "react-router-dom"; // Adjust this based on your routing setup
+import CustomBreadcrumb from "./CutomBreadcrumb";
+import { MinusIcon } from "@chakra-ui/icons";
+
+const NavBreadcrumbs = ({ nav }) => {
+ // Function to recursively flatten submenu items and add parent titles
+ const flattenNav = (items, parentTitle = "") => {
+ let breadcrumbs = [];
+ items.forEach((item) => {
+ if (item.submenu) {
+ // Add parent title if present
+ breadcrumbs.push({
+ label: parentTitle ? `${parentTitle} ${} ${item.title}` : item.title,
+ link: null, // Adjust link as per your routing setup
+ });
+ // Recursively flatten submenu items
+ breadcrumbs = [
+ ...breadcrumbs,
+ ...flattenNav(item.submenu, `${parentTitle} ${} ${item.title}`),
+ ];
+ } else {
+ // If no submenu, add current item as breadcrumb
+ breadcrumbs.push({
+ label: parentTitle ? `${parentTitle} ${} ${item.title}` : item.title,
+ link: item.path, // Adjust link as per your routing setup
+ });
+ }
+ });
+ return breadcrumbs;
+ };
+
+ // Flatten nav array into breadcrumbs
+ const flattenedNav = flattenNav(nav);
+
+
+ return ;
+};
+
+export default NavBreadcrumbs;
diff --git a/src/Components/Pagination.jsx b/src/Components/Pagination.jsx
new file mode 100644
index 0000000..6532b1f
--- /dev/null
+++ b/src/Components/Pagination.jsx
@@ -0,0 +1,79 @@
+import React, { useState } from 'react';
+import { Select, HStack, Text, Box, IconButton } from '@chakra-ui/react';
+import { ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons';
+
+const Pagination = ({ pageSize, setPageSize, totalItems,isLoading, setCurrentPage, currentPage }) => {
+ // const [] = useState(itemsPerPageOptions[0]);
+
+
+ const totalPages = Math.ceil(totalItems / pageSize);
+
+ const handlePageSizeChange = (e) => {
+ setPageSize(Number(e.target.value));
+ setCurrentPage(1); // Reset to first page whenever page size changes
+ };
+
+ const paginationPrev = () => {
+ if (currentPage > 1) {
+ setCurrentPage(currentPage - 1);
+ }
+ };
+
+ const paginationNext = () => {
+ if (currentPage < totalPages) {
+ setCurrentPage(currentPage + 1);
+ }
+ };
+
+ const displayRange = {
+ start: (currentPage - 1) * pageSize + 1,
+ end: Math.min(currentPage * pageSize, totalItems),
+ };
+
+ return (
+
+ {/* Tanami v0.1 */}
+
+
+
+ }
+ onClick={paginationPrev}
+ className="link pointer"
+ isDisabled={currentPage === 1}
+ />
+
+ {isLoading ? "0": displayRange?.start} - {isLoading ? "00" :displayRange?.end} of {isLoading ? "00":totalItems}
+
+ }
+ size={'sm'}
+ rounded="sm"
+ onClick={paginationNext}
+ className="link pointer"
+ isDisabled={currentPage === totalPages}
+ />
+
+
+ );
+};
+
+export default Pagination;
\ No newline at end of file
diff --git a/src/Components/SwitchButton.jsx b/src/Components/SwitchButton.jsx
new file mode 100644
index 0000000..28b46b9
--- /dev/null
+++ b/src/Components/SwitchButton.jsx
@@ -0,0 +1,78 @@
+import { Box, Text } from "@chakra-ui/react";
+import React, { useRef } from "react";
+import audioClick from "../assets/click-151673.mp3";
+
+const SwitchButton = ({ isSwitchOn, setIsSwitchOn }) => {
+
+ // const [isSwitchOn, setIsSwitchOn] = useState(false);
+
+ const audio = useRef();
+
+ const switch_onChange_handle = () => {
+ setIsSwitchOn(!isSwitchOn);
+ if (audio.current) {
+ audio.current.play();
+ }
+ };
+
+ return (
+
+
+
+ {isSwitchOn ? "Active" : "InActive"}
+
+
+
+
+ );
+};
+
+export default SwitchButton;
diff --git a/src/Components/TabularView/TabularView.jsx b/src/Components/TabularView/TabularView.jsx
new file mode 100644
index 0000000..de52be7
--- /dev/null
+++ b/src/Components/TabularView/TabularView.jsx
@@ -0,0 +1,136 @@
+import { Box, HStack, Input, Select, Text } from "@chakra-ui/react";
+import { OPACITY_ON_LOAD } from "../../Layout/animations";
+import { TABLE_PAGINATION } from "../../Constants/Paginations";
+import { useGetVideosQuery } from "../../Services/api.service";
+import { useState } from "react";
+import Header from "../../Components/Header";
+import { ChevronLeftIcon, ChevronRightIcon } from "@chakra-ui/icons";
+import DataTable from "../../Components/DataTable/DataTable";
+
+const TabularView = ({
+ apiData,
+ tableHeadRow,
+ title,
+ btnTitle,
+ link,
+ extractedArray,
+ searchTerm,
+ setSearchTerm,
+ statusFilter,
+ setStatusFilter,
+ currentPage,
+ setCurrentPage,
+ pageSize,
+ setPageSize,
+ totalPages,
+ noDataTitle,
+ totalItems,
+}) => {
+ const [displayRange, setDisplayRange] = useState({
+ start: TABLE_PAGINATION?.page,
+ end: pageSize,
+ });
+ // ====================================================[Pagination Setup]================================================================
+ const paginationPrev = () => {
+ if (currentPage > 1) {
+ setCurrentPage(currentPage - 1);
+ updateDisplayRange(currentPage - 1);
+ }
+ };
+
+ const paginationNext = () => {
+ if (currentPage < totalPages) {
+ setCurrentPage(currentPage + 1);
+ updateDisplayRange(currentPage + 1);
+ }
+ };
+ const updateDisplayRange = (page) => {
+ const start = (page - 1) * pageSize + 1;
+ const end = Math.min(start + pageSize - 1, totalItems);
+ setDisplayRange({ start, end });
+ };
+
+ return (
+
+
+
+
+
+ setSearchTerm(e.target.value)}
+ />
+
+
+
+
+
+
+
+
+ {displayRange.start} - {displayRange.end} of {totalItems}
+
+
+
+
+
+
+
+ {/* ====================================================[ Table ]================================================================ */}
+
+
+ );
+};
+
+export default TabularView;
diff --git a/src/Components/ToastBox.jsx b/src/Components/ToastBox.jsx
new file mode 100644
index 0000000..316cd10
--- /dev/null
+++ b/src/Components/ToastBox.jsx
@@ -0,0 +1,22 @@
+import { CheckCircleIcon, WarningIcon } from "@chakra-ui/icons";
+import { Box, Text } from "@chakra-ui/react";
+import React from "react";
+import { PiWarningBold } from "react-icons/pi";
+
+const ToastBox = ({ message, status }) => {
+ return (
+
+
+ {status === "error" || status === "warn" ? : status === "info" ? : }
+ {message}
+
+ );
+};
+
+export default ToastBox;
diff --git a/src/Components/WebButton.jsx b/src/Components/WebButton.jsx
new file mode 100644
index 0000000..6d425fc
--- /dev/null
+++ b/src/Components/WebButton.jsx
@@ -0,0 +1,68 @@
+
+import { Button } from '@chakra-ui/react'
+import React from 'react'
+
+const WebButton = ({title}) => {
+ return (
+ )
+}
+
+export default WebButton
\ No newline at end of file
diff --git a/src/Components/mobileWing.png b/src/Components/mobileWing.png
new file mode 100644
index 0000000..1ec4b7a
Binary files /dev/null and b/src/Components/mobileWing.png differ
diff --git a/src/Constants/Constants.js b/src/Constants/Constants.js
new file mode 100644
index 0000000..697df27
--- /dev/null
+++ b/src/Constants/Constants.js
@@ -0,0 +1,198 @@
+
+import dns from "node:dns"
+import * as XLSX from 'xlsx';
+
+
+export const generateSerialNumber = (index, currentPage, pageSize) => {
+ return (currentPage - 1) * pageSize + (index + 1);
+};
+
+export function getTomorrowDate() {
+ const today = new Date();
+ const tomorrow = new Date(today);
+ tomorrow.setDate(today.getDate() + 1);
+
+ // Format the date as YYYY-MM-DD (ISO 8601)
+ return tomorrow.toISOString().split('T')[0];
+}
+
+
+export function removeTrailingZeros(value) {
+ // Convert the value to a number and then to a string
+ let number = parseFloat(value);
+ let result = number.toString();
+
+ // Check if the result contains a decimal point
+ if (result.includes('.')) {
+ // Remove trailing zeros if the decimal part is 0 or 00
+ result = result.replace(/(\.\d*?)0+$/, '$1'); // Remove trailing zeros
+ result = result.replace(/\.$/, ''); // Remove the decimal point if it's the last character
+ }
+
+ return result;
+}
+
+
+ export function getCountdownTimer(utcDateString) {
+ // Parse the UTC datetime string into a Date object
+ const targetDate = new Date(utcDateString);
+ const now = new Date();
+
+ // Calculate the difference in milliseconds
+ const difference = targetDate - now;
+
+ if (difference <= 0) {
+ return 'The time has passed or is now!';
+ }
+
+ // Convert the difference from milliseconds to a more readable format
+ const seconds = Math.floor(difference / 1000);
+ const minutes = Math.floor(seconds / 60);
+ const hours = Math.floor(minutes / 60);
+ const days = Math.floor(hours / 24);
+
+ const remainingDays = days;
+ const remainingHours = hours % 24;
+ const remainingMinutes = minutes % 60;
+ const remainingSeconds = seconds % 60;
+
+ return `${remainingDays === 0 ? "": remainingDays+"d"} ${remainingHours === 0 ? "": remainingHours+"h"} ${remainingMinutes}m ${remainingSeconds}s `;
+}
+
+
+
+export function startCountdown(utcDateString) {
+ // Function to update the countdown
+ const updateCountdown = () => {
+ const countdown = getCountdownTimer(utcDateString);
+ console.log(countdown);
+ };
+
+ // Update countdown immediately
+ updateCountdown();
+
+ // Set up interval to update countdown every minute (60000 milliseconds)
+ setInterval(updateCountdown, 60000);
+}
+
+export const getFileNameFromPath = (filePath) => {
+ const parts = filePath?.split("/");
+ return parts?.[parts?.length - 1];
+};
+
+export function debounce(func, delay) {
+ let debounceTimer;
+ return function (...args) {
+ clearTimeout(debounceTimer);
+ debounceTimer = setTimeout(() => func.apply(this, args), delay);
+ };
+}
+
+
+
+async function resolveMx(domain, recordType) {
+ return new Promise((resolve, reject) => {
+ dns.resolveMx(domain, (err, mxRecords) => {
+ if (err) {
+ reject(err);
+ return;
+ }
+ const addresses = mxRecords.map((mxRecord) => mxRecord.exchange);
+ resolve(addresses);
+ });
+ });
+}
+// Async function to check email address validity
+export async function checkEmailValidity(email) {
+ try {
+ const domain = email?.split("@")[1];
+ const addresses = await resolveMx(domain, "MX");
+
+ if (addresses && addresses?.length > 0) {
+ return true;
+ }
+ return false; // No MX record exists
+ } catch (err) {
+ return false; // Error occurred
+ }
+}
+
+
+// Function to convert timestamp to readable date format in Gulf timezone
+export function formatTimestampInGulfTimezone(timestamp) {
+ const date = new Date(timestamp);
+ const options = {
+ year: 'numeric',
+ month: 'long',
+ day: 'numeric',
+ hour: '2-digit',
+ minute: '2-digit',
+ second: '2-digit',
+ timeZone: 'Asia/Dubai', // Gulf Standard Time (GST) timezone
+ timeZoneName: 'short'
+ };
+ return date.toLocaleDateString('en-GB', options);
+}
+
+
+export function formatDate(dateString) {
+ const options = { year: 'numeric', month: 'short', day: 'numeric' };
+ const date = new Date(dateString);
+ return date.toLocaleDateString('en-US', options);
+}
+
+export function calculatePercentage(part, total) {
+ if (total === 0) {
+ return 0; // To avoid division by zero
+ }
+ return (part / total) * 100;
+}
+
+export const exportToExcel = (data, customHeaders, fileName = 'exported-data.xlsx') => {
+ // Map your data to include only the fields that match your custom headers
+ const mappedData = data.map(item =>
+ customHeaders.map(header => item[header.key] || '')
+ );
+
+ // Prepend the headers row
+ const sheetData = [customHeaders.map(header => header.label), ...mappedData];
+
+ // Create a worksheet from the data array
+ const worksheet = XLSX.utils.aoa_to_sheet(sheetData);
+
+ // Apply styles to header cells
+ customHeaders.forEach((header, index) => {
+ const cellAddress = XLSX.utils.encode_cell({ r: 0, c: index }); // r: row, c: column
+ if (!worksheet[cellAddress]) return; // Skip if cell doesn't exist
+
+ worksheet[cellAddress].s = {
+ fill: {
+ fgColor: { rgb: "FFFF00" } // Set header background color (Yellow in this case)
+ },
+ font: {
+ bold: true, // Make header text bold
+ color: { rgb: "000000" } // Set header text color (Black in this case)
+ }
+ };
+ });
+
+ // Create a new workbook and append the worksheet
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+ // Generate a buffer from the workbook
+ const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
+
+ // Create a Blob object from the buffer
+ const dataBlob = new Blob([excelBuffer], { type: 'application/octet-stream' });
+
+ // Create a link element to trigger the download
+ const link = document.createElement('a');
+ link.href = URL.createObjectURL(dataBlob);
+ link.download = fileName;
+
+ // Append the link to the document body, trigger the download, and remove the link
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+};
diff --git a/src/Constants/Paginations.js b/src/Constants/Paginations.js
new file mode 100644
index 0000000..b01cbd8
--- /dev/null
+++ b/src/Constants/Paginations.js
@@ -0,0 +1,2 @@
+export const TABLE_PAGINATION = { page: 1, size:20 }
+export const IMAGE_URI = import.meta.env.VITE_API_IMAGE_URL
\ No newline at end of file
diff --git a/src/Contexts/GlobalStateContext.jsx b/src/Contexts/GlobalStateContext.jsx
new file mode 100644
index 0000000..48a2ae0
--- /dev/null
+++ b/src/Contexts/GlobalStateContext.jsx
@@ -0,0 +1,6 @@
+// GlobalStateContext.js
+import { createContext } from 'react';
+
+const GlobalStateContext = createContext();
+
+export default GlobalStateContext;
diff --git a/src/Contexts/GlobalStateProvider.jsx b/src/Contexts/GlobalStateProvider.jsx
new file mode 100644
index 0000000..d9db0d1
--- /dev/null
+++ b/src/Contexts/GlobalStateProvider.jsx
@@ -0,0 +1,1537 @@
+// GlobalStateContext.js
+import React, { useState } from "react";
+import GlobalStateContext from "./GlobalStateContext";
+import { effect, useColorMode } from "@chakra-ui/react";
+import { v4 as uuidv4 } from "uuid";
+import { TbClock2 } from "react-icons/tb";
+import { CiWallet } from "react-icons/ci";
+import { HiOutlineReceiptPercent } from "react-icons/hi2";
+import { IoMdQrScanner } from "react-icons/io";
+import { GrDocumentPdf } from "react-icons/gr";
+import { AiOutlineFileGif } from "react-icons/ai";
+
+const getRandomDate = (start, end) => {
+ const date = new Date(
+ start.getTime() + Math.random() * (end.getTime() - start.getTime())
+ );
+ return date.toISOString();
+};
+
+const startDate = new Date(2020, 0, 1); // January 1, 2020
+const endDate = new Date(); // Current date
+
+export const generateUniqueId = () => {
+ const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ const digits = "0123456789";
+
+ let id = "";
+
+ // Generate three random uppercase letters
+ for (let i = 0; i < 3; i++) {
+ id += letters[Math.floor(Math.random() * letters.length)];
+ }
+
+ // Generate seven random digits
+ for (let i = 0; i < 7; i++) {
+ id += digits[Math.floor(Math.random() * digits.length)];
+ }
+
+ return id;
+};
+
+const GlobalStateProvider = ({ children }) => {
+ const [isAuthenticate, setIsAuthenticate] = useState(false);
+ const [memberIfo, setMemberInfo] = useState();
+ const [communityMembers, setCommityMembers] = useState();
+ const [slideFromRight, setSlideFormRight] = useState(false);
+ const { colorMode, toggleColorMode } = useColorMode();
+ const [sponser, setSponser] = useState([]);
+
+ const [investors, setInvestors] = useState([
+ {
+ id: 1,
+ clientId: "BH00000001",
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ investedAmount: 100000,
+ percentage: "10.0%",
+ marketValue: 114050,
+ returnOnInvestment: "14.1%",
+ distribution: 5000,
+ totalReturn: 62025,
+ totalReturnOnInvestment: "24.1%",
+ },
+ {
+ id: 2,
+ clientId: "BH00000002",
+ firstName: "Sara",
+ lastName: "Ahmed",
+ investedAmount: 150000,
+ percentage: "15.0%",
+ marketValue: 171075,
+ returnOnInvestment: "14.05%",
+ distribution: 7500,
+ totalReturn: 93038,
+ totalReturnOnInvestment: "25.5%",
+ },
+ {
+ id: 3,
+ clientId: "BH00000003",
+ firstName: "Ali",
+ lastName: "Khan",
+ investedAmount: 200000,
+ percentage: "20.0%",
+ marketValue: 228100,
+ returnOnInvestment: "14.05%",
+ distribution: 10000,
+ totalReturn: 124050,
+ totalReturnOnInvestment: "31.0%",
+ },
+ {
+ id: 4,
+ clientId: "BH00000004",
+ firstName: "Laila",
+ lastName: "Hassan",
+ investedAmount: 250000,
+ percentage: "25.0%",
+ marketValue: 285125,
+ returnOnInvestment: "14.05%",
+ distribution: 12500,
+ totalReturn: 155063,
+ totalReturnOnInvestment: "37.0%",
+ },
+ {
+ id: 5,
+ clientId: "BH00000005",
+ firstName: "Omar",
+ lastName: "Rahman",
+ investedAmount: 300000,
+ percentage: "30.0%",
+ marketValue: 342150,
+ returnOnInvestment: "14.05%",
+ distribution: 15000,
+ totalReturn: 186075,
+ totalReturnOnInvestment: "43.0%",
+ },
+ {
+ id: 6,
+ clientId: "BH00000006",
+ firstName: "Aisha",
+ lastName: "Saeed",
+ investedAmount: 350000,
+ percentage: "35.0%",
+ marketValue: 399175,
+ returnOnInvestment: "14.05%",
+ distribution: 17500,
+ totalReturn: 217088,
+ totalReturnOnInvestment: "49.0%",
+ },
+ {
+ id: 7,
+ clientId: "BH00000007",
+ firstName: "Mohammed",
+ lastName: "Yousef",
+ investedAmount: 400000,
+ percentage: "40.0%",
+ marketValue: 456200,
+ returnOnInvestment: "14.05%",
+ distribution: 20000,
+ totalReturn: 248100,
+ totalReturnOnInvestment: "55.0%",
+ },
+ {
+ id: 8,
+ clientId: "BH00000008",
+ firstName: "Fatima",
+ lastName: "Jaber",
+ investedAmount: 450000,
+ percentage: "45.0%",
+ marketValue: 513225,
+ returnOnInvestment: "14.05%",
+ distribution: 22500,
+ totalReturn: 279113,
+ totalReturnOnInvestment: "61.0%",
+ },
+ {
+ id: 9,
+ clientId: "BH00000009",
+ firstName: "Yasin",
+ lastName: "Abdullah",
+ investedAmount: 500000,
+ percentage: "50.0%",
+ marketValue: 570250,
+ returnOnInvestment: "14.05%",
+ distribution: 25000,
+ totalReturn: 310125,
+ totalReturnOnInvestment: "67.0%",
+ },
+ {
+ id: 10,
+ clientId: "BH00000010",
+ firstName: "Zara",
+ lastName: "Mustafa",
+ investedAmount: 550000,
+ percentage: "55.0%",
+ marketValue: 627275,
+ returnOnInvestment: "14.05%",
+ distribution: 27500,
+ totalReturn: 341138,
+ totalReturnOnInvestment: "73.0%",
+ },
+ ]);
+
+ const [caseDetails, setCaseDetails] = useState([
+ {
+ id: 1,
+ date: "02-Jan-24",
+ particulars: "Cash Reserve- Initated",
+ amount: "50,000.00",
+ comments: " ",
+ updateBy: "Faisal",
+ updateOn: "02-Jan-24",
+ },
+ {
+ id: 2,
+ date: "12-Feb-24",
+ particulars: "Fees & Expense",
+ amount: "22,000.00",
+ comments: "Fees = $20,000 Expense = $2,000 ",
+ updateBy: "Faisal",
+ updateOn: "13-Feb-24",
+ },
+ {
+ id: 3,
+ date: "23-Mar-24",
+ particulars: "Distribution Received From Sponsor",
+ amount: "50,000.00",
+ comments: " ",
+ updateBy: "Nawab",
+ updateOn: "24-Mar-24",
+ },
+ {
+ id: 4,
+ date: "28-Mar-24",
+ particulars: "Distribution Paid To Investors",
+ amount: "40,000.00",
+ comments: " ",
+ updateBy: "Faisal",
+ updateOn: "28-Mar-24",
+ },
+ {
+ id: 5,
+ date: "26-Jun-24",
+ particulars: "Distribution Received From Sponsor",
+ amount: "70,000.00",
+ comments: " ",
+ updateBy: "Faisal",
+ updateOn: "27-Jun-24",
+ },
+ {
+ id: 6,
+ date: "02-Jan-24",
+ particulars: "Distribution Paid To Investors",
+ amount: "60,000.00",
+ comments: " ",
+ updateBy: "Nawab",
+ updateOn: "28-Jun-24",
+ },
+ ]);
+
+ const [navDetails, setNavDetails] = useState([
+ {
+ id: 1,
+ date: "02-Jan-24",
+ IONavValue: 1229750,
+ comments: "MV Increased by 10%",
+ updateBy: "Faisal",
+ updateOn: "02-Jan-24",
+ },
+ {
+ id: 2,
+ date: "02-Jan-24",
+ IONavValue: 1229750,
+ comments: "MV Increased by 10%",
+ updateBy: "Faisal",
+ updateOn: "13-Feb-24",
+ },
+ ]);
+
+ const [create, setCreate] = useState([
+ {
+ id: 1,
+ Type: ,
+ fileName: "Investment Private Company",
+ document: "Investment.pdf",
+ status: true,
+ },
+ {
+ id: 2,
+ Type: ,
+ fileName: "Investment Private",
+ document: "Investment.pdf",
+ status: true,
+ },
+ ]);
+ const [keyMerits, setKeyMerits] = useState([
+ {
+ id: 1,
+ title: "Diversified Holdings",
+ subTitle:
+ "Private equity portfolio of over 60 companies in various sectors and different countries around the world",
+ Icon: ,
+ status: true,
+ },
+ {
+ id: 2,
+ title: "Top-Tier Manager",
+ subTitle:
+ "KKR is a world-class global PE manager with over $570bn in assets under management",
+ Icon: ,
+ status: true,
+ },
+ {
+ id: 3,
+ title: "Strong performance",
+ subTitle:
+ "Direct exposure to the KKR’s best performing Buyout and Growth funds",
+ Icon: ,
+ status: true,
+ },
+ {
+ id: 4,
+ title: "Leading Track Record",
+ subTitle:
+ "Almost 50 year track record since 1977 of consistent, double-digit annual returns",
+ Icon: ,
+ status: true,
+ },
+ ]);
+ const [iOArtifacts, setIOArtifacts] = useState([
+ {
+ id: 1,
+ fileName: "Banner image",
+ document: "Banner.jpg",
+ status: true,
+ },
+ {
+ id: 2,
+ fileName: "Banner image",
+ document: "Banner.jpg",
+ status: true,
+ },
+ {
+ id: 3,
+ fileName: "Banner image",
+ document: "Banner.jpg",
+ status: true,
+ },
+ {
+ id: 4,
+ fileName: "Banner image",
+ document: "Banner.jpg",
+ status: true,
+ },
+ ]);
+
+ const [iOArtifactsTwo, setIOArtifactsTwo] = useState([
+ {
+ id: 1,
+ videoFileName: "Property preview",
+ status: true,
+ },
+ {
+ id: 2,
+ videoFileName: "Property preview",
+ status: true,
+ },
+ {
+ id: 3,
+ videoFileName: "Property preview",
+ status: true,
+ },
+ {
+ id: 4,
+ videoFileName: "Property preview",
+ status: true,
+ },
+ ]);
+
+ const [investmentType, setInvestmentType] = useState([
+ {
+ id: 1,
+ investmentName: "Commercial",
+ description: "Investment Private Company",
+ investmentNameArabic: "لعفكعلفكع كعلجلجعيجكجلدسجوي",
+ descriptionArabic: "لعفكعلفكع كعلجلجع",
+ status: true,
+ },
+ ]);
+ const [investment, setInvestment] = useState([
+ // {
+ // banner_image:
+ // "https://images.unsplash.com/photo-1667489022797-ab608913feeb?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxlZGl0b3JpYWwtZmVlZHw5fHx8ZW58MHx8fHw%3D&auto=format&fit=crop&w=800&q=60",
+ // ioName: "Multi Family Residence Portfolio",
+ // sponserName: "KKR",
+ // annualReturn: "12.5%",
+ // annualyield: "12.5%",
+ // minInvests: ",00 $0",
+ // targetClose: "24 December",
+ // year: "5-7 years",
+ // tenure: 92,
+ // quaterly: "Q2",
+ // destributedAmount: 62,
+ // ioName: "Sybil Christensen",
+ // ioNameArabic: "September Kelley",
+ // status: "Available"
+ // },
+ // {
+ // banner_image:
+ // "https://images.unsplash.com/photo-1667489022797-ab608913feeb?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxlZGl0b3JpYWwtZmVlZHw5fHx8ZW58MHx8fHw%3D&auto=format&fit=crop&w=800&q=60",
+ // ioName: "Multi Family Residence Portfolio",
+ // sponserName: "KKR",
+ // annualReturn: "12.5%",
+ // annualyield: "12.5%",
+ // minInvests: ",00 $0",
+ // targetClose: "24 December",
+ // year: "5-7 years",
+ // tenure: 92,
+ // quaterly: "Q2",
+ // destributedAmount: 62,
+ // ioName: "Sybil Christensen",
+ // ioNameArabic: "September Kelley",
+ // status: "Available"
+ // },
+ // {
+ // banner_image:
+ // "https://images.unsplash.com/photo-1667489022797-ab608913feeb?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxlZGl0b3JpYWwtZmVlZHw5fHx8ZW58MHx8fHw%3D&auto=format&fit=crop&w=800&q=60",
+ // ioName: "Multi Family Residence Portfolio",
+ // sponserName: "KKR",
+ // annualReturn: "12.5%",
+ // annualyield: "12.5%",
+ // minInvests: ",00 $0",
+ // targetClose: "24 December",
+ // year: "5-7 years",
+ // tenure: 92,
+ // quaterly: "Q2",
+ // destributedAmount: 62,
+ // ioName: "Sybil Christensen",
+ // ioNameArabic: "September Kelley",
+ // status: "Available"
+ // },
+ ]);
+ const [rateExchange, setRateExchange] = useState([
+ {
+ id: uuidv4(),
+ fromCurr: "USD $",
+ toCurr: "BHD .د.ب;",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "USD $",
+ toCurr: "KWD ·د.ك",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "USD $",
+ toCurr: "OMR ﷼.",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "USD $",
+ toCurr: "QAR ﷼.",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "USD $",
+ toCurr: "SAR ﷼.",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "USD $",
+ toCurr: "AED د.إ. ",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+
+ {
+ id: uuidv4(),
+ fromCurr: "AED د.إ. ",
+ toCurr: "USD $",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "SAR ﷼.",
+ toCurr: "USD $",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "QAR ﷼.",
+ toCurr: "USD $",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+
+ {
+ id: uuidv4(),
+ fromCurr: "BHD .د.ب;",
+ toCurr: "USD $",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "KWD ·د.ك",
+ toCurr: "USD $",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ {
+ id: uuidv4(),
+ fromCurr: "OMR ﷼.",
+ toCurr: "USD $",
+ effectFrom: getRandomDate(startDate, endDate),
+ effectTill: getRandomDate(startDate, endDate),
+ rate: 2.66,
+ },
+ ]);
+ const [InvestorDetails, setInvestorDetails] = useState([
+ {
+ id: 1,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Retail",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Completed",
+ status: "Unban",
+ },
+ {
+ id: 2,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Accredited Investors",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Incompleted",
+ status: "Unban",
+ },
+ {
+ id: 3,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Retail",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Completed",
+ status: "Unban",
+ },
+ {
+ id: 4,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Accredited Investors",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Incompleted",
+ status: "Unban",
+ },
+ {
+ id: 5,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Retail",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Completed",
+ status: "Unban",
+ },
+ {
+ id: 6,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Accredited Investors",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Completed",
+ status: "Unban",
+ },
+ {
+ id: 7,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Retail",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Incompleted",
+ status: "Unban",
+ },
+ {
+ id: 8,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Accredited Investors",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Incompleted",
+ status: "Unban",
+ },
+ {
+ id: 9,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Retail",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Completed",
+ status: "Unban",
+ },
+ {
+ id: 10,
+ clientId: "SA00000001",
+ fullName: "John David",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ address: "Saudi Arabia",
+ emailID: "john@gmail.com",
+ InvestorType: "Accredited Investors",
+ bankName: "Lorem Text",
+ branchAddress: "Hohenzollernring 58, 95444",
+ iban: "DE 1234 5678 9012 3456",
+ swiftCode: "BC12345",
+ referenceID: "FRYU FHDU 1234",
+ kycStatus: "Completed",
+ status: "Unban",
+ },
+ ]);
+
+ const [viewInvestor, setViewInvestor] = useState([]);
+ const [transaction, setTransaction] = useState([]);
+
+ const [investorTransaction, setInvestorTransaction] = useState([
+ {
+ id: 1,
+ InvestorName: "ICC",
+ Sponsor: "Adani",
+ InvestmentAmount: "1000000",
+ Action: "Distribute",
+ },
+ {
+ id: 2,
+ InvestorName: "ECHO Investment",
+ Sponsor: "Tata",
+ InvestmentAmount: "2500000",
+ Action: "Distribute",
+ },
+ {
+ id: 3,
+ InvestorName: "ICC",
+ Sponsor: "Adani",
+ InvestmentAmount: "1000000",
+ Action: "Distribute",
+ },
+ {
+ id: 4,
+ InvestorName: "ECHO Investment",
+ Sponsor: "Tata",
+ InvestmentAmount: "2500000",
+ Action: "Distribute",
+ },
+ ]);
+
+ const [pendingRequest, setPendingRequest] = useState([
+ {
+ id: 1,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ currency: "SAR",
+ withDrawalAmount: "$100,000",
+ amountcurrency: "382574.17",
+ },
+ {
+ id: 2,
+ date: "02-Jan-2024",
+ clientId: "KU00000001",
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ country: "Kuwait",
+ phoneNumber: "8226278945",
+ currency: "KWD",
+ withDrawalAmount: "$200,000",
+ amountcurrency: "62438.98",
+ },
+ {
+ id: 3,
+ date: "02-Jan-2024",
+ clientId: "BH00000001",
+ firstName: "Nawaf",
+ lastName: "Almaskati",
+ country: "Bahrain",
+ phoneNumber: "8940035906",
+ currency: "BHD",
+ withDrawalAmount: "$300,000",
+ amountcurrency: "115328.04",
+ },
+ {
+ id: 4,
+ date: "02-Jan-2024",
+ clientId: "SA00000002",
+ firstName: "Sulaiman",
+ lastName: "AlBassam",
+ country: "Saudi Arabia",
+ phoneNumber: "8226278945",
+ currency: "SAR",
+ withDrawalAmount: "$400,000",
+ amountcurrency: "1530296.67",
+ },
+ ]);
+ const [viewHistory, setViewHistory] = useState([
+ {
+ id: 1,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ currency: "SAR",
+ withDrawalAmount: "$100,000",
+ amountcurrency: "382574.17",
+ status: "Approved",
+ },
+ {
+ id: 2,
+ date: "02-Jan-2024",
+ clientId: "KU00000001",
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ country: "Kuwait",
+ phoneNumber: "8226278945",
+ currency: "KWD",
+ withDrawalAmount: "$200,000",
+ amountcurrency: "62438.98",
+ status: "Rejected",
+ },
+ {
+ id: 3,
+ date: "02-Jan-2024",
+ clientId: "BH00000001",
+ firstName: "Nawaf",
+ lastName: "Almaskati",
+ country: "Bahrain",
+ phoneNumber: "8940035906",
+ currency: "BHD",
+ withDrawalAmount: "$300,000",
+ amountcurrency: "115328.04",
+ status: "Approved",
+ },
+ {
+ id: 4,
+ date: "02-Jan-2024",
+ clientId: "SA00000002",
+ firstName: "Sulaiman",
+ lastName: "AlBassam",
+ country: "Saudi Arabia",
+ phoneNumber: "8226278945",
+ currency: "SAR",
+ withDrawalAmount: "$400,000",
+ amountcurrency: "1530296.67",
+ status: "Rejected",
+ },
+ ]);
+ const [upgradeHistory, setUpgradeHistory] = useState([
+ {
+ id: uuidv4(),
+ date: "2024-01-15",
+ Distribution: "Office supplies",
+ charge: "200.50",
+ year: "2024",
+ quarter: "Q1",
+ amount: 1500,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-02-10",
+ Distribution: "Marketing expenses",
+ charge: "450.00",
+ year: "2024",
+ quarter: "Q1",
+ amount: 2000,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-03-05",
+ Distribution: "Software subscription",
+ charge: "300.75",
+ year: "2024",
+ quarter: "Q1",
+ amount: 1200,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-04-18",
+ Distribution: "Travel expenses",
+ charge: "600.30",
+ year: "2024",
+ quarter: "Q2",
+ amount: 2500,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-05-22",
+ Distribution: "Consulting fees",
+ charge: "800.00",
+ year: "2024",
+ quarter: "Q2",
+ amount: 3000,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-06-14",
+ Distribution: "Office rent",
+ charge: "1200.25",
+ year: "2024",
+ quarter: "Q2",
+ amount: 3500,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-07-09",
+ Distribution: "Utilities",
+ charge: "150.40",
+ year: "2024",
+ quarter: "Q3",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-08-29",
+ Distribution: "Employee training",
+ charge: "500.00",
+ year: "2024",
+ quarter: "Q3",
+ amount: 1800,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-09-13",
+ Distribution: "Website maintenance",
+ charge: "350.65",
+ year: "2024",
+ quarter: "Q3",
+ amount: 1400,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-10-23",
+ Distribution: "Advertising",
+ charge: "900.50",
+ year: "2024",
+ quarter: "Q4",
+ amount: 2200,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-10-23",
+ Distribution: "Advertising",
+ charge: "900.50",
+ year: "2024",
+ quarter: "Q4",
+ amount: 2200,
+ },
+ {
+ id: uuidv4(),
+ date: "2024-10-23",
+ Distribution: "Advertising",
+ charge: "900.50",
+ year: "2024",
+ quarter: "Q4",
+ amount: 2200,
+ },
+ ]);
+ const [deleteHistory, setDeleteHistory] = useState([
+ {
+ id: 1,
+ firstName: "satyam",
+ lastName: "Bendal",
+ clientId: "QA00000003",
+ RequestedOn: "2024-08-21T08:12:08.000Z",
+ phoneNumber: "6387524874",
+ country: "Qatar",
+ status: "Approved",
+ },
+ ]);
+ const [investorRequest, setInvestorRequest] = useState([
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ {
+ id: uuidv4(),
+ date: getRandomDate(startDate, endDate),
+ Distribution: "lorem ipsum dummy text",
+ charge: "500",
+ year: "2024",
+ quater: "Q 1",
+ amount: 1000,
+ },
+ ]);
+ const [deleteRequest, setDeleteRequest] = useState([
+ {
+ "id": 2,
+ "firstName": "satyam",
+ "lastName": "Bendal",
+ "clientId": "QA00000003",
+ "RequestedOn": "2024-08-21T09:44:21.000Z",
+ "phoneNumber": "6387524874",
+ "country": "Qatar",
+ "status": "Pending"
+ },
+ {
+ "id": 3,
+ "firstName": "satyam",
+ "lastName": "Bendal",
+ "clientId": "QA00000003",
+ "RequestedOn": "2024-08-21T09:53:03.000Z",
+ "phoneNumber": "6387524874",
+ "country": "Qatar",
+ "status": "Pending"
+ }
+]);
+ const [viewIO, setViewIO] = useState([
+ {
+ id: 1,
+ DealID: "UWE3424992",
+ DealName: "K-Prime",
+ SponsorName: "KKR",
+ IOstatus: "Open",
+ },
+ {
+ id: 2,
+ DealID: "UWE3424993",
+ DealName: "K-Prime",
+ SponsorName: "KKR",
+ IOstatus: "Pending",
+ },
+ {
+ id: 3,
+ DealID: "UWE3424994",
+ DealName: "K-Prime",
+ SponsorName: "KKR",
+ IOstatus: "Close",
+ },
+ {
+ id: 4,
+ DealID: "UWE3424995",
+ DealName: "K-Prime",
+ SponsorName: "KKR",
+ IOstatus: "Open",
+ },
+ ]);
+
+ const [depositRequest, setDepositRequest] = useState([
+ {
+ id: 1,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ currency: "SAR",
+ depositAmount: "$100,000",
+ fees: "$2,000",
+ totalAmount: "$102,000",
+ amountcurrency: "382574.17",
+ },
+ {
+ id: 2,
+ date: "02-Jan-2024",
+ clientId: "KU00000001",
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ country: "Kuwait",
+ phoneNumber: "8226278945",
+ currency: "KWD",
+ depositAmount: "$200,000",
+ fees: "$4,000",
+ totalAmount: "$204,000",
+ amountcurrency: "62438.98",
+ },
+ {
+ id: 3,
+ date: "02-Jan-2024",
+ clientId: "BH00000001",
+ firstName: "Nawaf",
+ lastName: "Almaskati",
+ country: "Bahrain",
+ phoneNumber: "8940035906",
+ currency: "BHD",
+ depositAmount: "$300,000",
+ fees: "$6,000",
+ totalAmount: "$306,000",
+ amountcurrency: "115328.04",
+ },
+ {
+ id: 4,
+ date: "02-Jan-2024",
+ clientId: "SA00000002",
+ firstName: "Sulaiman",
+ lastName: "AlBassam",
+ country: "Saudi Arabia",
+ phoneNumber: "8226278945",
+ currency: "SAR",
+ depositAmount: "$400,000",
+ fees: "$8,000",
+ totalAmount: "$408,000",
+ amountcurrency: "1530296.67",
+ },
+ ]);
+
+ const [depositHistory, setDepositHistory] = useState([
+ {
+ id: 1,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ currency: "SAR",
+ depositAmount: "$100,000",
+ fees: "$2,000",
+ totalAmount: "$102,000",
+ amountcurrency: "382574.17",
+ status: "Approved",
+ },
+ {
+ id: 2,
+ date: "02-Jan-2024",
+ clientId: "KU00000001",
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ country: "Kuwait",
+ phoneNumber: "8226278945",
+ currency: "KWD",
+ depositAmount: "$200,000",
+ fees: "$4,000",
+ totalAmount: "$204,000",
+ amountcurrency: "62438.98",
+ status: "Rejected",
+ },
+ {
+ id: 3,
+ date: "02-Jan-2024",
+ clientId: "BH00000001",
+ firstName: "Nawaf",
+ lastName: "Almaskati",
+ country: "Bahrain",
+ phoneNumber: "8940035906",
+ currency: "BHD",
+ depositAmount: "$300,000",
+ fees: "$6,000",
+ totalAmount: "$306,000",
+ amountcurrency: "115328.04",
+ status: "Approved",
+ },
+ {
+ id: 4,
+ date: "02-Jan-2024",
+ clientId: "SA00000002",
+ firstName: "Sulaiman",
+ lastName: "AlBassam",
+ country: "Saudi Arabia",
+ phoneNumber: "8226278945",
+ currency: "SAR",
+ depositAmount: "$400,000",
+ fees: "$8,000",
+ totalAmount: "$408,000",
+ amountcurrency: "1530296.67",
+ status: "Rejected",
+ },
+ ]);
+
+ const [bankInvestor, setBankInvestor] = useState([
+ {
+ id: 1,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Completed",
+ },
+ {
+ id: 2,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Incompleted",
+ },
+ {
+ id: 3,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Completed",
+ },
+ {
+ id: 4,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Incompleted",
+ },
+ {
+ id: 5,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Completed",
+ },
+ {
+ id: 6,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Incompleted",
+ },
+ {
+ id: 7,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Incompleted",
+ },
+ {
+ id: 8,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Completed",
+ },
+ {
+ id: 9,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Completed",
+ },
+ {
+ id: 10,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Incompleted",
+ },
+ {
+ id: 10,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Incompleted",
+ },
+ {
+ id: 10,
+ date: "02-Jan-2024",
+ clientId: "SA00000001",
+ firstName: "John",
+ lastName: "David",
+ country: "Saudi Arabia",
+ phoneNumber: "8940035906",
+ mailId: "john@gmail.com",
+ status: "Incompleted",
+ },
+ ]);
+
+ const [manageAcademy, setManageAcademy] = useState([
+ {
+ id: 1,
+ header: "Investing in Private Equity",
+ content: "Private equity investing involve...",
+ bannerImage: "John",
+ },
+ {
+ id: 2,
+ header: "Investing in Private Equity",
+ content: "Private equity investing involve...",
+ bannerImage: "John",
+ },
+ {
+ id: 3,
+ header: "Investing in Private Equity",
+ content: "Private equity investing involve...",
+ bannerImage: "John",
+ },
+ ]);
+
+ const [manageVideo, setManageVideo] = useState([
+ {
+ id: 1,
+ name: "Investing in Private Equity",
+ videoUploaded: "Video.mp4",
+ },
+ ]);
+
+ const [academicDocuments, setAcademicDocuments] = useState([
+ {
+ id: 1,
+ fullName: "Investing in Private Equity",
+ document: "Video.mp4",
+ },
+ ]);
+
+
+ const [users, setUsers] = useState([
+ {
+ id: 1,
+ firstName: "SA00000001",
+ lastName: "John David",
+ emailID: "John",
+ role: "David",
+ phoneNumber:"8940035906",
+ },
+ ]);
+
+
+ const [InvestorWallet, setInvestorWallet] = useState(null);
+
+ // ==============[ prod state ]===============================
+ const [IODetails, setIODetails] = useState(null);
+ const [isIOloading, setIOloading] = useState(false);
+
+ return (
+
+ {children}
+
+ );
+};
+export default GlobalStateProvider;
diff --git a/src/Images/dark-bg.png b/src/Images/dark-bg.png
new file mode 100644
index 0000000..690e6b5
Binary files /dev/null and b/src/Images/dark-bg.png differ
diff --git a/src/Images/light-bg.png b/src/Images/light-bg.png
new file mode 100644
index 0000000..3b23568
Binary files /dev/null and b/src/Images/light-bg.png differ
diff --git a/src/Images/logo.jpg b/src/Images/logo.jpg
new file mode 100644
index 0000000..38dac87
Binary files /dev/null and b/src/Images/logo.jpg differ
diff --git a/src/Images/logoDark.png b/src/Images/logoDark.png
new file mode 100644
index 0000000..cf272a3
Binary files /dev/null and b/src/Images/logoDark.png differ
diff --git a/src/Images/logoDarkMini.png b/src/Images/logoDarkMini.png
new file mode 100644
index 0000000..28e09e7
Binary files /dev/null and b/src/Images/logoDarkMini.png differ
diff --git a/src/Images/logoLight.png b/src/Images/logoLight.png
new file mode 100644
index 0000000..9f0ea48
Binary files /dev/null and b/src/Images/logoLight.png differ
diff --git a/src/Images/miniLogo.jpg b/src/Images/miniLogo.jpg
new file mode 100644
index 0000000..4c2d702
Binary files /dev/null and b/src/Images/miniLogo.jpg differ
diff --git a/src/Images/reactLogo.png b/src/Images/reactLogo.png
new file mode 100644
index 0000000..80d81cf
Binary files /dev/null and b/src/Images/reactLogo.png differ
diff --git a/src/Images/welcomeBanner.gif b/src/Images/welcomeBanner.gif
new file mode 100644
index 0000000..911d066
Binary files /dev/null and b/src/Images/welcomeBanner.gif differ
diff --git a/src/Layout/DefaultLayout.jsx b/src/Layout/DefaultLayout.jsx
new file mode 100644
index 0000000..878b700
--- /dev/null
+++ b/src/Layout/DefaultLayout.jsx
@@ -0,0 +1,563 @@
+import React, { useContext, useEffect, useState } from "react";
+import { BsDot } from "react-icons/bs";
+import { useDispatch } from "react-redux";
+import { RxDotFilled } from "react-icons/rx";
+import {
+ TbArrowBadgeLeftFilled,
+ TbListDetails,
+ TbReportMoney,
+ TbTransactionDollar,
+} from "react-icons/tb";
+import {
+ NavLink,
+ Route,
+ Routes,
+ useLocation,
+ useNavigate,
+} from "react-router-dom";
+import { RouteLink } from "../Routes/Routes";
+import NotFound from "../Pages/NotFound";
+import { nav } from "../Routes/Nav";
+import {
+ Avatar,
+ Box,
+ Text,
+ WrapItem,
+ Popover,
+ Tag,
+ Accordion,
+ AccordionItem,
+ AccordionButton,
+ AccordionIcon,
+ AccordionPanel,
+ Image,
+ Alert,
+ AlertIcon,
+ Breadcrumb,
+ Divider,
+ Button,
+} from "@chakra-ui/react";
+import GlobalStateContext from "../Contexts/GlobalStateContext";
+import Cookies from "js-cookie"; // Import the Cookies library
+import HeaderMain from "../Components/HeaderMain";
+import {
+ RiBankLine,
+ RiExchangeBoxLine,
+ RiFileUserLine,
+ RiMoneyDollarBoxLine,
+} from "react-icons/ri";
+import {
+ MdNotificationsNone,
+ MdOutlineAddChart,
+ MdOutlineTaskAlt,
+} from "react-icons/md";
+import { HiOutlineChartSquareBar } from "react-icons/hi";
+import { GrManual, GrNotification } from "react-icons/gr";
+import { LuContact } from "react-icons/lu";
+import SplashScreen from "../Pages/SplashScreen";
+
+const DashboardLayout = ({ isOnline }) => {
+ const navigate = useNavigate();
+ const dispach = useDispatch();
+ const location = useLocation();
+ const path = location.pathname;
+ const [isDrawerOpen, setIsDrawerOpen] = useState(true);
+ const {
+ setIsAuthenticate,
+ colorMode,
+ toggleColorMode,
+ setSlideFormRight,
+ slideFromRight,
+ } = useContext(GlobalStateContext);
+ const [isSplashVisible, setSplashVisible] = useState(true);
+ const [openIndex, setOpenIndex] = useState(null);
+
+ useEffect(() => {
+ const savedIndex = localStorage.getItem("openAccordionIndex");
+ if (savedIndex !== null) {
+ setOpenIndex(parseInt(savedIndex));
+ }
+ }, []);
+
+ const handleAccordionChange = (index) => {
+ const newIndex = openIndex === index ? null : index;
+ setOpenIndex(newIndex);
+ localStorage.setItem("openAccordionIndex", newIndex);
+ };
+
+ useEffect(() => {
+ // Set a timer to hide the splash screen after 3 seconds
+ const timer = setTimeout(() => {
+ setSplashVisible(false);
+ }, 1000); // 3000ms = 3 seconds
+
+ // Cleanup the timer
+ return () => clearTimeout(timer);
+ }, []);
+
+ const toggleDrawer = () => {
+ setIsDrawerOpen(!isDrawerOpen);
+ };
+
+ const logOutHandler = () => {
+ // dispach(loginUser(false));
+ setIsAuthenticate(false);
+ Cookies.remove("isAuthenticated");
+ localStorage.removeItem("refreshToken");
+ localStorage.removeItem("accessToken");
+ localStorage.removeItem("refreshTokenExp");
+ navigate("/login");
+ };
+
+ // // Function to get the title based on the route
+ const getTitle = () => {
+ switch (true) {
+ case "/":
+ return "👋🏻 Hi, Developers";
+ case path.startsWith("/task"):
+ return (
+
+ Tasks
+
+ );
+ case path.startsWith("/notification"):
+ return (
+
+ Notification
+
+ );
+ case path.startsWith("/exchange-rate"):
+ return (
+
+
+ Echange rate
+
+ );
+ case path.startsWith("/create-io"):
+ if (/^\/create-io\/[A-Za-z0-9_-]+$/.test(path)) {
+ return (
+
+
+ Edit IO
+
+ );
+ }
+ return (
+
+
+ Create IO
+
+ );
+ case path.startsWith("/view-io"):
+ return (
+
+
+ View IO
+
+ );
+ case path.startsWith("/investor-details"):
+ return (
+
+
+ Investor Details
+
+ );
+ case path.startsWith("/investor-transactions"):
+ return (
+
+
+ Investor Transactions
+
+ );
+ case path.startsWith("/deposit-request"):
+ return (
+
+
+ Deposite pending request
+
+ );
+ case path.startsWith("/deposit-history"):
+ return (
+
+
+ Deposite withdrawal request
+
+ );
+ case path.startsWith("/withdraw-request"):
+ return (
+
+
+ Withdrawal pending request
+
+ );
+ case path.startsWith("/withdraw-history"):
+ return (
+
+
+ Withdrawal request
+
+ );
+ case path.startsWith("/investor-request"):
+ return (
+
+
+ Investor pending request
+
+ );
+ case path.startsWith("/investor-history"):
+ return (
+
+
+ Investor request
+
+ );
+ case path.startsWith("/deletion-request"):
+ return (
+
+
+ Deletion pending request
+
+ );
+ case path.startsWith("/deletion-history"):
+ return (
+
+
+ Deletion request
+
+ );
+ case path.startsWith("/bank-investor"):
+ return (
+
+
+ Ban / Unban Investor
+
+ );
+ case path.startsWith("/academy"):
+ return (
+
+
+ Academy
+
+ );
+ case path.startsWith("/notification"):
+ return (
+
+
+ Notification
+
+ );
+ case path.startsWith("/contact"):
+ return (
+
+
+ Contact Details
+
+ );
+ case path.startsWith("/users"):
+ return (
+
+
+ Users
+
+ );
+ case path.startsWith("/bank-details"):
+ return (
+
+
+ Bank Details
+
+ );
+ case path.startsWith("/deletion-request"):
+ return (
+
+
+ Deletion pending request
+
+ );
+ case path.startsWith("/deletion-history"):
+ return (
+
+
+ Deletion request
+
+ );
+ case path.startsWith("/deletion-request"):
+ return (
+
+
+ Deletion pending request
+
+ );
+ case path.startsWith("/deletion-history"):
+ return (
+
+
+ Deletion request
+
+ );
+
+ default:
+ return Home;
+ }
+ };
+
+ if (isSplashVisible) {
+ return ;
+ }
+
+ return (
+
+
+
+
+
+ No Internet !
+
+
+
+
+
+ {nav.map(
+ ({ title, type, Icon, submenu, path, colorCode }, index) => {
+ if (type === "accordion") {
+ return (
+
+
+
+ {/* {Icon && title === "Admin" ? : } */}
+ {Icon && (
+
+ )}
+
+ {title}
+
+
+
+
+
+ {submenu?.map(
+ (
+ {
+ title: subMenuTitle,
+ path: link,
+ icon: SubIcon,
+ colorCode,
+ },
+ i
+ ) => (
+
+
+
+
+ {subMenuTitle}
+
+
+
+ )
+ )}
+
+
+ );
+ } else if (type === "title") {
+ return (
+
+ {title}
+
+ );
+ } else if (type === "single") {
+ return (
+
+ {Icon && }
+
+ {title}
+
+
+ );
+ } else {
+ return null;
+ }
+ }
+ )}
+
+
+
+
+
+ {/* */}
+
+ {/* */}
+
+
+
+
+
+ );
+};
+
+export default DashboardLayout;
+
+const AppContent = () => {
+ return (
+
+ {RouteLink.map(({ path, Component }, index) => (
+ } />
+ ))}
+ } />
+
+ );
+};
diff --git a/src/Layout/animations.jsx b/src/Layout/animations.jsx
new file mode 100644
index 0000000..2d825ae
--- /dev/null
+++ b/src/Layout/animations.jsx
@@ -0,0 +1,23 @@
+import { motion } from "framer-motion";
+
+export const OPACITY_ON_LOAD = {
+ as: motion.div,
+ initial: { opacity: 0 },
+ animate: { opacity: 1 }
+}
+
+export const SLIDE_IN_BOTTOM = {
+ as: motion.div,
+ initial: { opacity: 0, y: 50 },
+ animate: { opacity: 1, y: 0 },
+ transition: { duration: 1, ease: "easeInOut" }
+ };
+
+
+ export const FADE_IN_SCALE_UP = {
+ as: motion.div,
+ initial: { opacity: 0, scale: 0.9 },
+ animate: { opacity: 1, scale: 1 },
+ transition: { duration: 0.5, ease: "easeInOut" }
+ };
+
\ No newline at end of file
diff --git a/src/Pages/Dashbaord.jsx b/src/Pages/Dashbaord.jsx
new file mode 100644
index 0000000..1ed8b29
--- /dev/null
+++ b/src/Pages/Dashbaord.jsx
@@ -0,0 +1,162 @@
+import { Box, HStack, Icon, position, Text, VStack } from '@chakra-ui/react'
+import React from 'react'
+import { HiOutlineChartSquareBar } from 'react-icons/hi'
+import { RiMoneyDollarBoxLine } from 'react-icons/ri'
+import { TbTransactionDollar } from 'react-icons/tb'
+import { VscSymbolClass } from 'react-icons/vsc'
+import { TABLE_PAGINATION } from '../Constants/Paginations'
+import FullscreenLoaders from '../Components/Loaders/FullscreenLoaders'
+import { useGetIOprepopulateDataQuery, useGetIOsQuery } from '../Services/io.service'
+import { useGetInvestorsQuery } from '../Services/investor.details.service'
+import DonutChart from '../Components/Doughnut/DonutChart'
+import { GoDotFill } from "react-icons/go";
+import { useNavigate } from 'react-router-dom'
+import LineChart from '../Components/Doughnut/LineChart'
+import { PiChartLineUpDuotone } from 'react-icons/pi'
+import ApexChart from '../Components/Doughnut/ApexDonut'
+import ApexLine from '../Components/Doughnut/ApexLine'
+import ReactApexChart from 'react-apexcharts'
+import { BsGraphUpArrow } from "react-icons/bs";
+
+
+const Dashbaord = () => {
+ const navigate = useNavigate()
+ const { data, isLoading: isIoPreLoading } = useGetIOprepopulateDataQuery();
+ const { data: IO, isLoading: isIoLoading } = useGetIOsQuery({ page: TABLE_PAGINATION?.page, size: TABLE_PAGINATION?.size });
+ const { data: investorDetails, isInvestorLoading } = useGetInvestorsQuery({ page: TABLE_PAGINATION?.page, size: TABLE_PAGINATION?.size });
+ const sortArrayByStatus = () => {
+ const sortedArrays = {
+ open: [],
+ closed: [],
+ processing: [],
+ draft: []
+ };
+
+ IO?.data?.rows.forEach(item => {
+ const status = item.ioStatus?.statusAdmin;
+ if (status === 'Open') {
+ sortedArrays.open.push(item);
+ } else if (status === 'Closed') {
+ sortedArrays.closed.push(item);
+ } else if (status === 'Processing') {
+ sortedArrays.processing.push(item);
+ } else if (status === 'Draft') {
+ sortedArrays.draft.push(item);
+ }
+ });
+ return sortedArrays;
+ };
+ const statusData = sortArrayByStatus()
+ const chartData = {
+ labels: ['Draft', 'Open', 'Processing', 'Closed',],
+ backgroundColor: ['#3182ce', '#004118', '#D69E2E', '#E53E3E'],
+ values: [statusData?.draft?.length, statusData?.open?.length, statusData?.processing?.length, statusData?.closed?.length]
+ };
+
+
+
+ const series1= [{
+ data: [25, 66, 41, 89, 63, 25, 44, 12, 36, 9, 54]
+ }]
+ const options1= {
+ chart: {
+ type: 'line',
+ position:"absolute",
+ right:0,
+ width: 100,
+ height: 35,
+ sparkline: {
+ enabled: true
+ }
+ },
+ tooltip: {
+ fixed: {
+ enabled: false
+ },
+ x: {
+ show: false
+ },
+ y: {
+ title: {
+ formatter: function (seriesName) {
+ return ''
+ }
+ }
+ },
+ marker: {
+ show: false
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+ return (
+ isIoPreLoading || isIoLoading || isInvestorLoading ? :
+
+
+ navigate("/investor-details")} boxShadow={'lg'} color={"#004118"} p={4} rounded={'xl'} w={'25%'} display={'flex'} bg={'#f5f8f6'} flexDirection={'column'} alignItems={'start'} >
+
+ Total Investors
+ {investorDetails?.data?.totalItems}
+
+ {/* */}
+
+ navigate("/view-io")} boxShadow={'lg'} bg={'#f5f8f6'} color={"#004118"} p={3} rounded={'xl'} w={'25%'} display={'flex'} flexDirection={'column'} alignItems={'start'} >
+
+ Total IO
+ {IO?.data?.totalItems}
+
+
+ navigate("/sponser")} boxShadow={'lg'} bg={'#f5f8f6'} color={"#004118"} p={3} rounded={'xl'} w={'25%'} display={'flex'} flexDirection={'column'} alignItems={'start'} >
+
+ Total sponors
+ {data?.data?.sponsor?.length}
+
+
+ navigate("/investment-type")} boxShadow={'lg'} bg={'#f5f8f6'} color={"#004118"} p={3} rounded={'xl'} w={'25%'} display={'flex'} flexDirection={'column'} alignItems={'start'} >
+
+ Total Investment Type
+ {data?.data?.investmentType?.length}
+
+
+
+
+
+
+ {/* Exchange rate currency */}
+ {/* */}
+
+
+
+
+
+
+
+
+ IO Status
+
+ {/* */}
+ {/* */}
+
+
+ {/* */}
+
+ {chartData?.labels?.map((item, index) => {item})}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default Dashbaord
\ No newline at end of file
diff --git a/src/Pages/Login.jsx b/src/Pages/Login.jsx
new file mode 100644
index 0000000..d7e702c
--- /dev/null
+++ b/src/Pages/Login.jsx
@@ -0,0 +1,289 @@
+import { useNavigate } from "react-router-dom";
+import Input01 from "../Components/Inputs/Input01";
+import { useDispatch, useSelector } from "react-redux";
+import { loginUser } from "../Redux/Slice/auth";
+import { useContext, useEffect, useState } from "react";
+import Button01 from "../Components/Buttons/PrimaryButton";
+import { yupResolver } from "@hookform/resolvers/yup";
+import { useForm } from "react-hook-form";
+import { TiWarning } from "react-icons/ti";
+import Loader01 from "../Components/Loaders/Loader01";
+import Asset1 from "../assets/loginpat.png";
+import logo from "../assets/logoOptifii.svg";
+import {
+ Box,
+ Button,
+ FormControl,
+ FormLabel,
+ Image,
+ Input,
+ InputGroup,
+ InputRightElement,
+ Text,
+ useToast,
+} from "@chakra-ui/react";
+import GlobalStateContext from "../Contexts/GlobalStateContext";
+import Cookies from "js-cookie";
+import ToastBox from "../Components/ToastBox";
+import { useLoginMutation } from "../Services/token.serivce";
+
+
+// import { yupResolver } from "@hookform/resolvers/yup";
+import * as Yup from "yup";
+
+
+const validationSchema = Yup.object().shape({
+ emailAddress: Yup.string()
+ .email("Invalid email address")
+ .required("Email address is required"),
+ password_hash: Yup.string().required("Password is required"),
+});
+
+
+const Login = () => {
+ const [show, setShow] = useState(false);
+ const handleClick = () => setShow(!show);
+ const { isAuthenticate, setIsAuthenticate } = useContext(GlobalStateContext);
+ const toast = useToast();
+
+ const [isLoading, setIsLoading] = useState(false);
+
+ const navigate = useNavigate();
+ const dispatch = useDispatch();
+
+ const [login] = useLoginMutation()
+
+ useEffect(() => {
+ if (isAuthenticate) {
+ navigate("/sponser");
+ }
+ }, [navigate, isAuthenticate]);
+
+ const onSubmit = async (value) => {
+ setIsLoading(true);
+ // try {
+ // // const res = await login(value).unwrap();
+
+ // if (res?.statusCode === 200) {
+ // toast({
+ // render: () => (
+ //
+ // ),
+ // })
+ // setIsLoading(false);
+ // setIsAuthenticate(true);
+ // Cookies.set("isAuthenticated", true, { expires: 7 });
+ // navigate("/sponser");
+ // reset();
+ // }
+
+ // } catch (err) {
+ // if (err) {
+ // toast({
+ // render: () => (
+ //
+ // ),
+ // });
+ // setIsLoading(false);
+ // }
+ // }
+
+
+
+
+
+
+ if (value.emailAddress === "admin@optifii.com" && value.password_hash === "Admin@123") {
+ return setTimeout(() => {
+ // dispatch(loginUser(true));
+ setIsAuthenticate(true);
+ setIsLoading(false);
+ toast({
+ render: () => (
+
+ ),
+ });
+
+ Cookies.set("isAuthenticated", true, { expires: 7 });
+ navigate("/");
+ }, 2000); // 3-second delay
+ } else {
+ return setTimeout(() => {
+ // dispatch(loginUser(true));
+ setIsAuthenticate(false);
+ setIsLoading(false);
+
+ toast({
+ render: () => (
+
+ ),
+ });
+ reset();
+ navigate("/login");
+ }, 2000);
+ }
+ };
+
+ const {
+ register,
+ handleSubmit,
+ reset,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(validationSchema),
+ });
+
+ console.log(errors);
+
+
+ return (
+
+
+
+
+
+
+
+
+
+ Hello Again!
+
+
+ Welcome Back
+
+
+
+
+ {/*
+ E-mail *
+ */}
+
+
+ {errors.emailAddress && (
+
+ {errors.emailAddress.message}
+
+ )}
+
+
+
+ {/*
+ Password *
+ */}
+
+
+
+
+
+
+
+ {errors.password_hash && (
+
+ {errors.password_hash.message}
+
+ )}
+
+
+
+
+ Forgot Password
+
+
+ Optifii v1.0.0
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Login;
diff --git a/src/Pages/NoInternetScreen.jsx b/src/Pages/NoInternetScreen.jsx
new file mode 100644
index 0000000..c469cad
--- /dev/null
+++ b/src/Pages/NoInternetScreen.jsx
@@ -0,0 +1,24 @@
+import { Box, Image, Text } from '@chakra-ui/react'
+import noInternet from "../assets/noInternet.jpg"
+
+const NoInternetScreen = () => {
+ return (
+
+
+ {/* No Internet ! */}
+
+ Tanami v1.0
+
+
+ )
+}
+
+export default NoInternetScreen
\ No newline at end of file
diff --git a/src/Pages/NotFound.jsx b/src/Pages/NotFound.jsx
new file mode 100644
index 0000000..9a0e272
--- /dev/null
+++ b/src/Pages/NotFound.jsx
@@ -0,0 +1,22 @@
+import { Box, Image, Text } from "@chakra-ui/react"
+import error from "../assets/Error.svg"
+import robot from "../assets/optifii_logo.png"
+// import robot from "../assets/robot.png"
+const NotFound = () => {
+ return (
+
+
+
+ The requested URL was not found on this server.
+
+ )
+}
+
+export default NotFound
\ No newline at end of file
diff --git a/src/Pages/PaymentFailed.jsx b/src/Pages/PaymentFailed.jsx
new file mode 100644
index 0000000..7795279
--- /dev/null
+++ b/src/Pages/PaymentFailed.jsx
@@ -0,0 +1,15 @@
+import React from "react";
+import { Box, Button, Heading, Image, Img, Text } from "@chakra-ui/react";
+import failed from "../assets/failed.gif";
+
+const PaymentFailed = () => {
+ return (
+
+
+ Payment Failed !!
+ Your payment was Failed
+
+ );
+};
+
+export default PaymentFailed;
diff --git a/src/Pages/PaymentSuccess.jsx b/src/Pages/PaymentSuccess.jsx
new file mode 100644
index 0000000..ab24822
--- /dev/null
+++ b/src/Pages/PaymentSuccess.jsx
@@ -0,0 +1,15 @@
+import React from "react";
+import { Box, Button, Heading, Image, Img, Text } from "@chakra-ui/react";
+import success from "../assets/successimg.gif";
+
+const Welcome = () => {
+ return (
+
+
+ SuccessFul !!
+ Your payment was done successfully
+
+ );
+};
+
+export default Welcome;
diff --git a/src/Pages/SplashScreen.jsx b/src/Pages/SplashScreen.jsx
new file mode 100644
index 0000000..9a86518
--- /dev/null
+++ b/src/Pages/SplashScreen.jsx
@@ -0,0 +1,21 @@
+import { Box, Image, Spinner, Text } from '@chakra-ui/react'
+import React from 'react'
+import logo from '../assets/logoOptifii.svg'
+
+const SplashScreen = () => {
+ return (
+
+
+
+
+ )
+}
+
+export default SplashScreen
\ No newline at end of file
diff --git a/src/Pages/UnderConstruction.jsx b/src/Pages/UnderConstruction.jsx
new file mode 100644
index 0000000..8349eb6
--- /dev/null
+++ b/src/Pages/UnderConstruction.jsx
@@ -0,0 +1,22 @@
+import { Box, Image, Text } from '@chakra-ui/react'
+import React from 'react'
+// import noInternet from "../assets/Error.svg"
+import robot from "../assets/robot.png"
+
+const UnderConstruction = ({title, h}) => {
+ return (
+
+
+ 🚧 Building Something Amazing Just for You! 🚧
+
+ )
+}
+
+export default UnderConstruction
\ No newline at end of file
diff --git a/src/Pages/WelcomePage.jsx b/src/Pages/WelcomePage.jsx
new file mode 100644
index 0000000..b04a4dc
--- /dev/null
+++ b/src/Pages/WelcomePage.jsx
@@ -0,0 +1,18 @@
+import { Box, Text } from "@chakra-ui/react";
+import React from "react";
+import welcome from '../Images/welcomeBanner.gif'
+
+const WelcomePage = () => {
+ return (
+
+
+ );
+};
+
+export default WelcomePage;
diff --git a/src/Redux/Slice/auth.js b/src/Redux/Slice/auth.js
new file mode 100644
index 0000000..ccc070e
--- /dev/null
+++ b/src/Redux/Slice/auth.js
@@ -0,0 +1,80 @@
+import { createSlice } from "@reduxjs/toolkit";
+
+// export const AuthMe = createAsyncThunk(
+// "auth/Me",
+// async (args, { rejectWithValue, dispatch }) => {
+// try {
+// const res = await authMeService();
+// if (res?.status === 200) return res.data;
+// return rejectWithValue(res);
+// } catch (err) {
+// return rejectWithValue(err.response);
+// }
+// }
+// );
+
+const initialState = {
+ isLoading: true,
+ isError: false,
+ error: null,
+ message: null,
+ isAuthenticate: false,
+};
+
+const authMeSlice = createSlice({
+ name: "auth",
+ initialState: initialState,
+ reducers: {
+ logoutUser: (state, action) => {
+ state = initialState;
+ },
+ loginUser: (state, action) => {
+ state.isAuthenticate = action.payload;
+ },
+ },
+ // extraReducers: (builder) => {
+ // builder
+ // .addCase(AuthMe.pending, (state) => {
+ // state.isLoading = true;
+ // })
+ // .addCase(AuthMe.fulfilled, (state, action) => {
+ // state.isLoading = false;
+ // state.profileData = action.payload?.data;
+ // })
+ // .addCase(AuthMe.rejected, (state, action) => {
+ // state.isLoading = false;
+ // })
+ // .addCase(AuthReGenrateAccessToken.pending, (state) => {
+ // state.isLoading = true;
+ // })
+ // .addCase(AuthReGenrateAccessToken.fulfilled, (state, action) => {
+ // state.isLoading = false;
+ // state.accessToken = action.payload?.accessToken || null;
+ // })
+ // .addCase(AuthReGenrateAccessToken.rejected, (state) => {
+ // state.isAuthenticate = false;
+ // state.isLoading = false;
+ // })
+ // .addCase(AuthLogin.pending, (state) => {
+ // state.isLoading = true;
+ // })
+ // .addCase(AuthLogin.fulfilled, (state, action) => {
+ // state.isLoading = false;
+ // state.isAuthenticate = true;
+ // state.role = action.payload.role[0].title;
+ // state.group = action.payload.group[0].title;
+ // state.actions = action.payload.role[0].actions;
+ // state.resources = action.payload.resources;
+ // state.accessToken = action.payload.accessToken;
+ // state.refreshToken = action.payload.refreshToken;
+ // })
+ // .addCase(AuthLogin.rejected, (state, action) => {
+ // state.isLoading = false;
+ // state.isError = true;
+ // state.error = action.payload;
+ // });
+ // },
+});
+
+export const { logoutUser, loginUser } = authMeSlice.actions;
+export default authMeSlice.reducer;
diff --git a/src/Redux/Store.js b/src/Redux/Store.js
new file mode 100644
index 0000000..3350ae4
--- /dev/null
+++ b/src/Redux/Store.js
@@ -0,0 +1,43 @@
+import { configureStore } from "@reduxjs/toolkit";
+import { combineReducers } from "redux";
+import { persistReducer, persistStore } from "redux-persist";
+import storage from "redux-persist/lib/storage"; // defaults to localStorage for web
+import { encryptTransform } from "redux-persist-transform-encrypt";
+import auth from "./Slice/auth";
+
+// Import your reducers and combine them
+const rootReducer = combineReducers({
+ // Add your reducers here
+ auth: auth,
+});
+
+// Define encryption for persisted state
+const encryptor = encryptTransform({
+ secretKey: "webStore",
+ onError: function (error) {
+ // console.log(error);
+ },
+});
+
+// Configuration for persisting the Redux store
+const persistConfig = {
+ key: "root",
+ storage,
+ transforms: [encryptor],
+};
+
+// Create a persisted reducer
+const persistedReducer = persistReducer(persistConfig, rootReducer);
+
+// Create the Redux store
+export const store = configureStore({
+ reducer: persistedReducer,
+ middleware: (getDefaultMiddleware) =>
+ getDefaultMiddleware({
+ serializableCheck: false,
+ }), // This line already includes thunk middleware
+});
+
+// Export store state and persistor
+export const RootState = store.getState();
+export const persistor = persistStore(store);
diff --git a/src/Routes/Nav.js b/src/Routes/Nav.js
new file mode 100644
index 0000000..9e7bef8
--- /dev/null
+++ b/src/Routes/Nav.js
@@ -0,0 +1,353 @@
+import { HiOutlineNewspaper } from "react-icons/hi";
+import { TbBrandMedium, TbChartHistogram, TbLayoutDashboard, TbReportMoney, TbUsersPlus } from "react-icons/tb";
+import {
+ RiBankLine,
+ RiDashboardLine,
+ RiFileUserLine,
+ RiMoneyDollarBoxLine,
+} from "react-icons/ri";
+import { RiExchangeBoxLine } from "react-icons/ri";
+import { VscGitPullRequestGoToChanges, VscSymbolClass } from "react-icons/vsc";
+import { FiUsers } from "react-icons/fi";
+import { PiCrown, PiHandCoins } from "react-icons/pi";
+import { MdOutlineAddChart, MdOutlineAdminPanelSettings } from "react-icons/md";
+import { HiOutlineChartSquareBar } from "react-icons/hi";
+import { TbListDetails } from "react-icons/tb";
+import { TbTransactionDollar } from "react-icons/tb";
+import { TbCalendarDollar } from "react-icons/tb";
+import { TbDeviceDesktopDollar } from "react-icons/tb";
+import { BiGift, BiMoneyWithdraw } from "react-icons/bi";
+import { GrDocumentUpdate, GrManual } from "react-icons/gr";
+import { MdBrowserUpdated } from "react-icons/md";
+import { AiOutlineUserDelete } from "react-icons/ai";
+import { MdNotificationsNone } from "react-icons/md";
+import { SiAcademia } from "react-icons/si";
+import { LuContact } from "react-icons/lu";
+import { LiaCrownSolid } from "react-icons/lia";
+import { PiCrownDuotone } from "react-icons/pi";
+import { IoCardOutline } from "react-icons/io5";
+import { HiOutlineGiftTop } from "react-icons/hi2";
+import { FcOnlineSupport } from "react-icons/fc";
+
+export const nav = [
+ // {
+ // title: "Dashboard",
+ // type: "single",
+ // path: "/",
+ // Icon: TbLayoutDashboard,
+ // },
+ {
+ title: "MENU",
+ type: "title",
+ },
+ {
+ title: "Dashboard",
+ type: "single",
+ path: "/dashboard",
+ Icon: RiDashboardLine,
+ },
+ {
+ title: "Corporates",
+ submenu: [
+ {
+ title: "Registered Corporates",
+ path: "/sponser",
+ },
+ {
+ title: "New Corporates Request",
+ path: "/investment-type",
+ },
+ ],
+ type: "accordion",
+ Icon: TbUsersPlus,
+ },
+ {
+ title: "Benifits Cards",
+ type: "single",
+ path: "/logout",
+ Icon: IoCardOutline,
+ },
+ {
+ title: "Gift Card Management",
+ type: "single",
+ path: "/gift-card-management",
+ Icon: HiOutlineGiftTop,
+ },
+ {
+ title: "Voucher Management",
+ type: "single",
+ path: "/voucher-management",
+ Icon: BiGift,
+ },
+ {
+ title: "Marketing Management",
+ submenu: [
+ {
+ title: "FAQ",
+ path: "/manage-FAQ",
+ },
+ {
+ title: "News & Articles",
+ path: "/manage-news-& -articlesManage-news-&-articles",
+ },
+ {
+ title: "About Us",
+ path: "/manage-about-us",
+ },
+ {
+ title: "Terms & Conditions",
+ path: "/manage-terms-&-conditions",
+ },
+ {
+ title: "Privacy Policy",
+ path: "/manage-privacy-policy",
+ },
+ ],
+ type: "accordion",
+ Icon: PiHandCoins,
+ },
+ {
+ title: "Support & Ticketing Module",
+ type: "single",
+ path: "/support-&-ticketing-module",
+ Icon: FcOnlineSupport,
+ },
+ // {
+ // title: "Benifits Cards",
+ // submenu: [
+ // {
+ // title: "Create IO",
+ // path: "/create-io",
+ // icon: MdOutlineAddChart,
+ // },
+ // {
+ // title: "View IO",
+ // path: "/view-io",
+ // icon: HiOutlineChartSquareBar,
+ // },
+ // ],
+ // type: "accordion",
+ // Icon: IoCardOutline,
+ // },
+ // {
+ // title: "Investor",
+ // submenu: [
+ // {
+ // title: "Investor Details",
+ // path: "/investor-details",
+ // icon: TbListDetails,
+ // },
+ // // {
+ // // title: "Investor Transactions",
+ // // path: "/investor-transactions",
+ // // icon: TbTransactionDollar,
+ // // },
+ // ],
+ // type: "accordion",
+ // Icon: TbCalendarDollar,
+ // },
+ // {
+ // title: "INVESTORS REQUEST",
+ // type: "title",
+ // },
+ // {
+ // title: "Deposit",
+ // submenu: [
+ // {
+ // title: "Pending Request",
+ // path: "/deposit-request",
+ // icon: RiMoneyDollarBoxLine,
+ // },
+ // {
+ // title: "View History",
+ // path: "/deposit-history",
+ // icon: RiExchangeBoxLine,
+ // },
+ // ],
+ // type: "accordion",
+ // Icon: BiMoneyWithdraw,
+ // },
+ // {
+ // title: "Withdrawal",
+ // submenu: [
+ // {
+ // title: "Pending Request",
+ // path: "/withdraw-request",
+ // icon: RiMoneyDollarBoxLine,
+ // },
+ // {
+ // title: "View History",
+ // path: "/withdraw-history",
+ // icon: RiExchangeBoxLine,
+ // },
+ // ],
+ // type: "accordion",
+ // Icon: BiMoneyWithdraw,
+ // },
+ // {
+ // title: "Upgradation",
+ // submenu: [
+ // {
+ // title: "Pending Request",
+ // path: "/investor-request",
+ // icon: RiMoneyDollarBoxLine,
+ // },
+ // {
+ // title: "View History",
+ // path: "/investor-history",
+ // icon: RiExchangeBoxLine,
+ // },
+ // ],
+ // type: "accordion",
+ // Icon: MdBrowserUpdated,
+ // },
+ // {
+ // title: "Account",
+ // submenu: [
+ // {
+ // title: "Pending Request",
+ // path: "/deletion-request",
+ // icon: RiMoneyDollarBoxLine,
+ // },
+ // {
+ // title: "View History",
+ // path: "/deletion-history",
+ // icon: RiExchangeBoxLine,
+ // },
+ // ],
+ // type: "accordion",
+ // Icon: AiOutlineUserDelete,
+ // },
+ // {
+ // title: "MANAGE ADMIN",
+ // type: "title",
+ // },
+ // {
+ // title: "Admin",
+ // submenu: [
+ // {
+ // title: "Ban / Unban Investor",
+ // path: "/bank-investor",
+ // icon: TbReportMoney,
+ // },
+ // {
+ // title: "Academy",
+ // path: "/academy",
+ // icon: GrManual,
+ // },
+ // {
+ // title: "Notification",
+ // path: "/notification",
+ // icon: MdNotificationsNone,
+ // },
+ // {
+ // title: "Contact Details",
+ // path: "/contact",
+ // icon: LuContact,
+ // },
+ // {
+ // title: "Users",
+ // path: "/users",
+ // icon: RiFileUserLine,
+ // },
+ // {
+ // title: "Bank Details",
+ // path: "/bank-details",
+ // icon: RiBankLine,
+ // },
+ // ],
+ // type: "accordion",
+ // Icon: MdOutlineAdminPanelSettings,
+ // },
+ {
+ title: "Logout",
+ type: "single",
+ path: "/login",
+ Icon: HiOutlineNewspaper,
+ },
+];
+
+export const nestedNav = [
+ {
+ title: "MAIN MENU",
+ type: "accordion",
+ accArray: [
+ {
+ title: "Master",
+ submenu: [
+ {
+ title: "Sponser",
+ path: "/sponser",
+ icon: RiMoneyDollarBoxLine,
+ },
+ {
+ title: "Exchange rate",
+ path: "/exchange-rate",
+ icon: RiExchangeBoxLine,
+ },
+ {
+ title: "Asset classes",
+ path: "/view",
+ icon: VscSymbolClass,
+ },
+ ],
+ type: "accordion",
+ Icon: TbBrandMedium,
+ },
+ {
+ title: "User",
+ submenu: [
+ {
+ title: "Sponser",
+ path: "/loop",
+ icon: TbBrandMedium,
+ },
+ {
+ title: "Class",
+ path: "/class",
+ icon: TbBrandMedium,
+ },
+ {
+ title: "View",
+ path: "/view",
+ icon: TbBrandMedium,
+ },
+ ],
+ type: "accordion",
+ Icon: HiOutlineNewspaper,
+ },
+ ],
+ },
+ {
+ title: "User",
+ submenu: [
+ {
+ title: "Sponser",
+ path: "/loop",
+ icon: TbBrandMedium,
+ },
+ {
+ title: "Class",
+ path: "/class",
+ icon: TbBrandMedium,
+ },
+ {
+ title: "View",
+ path: "/view",
+ icon: TbBrandMedium,
+ },
+ ],
+ type: "accordion",
+ Icon: FiUsers,
+ },
+ {
+ title: "SPONSER",
+ type: "title",
+ },
+ {
+ title: "Single Link",
+ type: "single",
+ path: "/",
+ Icon: HiOutlineNewspaper,
+ },
+];
diff --git a/src/Routes/PrivateRoute.jsx b/src/Routes/PrivateRoute.jsx
new file mode 100644
index 0000000..bd2e149
--- /dev/null
+++ b/src/Routes/PrivateRoute.jsx
@@ -0,0 +1,18 @@
+import React, { useContext } from 'react';
+import { Navigate, Outlet, useNavigate } from 'react-router-dom';
+import GlobalStateContext from '../Contexts/GlobalStateContext';
+
+
+const PrivateRoute = ({ children }) => {
+ const navigate = useNavigate()
+const { isAuthenticate } = useContext(GlobalStateContext);
+const isAuthenticatedInCookie = Cookies.get("isAuthenticated");
+
+
+ if (!isAuthenticate && isAuthenticatedInCookie !== "true") {
+ return navigate('/login');
+ }
+ return children;
+};
+
+export default PrivateRoute;
\ No newline at end of file
diff --git a/src/Routes/Routes.js b/src/Routes/Routes.js
new file mode 100644
index 0000000..89dd127
--- /dev/null
+++ b/src/Routes/Routes.js
@@ -0,0 +1,9 @@
+
+import NotFound from "../Pages/NotFound";
+import Welcome from "../Pages/PaymentSuccess";
+
+export const RouteLink = [
+ // =============[ Tanami ]================
+ // ===============[ Management]===============
+ { path: "/", Component: NotFound },
+];
diff --git a/src/Services/Key.merits.service.js b/src/Services/Key.merits.service.js
new file mode 100644
index 0000000..c90ff10
--- /dev/null
+++ b/src/Services/Key.merits.service.js
@@ -0,0 +1,42 @@
+// io.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+export const keyMerits = createApi({
+ reducerPath: "ioService",
+ baseQuery: baseQuery,
+ tagTypes: ["getKeyMerits"],
+ endpoints: (builder) => ({
+ // =====[get]
+ getKeyMerits: builder.query({
+ query: (id) => `/io/admin/key-merits/${id}`,
+ providesTags: ["getKeyMerits"],
+ }),
+
+
+
+
+
+
+ setDisplayOrder: builder.mutation({
+ query: ({ data }) => ({
+ url: `/io/admin/key-merits/resetDisplayOrder`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetKeyMeritsQuery,
+ useSetDisplayOrderMutation
+} =
+keyMerits;
diff --git a/src/Services/api.service.js b/src/Services/api.service.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/Services/ban.investor.service.js b/src/Services/ban.investor.service.js
new file mode 100644
index 0000000..c16fa90
--- /dev/null
+++ b/src/Services/ban.investor.service.js
@@ -0,0 +1,47 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const banInvestorDetails = createApi({
+ reducerPath: "banInvestorDetails",
+ baseQuery: baseQuery,
+ tagTypes: ["getBanInvestor", "getUnbanInvestor"],
+ endpoints: (builder) => ({
+ getInvestor: builder.query({
+ query: () => `/investorDetails/admin`,
+ providesTags: ["getBanInvestor"],
+ }),
+
+ getUnbanInvestor: builder.query({
+ query: () => `/investorDetails/admin/getAllUnbanned`,
+ providesTags: ["getBanInvestor"],
+ }),
+
+ getbanInvestor: builder.query({
+ query: () => `/investorDetails/admin/getAllBanned`,
+ providesTags: ["getBanInvestor"],
+ }),
+
+ updateUnban: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/investorDetails/admin/unBanById/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getBanInvestor"],
+ }),
+
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetUnbanInvestorQuery,
+ useGetInvestorQuery,
+ useGetbanInvestorQuery,
+ useUpdateUnbanMutation,
+} = banInvestorDetails;
diff --git a/src/Services/bank.details.service.js b/src/Services/bank.details.service.js
new file mode 100644
index 0000000..9031c99
--- /dev/null
+++ b/src/Services/bank.details.service.js
@@ -0,0 +1,43 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const bankDetails = createApi({
+ reducerPath: "bankDetails",
+ baseQuery: baseQuery,
+ tagTypes: ["getBank"],
+
+ endpoints: (builder) => ({
+ getBank: builder.query({
+ query: ({ page, size }) =>
+ `/bankDetails/admin/?page=${page}&size=${size}`,
+ providesTags: ["getBank"],
+ }),
+
+ updateBankDetails: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/bankDetails/admin/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getBank"],
+ }),
+
+ getBankDetails: builder.query({
+ query: ({ data, id }) => ({
+ url: `/bankDetails/admin/${id}`,
+ method: "GET",
+ body: data,
+ }),
+ invalidatesTags: ["getBank"],
+ }),
+
+ }),
+});
+
+// Export hooks for usage in functional components
+export const { useGetBankQuery, useUpdateBankDetailsMutation,useGetBankDetailsQuery } = bankDetails;
diff --git a/src/Services/contact.service.js b/src/Services/contact.service.js
new file mode 100644
index 0000000..241c657
--- /dev/null
+++ b/src/Services/contact.service.js
@@ -0,0 +1,37 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const contact = createApi({
+ reducerPath: "contact",
+ baseQuery: baseQuery,
+ tagTypes: ["getContact"],
+ endpoints: (builder) => ({
+
+ getContact: builder.query({
+ query: () =>
+ `/contactDetails/admin`,
+ providesTags: ["getContact"],
+ }),
+
+
+ // ========[Update Investment]=======
+
+ updateContact: builder.mutation({
+ query: (data) => ({
+ url: `/contactDetails/admin/`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getContact"],
+ }),
+
+ }),
+});
+
+// Export hooks for usage in functional components
+export const { useGetContactQuery, useUpdateContactMutation } = contact;
diff --git a/src/Services/delete.request.service.js b/src/Services/delete.request.service.js
new file mode 100644
index 0000000..61e657f
--- /dev/null
+++ b/src/Services/delete.request.service.js
@@ -0,0 +1,57 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const deleteRequest = createApi({
+ reducerPath: "deleteRequest",
+ baseQuery: baseQuery,
+ tagTypes: ["getDeleteRequest", "getDeleteHistory"],
+ endpoints: (builder) => ({
+
+
+ getDeleteRequest: builder.query({
+ query: () => `/account/admin/pending-request`,
+ providesTags: ["getDepositRequest"],
+ }),
+
+ getDeleteRequestById: builder.query({
+ query: (id) => `/account/admin/detail/${id}`,
+ }),
+
+ approveDepositRequest: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/account/admin/approved-request/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getDeleteRequest", "getDeleteHistory"],
+ }),
+
+ deleteReject: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/deposit/admin/rejected/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getDeleteRequest", "getDeleteHistory"],
+ }),
+
+ getDeleteHistory: builder.query({
+ query: () => `/account/admin/history`,
+ providesTags: ["getDeleteHistory"],
+ }),
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetDeleteRequestQuery,
+ useGetDeleteRequestByIdQuery,
+ useApproveDepositRequestMutation,
+ useGetDeleteHistoryQuery
+
+} = deleteRequest;
diff --git a/src/Services/deposit.request.service.js b/src/Services/deposit.request.service.js
new file mode 100644
index 0000000..65a77fb
--- /dev/null
+++ b/src/Services/deposit.request.service.js
@@ -0,0 +1,55 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const depositRequest = createApi({
+ reducerPath: "depositRequest",
+ baseQuery: baseQuery,
+ tagTypes: ["getDepositRequest", "getDepositHistory"],
+ endpoints: (builder) => ({
+ getDepositRequest: builder.query({
+ query: ({page, size}) => `/deposit/admin/pending-requests?page=${page}&size=${size}`,
+ providesTags: ["getDepositRequest"],
+ }),
+
+ getDepositRequestById: builder.query({
+ query: (id) => `/deposit/admin/getById/${id}`,
+ }),
+
+ updateDepositRequest: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/deposit/admin/approved/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getDepositRequest", "getDepositHistory"],
+ }),
+
+ depositReject: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/deposit/admin/rejected/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getDepositRequest", "getDepositHistory"],
+ }),
+
+ getDepositHistory: builder.query({
+ query: ({page, size}) => `/deposit/admin/history?page=${page}&size=${size}`,
+ providesTags: ["getDepositHistory"],
+ }),
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetDepositRequestQuery,
+ useGetDepositRequestByIdQuery,
+ useUpdateDepositRequestMutation,
+ useDepositRejectMutation,
+ useGetDepositHistoryQuery,
+} = depositRequest;
diff --git a/src/Services/deposite.service.js b/src/Services/deposite.service.js
new file mode 100644
index 0000000..a782d91
--- /dev/null
+++ b/src/Services/deposite.service.js
@@ -0,0 +1,101 @@
+//sponser.service
+// Need to use the React-specific entry point to import createApi
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+import { api } from "./api.service";
+
+const baseUrl = api?.defaults.baseURL;
+
+// const baseUrl = `${import.meta.env.VITE_API_BASE_URL}/${import.meta.env.VITE_API_VERSION}`
+
+// Define a service using a base URL and expected endpoints
+export const deposite = createApi({
+ reducerPath: "deposite",
+ baseQuery: fetchBaseQuery({ baseUrl: baseUrl }),
+ tagTypes: ["gtDeposite"],
+ endpoints: (builder) => ({
+
+
+
+ // ======[Get All]=====
+
+ getSponserMaster: builder.query({
+ query: ({ page, size }) => `/sponsor/admin?page=${page}&size=${size}`,
+ providesTags: ["getSponser"],
+ }),
+
+
+ // ========[Get Active]========
+
+ getActiveSponserMaster: builder.query({
+ query: () => `/sponsor/admin/active`,
+ providesTags: ["getSponser"],
+ }),
+
+ getSponserMasterActive: builder.query({
+ query: () => "/sponsor/admin/active",
+ }),
+
+
+ // ======[Get ID]=====
+
+ getSponserById: builder.query({
+ query: (id) => `/sponsor/admin/${id}`,
+ providesTags: ["getSponser"],
+ }),
+
+ // ========[Toggle Status]========
+
+ toggleStatus: builder.mutation({
+ query: ({ id }) => ({
+ url: `/sponsor/admin/toggle-status/${id}`,
+ method: "PATCH",
+ }),
+ invalidatesTags: ["getSponser"],
+ }),
+
+ // ========[Create Sponser]========
+
+ createSponser: builder.mutation({
+ query: (data) => ({
+ url: `/sponsor/admin`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getSponser"],
+ }),
+
+ // ========[Update Sponser]========
+
+ updateSponser: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/sponsor/admin/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getSponser"],
+ }),
+
+ // ========[Delete Sponser]========
+
+ deleteSponser: builder.mutation({
+ query: (id) => ({
+ url: `/sponsor/admin/delete/${id}`,
+ method: "DELETE",
+ }),
+ invalidatesTags: ["getSponser"],
+ }),
+
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetSponserMasterQuery,
+ useGetSponserMasterActiveQuery,
+ useToggleStatusMutation,
+ useCreateSponserMutation,
+ useUpdateSponserMutation,
+ useGetSponserByIdQuery,
+ useDeleteSponserMutation,
+ useGetActiveSponserMasterQuery
+} = sponserMaster;
diff --git a/src/Services/drawal.request.service.js b/src/Services/drawal.request.service.js
new file mode 100644
index 0000000..11c87c1
--- /dev/null
+++ b/src/Services/drawal.request.service.js
@@ -0,0 +1,56 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const drawalRequest = createApi({
+ reducerPath: "drawalRequest",
+ baseQuery: baseQuery,
+ tagTypes: ["getDrawalRequest", "getDepositHistory"],
+ endpoints: (builder) => ({
+
+ getDrawalRequest: builder.query({
+ query: () => `/withdrawal/admin`,
+ providesTags: ["getDrawalRequest"],
+ }),
+
+ getDrawalRequestById: builder.query({
+ query: (id) => `/withdrawal/admin/getById/${id}`,
+ }),
+
+ updateDrawalRequest: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/withdrawal/admin/updateApprove/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getDrawalRequest", "getDepositHistory"],
+ }),
+
+ depositReject: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/deposit/admin/rejected/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getDepositRequest", "getDepositHistory"],
+ }),
+
+ getDrawalHistory: builder.query({
+ query: () => `/withdrawal/admin/history`,
+ providesTags: ["getDepositHistory"],
+ }),
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetDrawalRequestQuery,
+ useUpdateDrawalRequestMutation,
+ useGetDrawalRequestByIdQuery,
+ useDepositRejectMutation,
+ useGetDrawalHistoryQuery
+} = drawalRequest;
diff --git a/src/Services/exchange.rate.service.js b/src/Services/exchange.rate.service.js
new file mode 100644
index 0000000..79c40bb
--- /dev/null
+++ b/src/Services/exchange.rate.service.js
@@ -0,0 +1,49 @@
+// exchangeRate.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const exchangeRate = createApi({
+ reducerPath: "exchangeRate",
+ baseQuery: baseQuery,
+ tagTypes: ["getAllExchangeRate", "getExchangeById"],
+
+ endpoints: (builder) => ({
+
+ getAllExchangeRates: builder.query({
+ query: ({ page, size }) =>
+ `/currencyExchange/admin?page=${page}&size=${size}`,
+ providesTags: ["getAllExchangeRate"],
+ }),
+
+ getExchangeRateById: builder.query({
+ query: (id) => `/currencyExchange/admin/${id}`,
+ providesTags: ["getExchangeById"],
+ }),
+
+ updateExchangeRate: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/currencyExchange/admin/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getAllExchangeRate"],
+ }),
+
+ getCurrencyHistoryById: builder.query({
+ query: (id) => `/currencyExchange/admin/history/${id}`,
+ providesTags: ["getAllExchangeRate"],
+ }),
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetAllExchangeRatesQuery,
+ useGetExchangeRateByIdQuery,
+ useUpdateExchangeRateMutation,
+ useGetCurrencyHistoryByIdQuery,
+} = exchangeRate;
diff --git a/src/Services/investment.documents.service.js b/src/Services/investment.documents.service.js
new file mode 100644
index 0000000..ddc439b
--- /dev/null
+++ b/src/Services/investment.documents.service.js
@@ -0,0 +1,61 @@
+// io.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+export const ioService = createApi({
+ reducerPath: "ioService",
+ baseQuery: baseQuery,
+ tagTypes: ["getInvestmentDocuments"],
+
+
+
+ endpoints: (builder) => ({
+ // =====[get]
+ getInvestmentDocuments: builder.query({
+ query: ({id}) => `/io/admin/document/${id}`,
+ providesTags: ["getInvestmentDocuments"],
+ }),
+
+
+
+
+
+
+ // =====[create]
+ createInvestmentDocuments: builder.mutation({
+ query: ({data, id}) => ({
+ url: `/io/admin/document/${id}`,
+ method: "POST",
+ body: data,
+ }),
+
+ invalidatesTags: ["getInvestmentDocuments"],
+ }),
+
+
+
+ updateIO: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getInvestmentDocuments"],
+ }),
+
+
+
+
+
+
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useCreateInvestmentDocumentsMutation,
+} =
+ ioService;
diff --git a/src/Services/investment.type.service.js b/src/Services/investment.type.service.js
new file mode 100644
index 0000000..1dbc1e1
--- /dev/null
+++ b/src/Services/investment.type.service.js
@@ -0,0 +1,72 @@
+// // investmentType.service.js
+// import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// // import { api } from "./api.service";
+// import { baseQuery } from "./token.serivce";
+
+// // const baseUrl = api?.defaults.baseURL;
+
+// // Define a service using a base URL and expected endpoints
+// export const investmentType = createApi({
+// reducerPath: "investmentType",
+// baseQuery: baseQuery,
+// tagTypes: ["getInvestmentType", "getInvestmentTypeID"],
+// endpoints: (builder) => ({
+
+// // ========[Get All]=========
+
+// getInvestmentTypes: builder.query({
+// query: ({ page, size }) =>
+// `/investmentType/admin?page=${page}&size=${size}`,
+// providesTags: ["getInvestmentType"],
+// }),
+
+// // ========[Get ID]=========
+
+// getInvestmentTypeById: builder.query({
+// query: (id) => `/investmentType/admin/${id}`,
+// providesTags: ["getInvestmentTypeID"],
+// }),
+
+// // ========[Create Investment]========
+
+// createInvestmentType: builder.mutation({
+// query: (data) => ({
+// url: `/investmentType/admin/`,
+// method: "POST",
+// body: data,
+// }),
+// invalidatesTags: ["getInvestmentType"],
+// }),
+
+// // ========[Update Investment]=======
+
+// updateInvestmentType: builder.mutation({
+// query: ({ data, id }) => ({
+// url: `/investmentType/admin/${id}`,
+// method: "PATCH",
+// body: data,
+// }),
+// invalidatesTags: ["getInvestmentTypeID", "getInvestmentType"],
+// }),
+
+// // ========[Delete Investment]=======
+
+// deleteInvestmentType: builder.mutation({
+// query: (id) => ({
+// url: `/investmentType/admin/delete/${id}`,
+// method: "DELETE",
+// }),
+// invalidatesTags: ["getInvestmentType"],
+// }),
+
+// }),
+// });
+
+// // Export hooks for usage in functional components
+// export const {
+// useGetInvestmentTypesQuery,
+// useGetInvestmentTypeByIdQuery,
+// useCreateInvestmentTypeMutation,
+// useUpdateInvestmentTypeMutation,
+// useDeleteInvestmentTypeMutation,
+// } = investmentType;
diff --git a/src/Services/investor.details.service.js b/src/Services/investor.details.service.js
new file mode 100644
index 0000000..e77d6a7
--- /dev/null
+++ b/src/Services/investor.details.service.js
@@ -0,0 +1,42 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const investorDetails = createApi({
+ reducerPath: "investorDetails",
+ baseQuery: baseQuery,
+ tagTypes: [],
+ endpoints: (builder) => ({
+ getInvestors: builder.query({
+ query: ({ page, size }) =>
+ `/investorDetails/admin?page=${page}&size=${size}`,
+ providesTags: ["getInvestors"],
+ }),
+
+ // =====[get investment details ]
+ getInvestorsDetailsById: builder.query({
+ query: (id) => `/investorDetails/admin/byId/${id}`,
+ providesTags: ["getInvestors"],
+ }),
+
+ // =====[get investment details ]
+ getInvestorsDetailsById_InInvCur: builder.query({
+ query: ({ id, currencyIn }) =>
+ currencyIn
+ ? `/investorDetails/admin/byId/${id}?currencyIn=InvCur`
+ : `/investorDetails/admin/byId/${id}`,
+ providesTags: ["getInvestors"],
+ }),
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetInvestorsQuery,
+ useGetInvestorsDetailsByIdQuery,
+ useGetInvestorsDetailsById_InInvCurQuery,
+} = investorDetails;
diff --git a/src/Services/investor.transaction.service.js b/src/Services/investor.transaction.service.js
new file mode 100644
index 0000000..8277f26
--- /dev/null
+++ b/src/Services/investor.transaction.service.js
@@ -0,0 +1,23 @@
+// investorTransaction.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = import.meta.env.VITE_API_BASE_URL + "/api";
+
+// Define a service using a base URL and expected endpoints
+export const investorTransaction = createApi({
+ reducerPath: "investorTransaction",
+ baseQuery: baseQuery,
+ tagTypes: [],
+ endpoints: (builder) => ({
+ getTransactions: builder.query({
+ query: () => '/getTransactions',
+ }),
+ getTransactionById: builder.query({
+ query: (id) => `/getTransaction/${id}`,
+ }),
+ }),
+});
+
+// Export hooks for usage in functional components
+export const { useGetTransactionsQuery, useGetTransactionByIdQuery } = investorTransaction;
diff --git a/src/Services/io.service.js b/src/Services/io.service.js
new file mode 100644
index 0000000..9ffe66e
--- /dev/null
+++ b/src/Services/io.service.js
@@ -0,0 +1,493 @@
+// io.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+// Define a service using a base URL and expected endpoints
+export const ioService = createApi({
+ reducerPath: "ioService",
+ baseQuery: baseQuery,
+ tagTypes: [
+ "prePopulate",
+ "getIO",
+ "getKeyMerits",
+ "getArtifactsVideo",
+ "getInvestmentDocuments",
+ "getIOById",
+ "getSponser",
+ "getInvestmentType",
+ "getInvestmentTypeID"
+ ],
+ endpoints: (builder) => ({
+ // =====[get prepopulate data]
+ getIOprepopulateData: builder.query({
+ query: () => `/io/admin/pre-populate`,
+ providesTags: ["prePopulate"],
+ }),
+
+ // =====[get]
+ getIOs: builder.query({
+ query: ({ page, size }) => `/io/admin?page=${page}&size=${size}`,
+ providesTags: ["getIO"],
+ }),
+
+ getIOById: builder.query({
+ query: (id) => ({ url: `/io/admin/${id}` }),
+ providesTags: ["getIOById"],
+ }),
+
+ // =====[create]
+ createIO: builder.mutation({
+ query: (data) => ({
+ url: `/io/admin`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getIO"],
+ }),
+
+ updateIO: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById", "getIO", "prePopulate"],
+ }),
+
+ // =====[Key Merits]
+ getKeyMerits: builder.query({
+ query: (id) => `/io/admin/key-merits/${id}`,
+ providesTags: ["getKeyMerits"],
+ }),
+
+ createKeyMerits: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/key-merits/${id}`,
+ method: "POST",
+ body: data,
+ // No need to manually set 'Content-Type'
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ deleteKeyMerits: builder.mutation({
+ query: (id) => ({
+ url: `/io/admin/key-merits/hard-delete/${id}`,
+ method: "DELETE",
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ updateKeyMerits: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/key-merits/byId/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ // =====[getIODocument]
+ createInvestmentDocuments: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/document/${id}`,
+ method: "POST",
+ body: data,
+ }),
+
+ invalidatesTags: ["getIOById"],
+ }),
+
+ updateInvestmentDocuments: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/document/byId/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ getInvestmentDocuments: builder.query({
+ query: (id) => `/io/admin/document/${id}`,
+ providesTags: ["getInvestmentDocuments"],
+ }),
+
+ deleteIODocs: builder.mutation({
+ query: (id) => ({
+ url: `/io/admin/document/hard-delete/${id}`,
+ method: "DELETE",
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ // =====[Artifacts]
+ getArtifactsVideo: builder.query({
+ query: (id) => `/io/artifact/artifactVideo/${id}`,
+ providesTags: ["getArtifactsVideo"],
+ }),
+
+ // =====[createImageArtifacts]
+ createImageArtifacts: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/artifact/image/${id}`,
+ method: "POST",
+ body: data,
+ }),
+
+ invalidatesTags: ["getIOById"],
+ }),
+
+ updateImageArtifacts: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/artifact/image/byId/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ // =====[createVideoArtifacts]
+ createVideoArtifacts: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/artifact/video/${id}`,
+ method: "POST",
+ body: data,
+ }),
+
+ invalidatesTags: ["getIOById"],
+ }),
+
+ deleteVideoArtifacts: builder.mutation({
+ query: (id) => ({
+ url: `/io/admin/artifact/video/byId/${id}`,
+ method: "DELETE",
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ deleteImageArtifacts: builder.mutation({
+ query: (id) => ({
+ url: `/io/admin/artifact/image/byId/${id}`,
+ method: "DELETE",
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ updateVideoArtifacts: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/artifact/video/byId/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ updateStatusIo: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/transaction/${id}/update-status/`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById", "getIO"],
+ }),
+
+ createIoCash: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/transaction/${id}/io-cash/`,
+ method: "POST",
+ body: data,
+ }),
+
+ invalidatesTags: ["getIOById"],
+ }),
+
+ createIoNav: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/transaction/${id}/io-nav/`,
+ method: "POST",
+ body: data,
+ }),
+
+ invalidatesTags: ["getIOById"],
+ }),
+
+ // =====[ Amount Investment ] ======
+ amountIvestment: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/io/admin/transaction/${id}/amount-invested`,
+
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ // ======== [ Distribution Transaction ] ========
+
+ getDistributionInvestor: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/io/admin/transaction/${id}/calculate-distribution-amt`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ getDistributedToInvestor: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/io/admin/transaction/${id}/distributed-to-investor`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ updateExitToInvestor: builder.mutation({
+ query: ({ id, data }) => ({
+ url: `/io/admin/transaction/${id}/exit`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+
+
+// ==============[ Displaye Orders ]===============
+
+ setDisplayOrder: builder.mutation({
+ query: ({ data }) => ({
+ url: `/io/admin/key-merits/resetDisplayOrder`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ setDisplayOrderIODocuments: builder.mutation({
+ query: ({ data }) => ({
+ url: `/io/admin/document/resetDisplayOrder`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ setDisplayOrderIOArtifactsImage: builder.mutation({
+ query: ({ data }) => ({
+ url: `/io/admin/artifact/image/resetDisplayOrder`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ setDisplayOrderIOArtifactsVideo: builder.mutation({
+ query: ({ data }) => ({
+ url: `/io/admin/artifact/video/resetDisplayOrder`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getIOById"],
+ }),
+
+ // ========[Create Sponser]========
+
+ createSponser: builder.mutation({
+ query: (data) => ({
+ url: `/sponsor/admin`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getSponser","prePopulate"],
+ }),
+
+ // ========[Update Sponser]========
+
+ updateSponser: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/sponsor/admin/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getSponser","prePopulate"],
+ }),
+
+ // ======[Get All]=====
+
+ getSponserMaster: builder.query({
+ query: ({ page, size }) => `/sponsor/admin?page=${page}&size=${size}`,
+ providesTags: ["getSponser"],
+ }),
+
+ // ========[Delete Sponser]========
+
+ deleteSponser: builder.mutation({
+ query: (id) => ({
+ url: `/sponsor/admin/delete/${id}`,
+ method: "DELETE",
+ }),
+ invalidatesTags: ["getSponser"],
+ }),
+
+ // ========[Get Active]========
+
+ getActiveSponserMaster: builder.query({
+ query: () => `/sponsor/admin/active`,
+ }),
+
+ getSponserMasterActive: builder.query({
+ query: () => "/sponsor/admin/active",
+ }),
+
+ // ======[Get ID]=====
+
+ getSponserById: builder.query({
+ query: (id) => `/sponsor/admin/${id}`,
+ }),
+
+ // ========[Get Active]========
+
+ getActiveSponserMaster: builder.query({
+ query: () => `/sponsor/admin/active`,
+ }),
+
+
+
+
+// ===============================[ Investment Type ]===================================
+
+
+ // ========[Get All]=========
+
+ getInvestmentTypes: builder.query({
+ query: ({ page, size }) =>
+ `/investmentType/admin?page=${page}&size=${size}`,
+ providesTags: ["getInvestmentType"],
+ }),
+
+ // ========[Get ID]=========
+
+ getInvestmentTypeById: builder.query({
+ query: (id) => `/investmentType/admin/${id}`,
+ providesTags: ["getInvestmentTypeID"],
+ }),
+
+ // ========[Create Investment]========
+
+ createInvestmentType: builder.mutation({
+ query: (data) => ({
+ url: `/investmentType/admin/`,
+ method: "POST",
+ body: data,
+ }),
+ invalidatesTags: ["getInvestmentType", "prePopulate"],
+ }),
+
+ // ========[Update Investment]=======
+
+ updateInvestmentType: builder.mutation({
+ query: ({ data, id }) => ({
+ url: `/investmentType/admin/${id}`,
+ method: "PATCH",
+ body: data,
+ }),
+ invalidatesTags: ["getInvestmentTypeID", "getInvestmentType", "prePopulate"],
+ }),
+
+ // ========[Delete Investment]=======
+
+ deleteInvestmentType: builder.mutation({
+ query: (id) => ({
+ url: `/investmentType/admin/delete/${id}`,
+ method: "DELETE",
+ }),
+ invalidatesTags: ["getInvestmentType", 'prePopulate'],
+ }),
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetIOprepopulateDataQuery,
+
+ useGetIOsQuery,
+ useGetIOByIdQuery,
+ useCreateIOMutation,
+ useUpdateIOMutation,
+
+ useGetKeyMeritsQuery,
+ useCreateKeyMeritsMutation,
+ useDeleteKeyMeritsMutation,
+ useUpdateKeyMeritsMutation,
+
+ useGetInvestmentDocumentsQuery,
+ useCreateInvestmentDocumentsMutation,
+ useDeleteIODocsMutation,
+ useUpdateInvestmentDocumentsMutation,
+
+ useCreateImageArtifactsMutation,
+ useUpdateImageArtifactsMutation,
+ useUpdateVideoArtifactsMutation,
+
+ useGetArtifactsVideoQuery,
+ useCreateVideoArtifactsMutation,
+ useDeleteVideoArtifactsMutation,
+ useDeleteImageArtifactsMutation,
+
+
+ useSetDisplayOrderMutation,
+ useSetDisplayOrderIODocumentsMutation,
+ useSetDisplayOrderIOArtifactsImageMutation,
+ useSetDisplayOrderIOArtifactsVideoMutation,
+
+ useCreateIoCashMutation,
+ useCreateIoNavMutation,
+
+ useUpdateStatusIoMutation,
+
+ useAmountIvestmentMutation,
+
+ useGetDistributionInvestorMutation,
+
+ useGetDistributedToInvestorMutation,
+ useUpdateExitToInvestorMutation,
+
+
+// ==============[ Sponser ]===============
+ useGetSponserMasterQuery,
+ useGetSponserMasterActiveQuery,
+ useCreateSponserMutation,
+ useUpdateSponserMutation,
+ useGetSponserByIdQuery,
+ useDeleteSponserMutation,
+ useGetActiveSponserMasterQuery,
+
+
+ // ============[ Investment Type ]========
+
+
+ useGetInvestmentTypesQuery,
+ useGetInvestmentTypeByIdQuery,
+ useCreateInvestmentTypeMutation,
+ useUpdateInvestmentTypeMutation,
+ useDeleteInvestmentTypeMutation,
+
+} = ioService;
diff --git a/src/Services/sponser.service.js b/src/Services/sponser.service.js
new file mode 100644
index 0000000..c2e5a82
--- /dev/null
+++ b/src/Services/sponser.service.js
@@ -0,0 +1,105 @@
+// //sponser.service
+// // Need to use the React-specific entry point to import createApi
+// import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// // import { api } from "./api.service";
+// import { baseQuery } from "./token.serivce";
+// import { ioService } from "./io.service";
+
+// // const baseUrl = api?.defaults.baseURL;
+
+
+
+// // const baseUrl = `${import.meta.env.VITE_API_BASE_URL}/${import.meta.env.VITE_API_VERSION}`
+
+
+
+// // Define a service using a base URL and expected endpoints
+// export const sponserMaster = createApi({
+// reducerPath: "sponserMaster",
+// baseQuery: baseQuery,
+// tagTypes: ["getSponser", "prePopulate"],
+// endpoints: (builder) => ({
+
+
+
+// // ======[Get All]=====
+
+// getSponserMaster: builder.query({
+// query: ({ page, size }) => `/sponsor/admin?page=${page}&size=${size}`,
+// providesTags: ["getSponser"],
+// }),
+
+
+// // ========[Get Active]========
+
+// getActiveSponserMaster: builder.query({
+// query: () => `/sponsor/admin/active`,
+// }),
+
+// getSponserMasterActive: builder.query({
+// query: () => "/sponsor/admin/active",
+// }),
+
+
+// // ======[Get ID]=====
+
+// getSponserById: builder.query({
+// query: (id) => `/sponsor/admin/${id}`,
+// }),
+
+// // ========[Toggle Status]========
+
+// toggleStatus: builder.mutation({
+// query: ({ id }) => ({
+// url: `/sponsor/admin/toggle-status/${id}`,
+// method: "PATCH",
+// }),
+// invalidatesTags: ["getSponser"],
+// }),
+
+// // ========[Create Sponser]========
+
+// createSponser: builder.mutation({
+// query: (data) => ({
+// url: `/sponsor/admin`,
+// method: "POST",
+// body: data,
+// }),
+// invalidatesTags: ["getSponser","prePopulate"],
+// }),
+
+// // ========[Update Sponser]========
+
+// updateSponser: builder.mutation({
+// query: ({ data, id }) => ({
+// url: `/sponsor/admin/${id}`,
+// method: "PATCH",
+// body: data,
+// }),
+// invalidatesTags: ["getSponser"],
+// }),
+
+// // ========[Delete Sponser]========
+
+// deleteSponser: builder.mutation({
+// query: (id) => ({
+// url: `/sponsor/admin/delete/${id}`,
+// method: "DELETE",
+// }),
+// invalidatesTags: ["getSponser"],
+// }),
+
+// }),
+// });
+
+// // Export hooks for usage in functional components
+// export const {
+// useGetSponserMasterQuery,
+// useGetSponserMasterActiveQuery,
+// useToggleStatusMutation,
+// useCreateSponserMutation,
+// useUpdateSponserMutation,
+// useGetSponserByIdQuery,
+// useDeleteSponserMutation,
+// useGetActiveSponserMasterQuery
+// } = sponserMaster;
diff --git a/src/Services/token.serivce.js b/src/Services/token.serivce.js
new file mode 100644
index 0000000..1dedc92
--- /dev/null
+++ b/src/Services/token.serivce.js
@@ -0,0 +1,118 @@
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+
+// Define a base query function with RTK Query
+// export const baseQuery = fetchBaseQuery({
+// baseUrl: 'https://sprint4.tanami.betadelivery.com/api/v1',
+// prepareHeaders: (headers) => {
+// const token = localStorage.getItem('accessToken');
+// if (token) {
+// headers.set('x-auth-token', `${token}`);
+// }
+// return headers;
+// },
+// });
+
+// Define a base query function with token refresh logic
+export const baseQuery = async (args, api, extraOptions) => {
+ let result = await fetchBaseQuery({
+ baseUrl: import.meta.env.VITE_BAS_URL,
+ prepareHeaders: (headers) => {
+ const token = localStorage.getItem("accessToken");
+ if (token) {
+ headers.set("x-auth-token", token);
+ }
+ return headers;
+ },
+ })(args, api, extraOptions);
+
+ if (result.error && result.error.status === 401) {
+ // Handle token refresh
+ // const refreshToken = localStorage.getItem("refreshToken");
+ // if (refreshToken) {
+ // try {
+ // const refreshResult = await fetchBaseQuery({
+ // baseUrl: import.meta.env.VITE_BAS_URL,
+ // })(
+ // {
+ // url: "/auth/user/regenerate-token",
+ // method: "POST",
+ // body: { refreshToken },
+ // },
+ // api,
+ // extraOptions
+ // );
+
+ // if (refreshResult.data) {
+ // // Save new tokens
+ // localStorage.setItem("accessToken", refreshResult.data.access.token);
+ // localStorage.setItem(
+ // "refreshToken",
+ // refreshResult.data.refresh.token
+ // );
+ // localStorage.setItem(
+ // "refreshTokenExp",
+ // refreshResult.data.refresh.expires
+ // );
+
+ // // Retry the original request with the new token
+ // result = await fetchBaseQuery({
+ // baseUrl: import.meta.env.VITE_BAS_URL,
+ // prepareHeaders: (headers) => {
+ // const token = localStorage.getItem("accessToken");
+ // if (token) {
+ // headers.set("x-auth-token", token);
+ // }
+ // return headers;
+ // },
+ // })(args, api, extraOptions);
+ // }
+ // } catch (err) {
+ // console.error("Failed to refresh token:", err);
+ // // Handle refresh failure (e.g., redirect to login)
+ // }
+ // }
+
+
+ localStorage.removeItem("accessToken");
+ localStorage.removeItem("refreshToken");
+ Cookies.remove("isAuthenticated", { path: '/login' });
+ }
+
+ return result;
+};
+
+// Create an RTK Query API slice
+export const apiSlice = createApi({
+ reducerPath: "api",
+ baseQuery: baseQuery,
+ endpoints: (builder) => ({
+ login: builder.mutation({
+ query: (credentials) => ({
+ url: "/auth/admin",
+ method: "POST",
+ body: credentials,
+ }),
+ async onQueryStarted(arg, { dispatch, queryFulfilled }) {
+ try {
+ const { data } = await queryFulfilled;
+ // Store tokens in local storage
+ localStorage.setItem("accessToken", data?.data?.access?.token);
+ localStorage.setItem("refreshToken", data?.data?.refresh?.token);
+ // localStorage.setItem('refreshTokenExp', data?.data?.refresh?.expires);
+ localStorage.setItem("accessTokenExp", data?.data?.access?.expires);
+ } catch (error) {
+ console.error("Login failed:", error);
+ }
+ },
+ }),
+ refreshToken: builder.mutation({
+ query: (refreshToken) => ({
+ url: "/auth/user/regenerate-token",
+ method: "POST",
+ body: { refreshToken },
+ }),
+ }),
+ }),
+});
+
+export const { useLoginMutation, useRefreshTokenMutation } = apiSlice;
diff --git a/src/Store/Store.js b/src/Store/Store.js
new file mode 100644
index 0000000..5de50f9
--- /dev/null
+++ b/src/Store/Store.js
@@ -0,0 +1,64 @@
+import { configureStore } from "@reduxjs/toolkit";
+import { setupListeners } from "@reduxjs/toolkit/query";
+// import { sponserMaster } from "../Services/sponser.service";
+// import { investmentType } from "../Services/investment.type.service";
+import { exchangeRate } from "../Services/exchange.rate.service";
+import { ioService } from "../Services/io.service";
+import { investorDetails } from "../Services/investor.details.service";
+import { investorTransaction } from "../Services/investor.transaction.service";
+// import { api } from "../Services/api.service";
+// import { keyMerits } from "../Services/Key.merits.service";
+import { bankDetails } from "../Services/bank.details.service";
+import { contact } from "../Services/contact.service";
+import { depositRequest } from "../Services/deposit.request.service";
+import { apiSlice, baseQuery } from "../Services/token.serivce";
+import { drawalRequest } from "../Services/drawal.request.service";
+import { deleteRequest } from "../Services/delete.request.service";
+import { banInvestorDetails } from "../Services/ban.investor.service";
+
+export const store = configureStore({
+ reducer: {
+ [apiSlice.reducerPath]: apiSlice.reducer,
+ // [sponserMaster.reducerPath]: sponserMaster.reducer,
+ // [investmentType.reducerPath]: investmentType.reducer,
+ [exchangeRate.reducerPath]: exchangeRate.reducer,
+ [ioService.reducerPath]: ioService.reducer,
+ [investorDetails.reducerPath]: investorDetails.reducer,
+ [investorTransaction.reducerPath]: investorTransaction.reducer,
+ [bankDetails.reducerPath]: bankDetails.reducer,
+ [contact.reducerPath]: contact.reducer,
+ [depositRequest.reducerPath]: depositRequest.reducer,
+ [drawalRequest.reducerPath]: drawalRequest.reducer,
+ [deleteRequest.reducerPath]: deleteRequest.reducer,
+ [banInvestorDetails.reducerPath]: banInvestorDetails.reducer,
+ // Add other reducers as needed
+ },
+ middleware: (getDefaultMiddleware) =>
+ getDefaultMiddleware({
+ thunk: {
+ extraArgument: baseQuery, // Pass Axios instance as extra argument
+ },
+ }).concat(
+ apiSlice.middleware,
+ // sponserMaster.middleware,
+ // investmentType.middleware,
+ exchangeRate.middleware,
+ ioService.middleware,
+ investorDetails.middleware,
+ investorTransaction.middleware,
+ bankDetails.middleware,
+ contact.middleware,
+ depositRequest.middleware,
+ drawalRequest.middleware,
+ deleteRequest.middleware,
+ banInvestorDetails.middleware,
+ ),
+});
+
+setupListeners(store.dispatch);
+
+export default store;
+
+
+
+
diff --git a/src/Theme/Theme.js b/src/Theme/Theme.js
new file mode 100644
index 0000000..05c8f71
--- /dev/null
+++ b/src/Theme/Theme.js
@@ -0,0 +1,56 @@
+// theme.js
+import { extendTheme } from "@chakra-ui/react";
+
+const customTheme = extendTheme({
+ colors: {
+ customPink: {
+ 50: "#ffe5e9",
+ 100: "#ffbcc9",
+ 200: "#ff93a8",
+ 300: "#ff6a87",
+ 400: "#ff4166",
+ 500: "#ff1845", // you can choose your custom color values here
+ 600: "#db1139",
+ 700: "#b70d2d",
+ 800: "#930921",
+ 900: "#700616",
+ },
+ forestGreen: {
+ 50: "#ffe6e9",
+ 100: "#f8c2c7",
+ 200: "#ef9da4",
+ 300: "#e67882",
+ 400: "#dd5460",
+ 500: "#DE858E", // primary shade for your custom color
+ 600: "#DE858E",
+ 700: "#DE858E",
+ 800: "#DE858E",
+ 900: "#DE858E",
+ },
+ forestGreen: {
+ 50: "#e6f3e9",
+ 100: "#c2e1c7",
+ 200: "#9dcda4",
+ 300: "#78b982",
+ 400: "#54a560",
+ 500: "#004118", // primary shade for your custom color
+ 600: "#003b14",
+ 700: "#003310",
+ 800: "#002b0c",
+ 900: "#002308",
+ },
+ },
+ components: {
+ // Switch: {
+ // baseStyle: {
+ // track: {
+ // _checked: {
+ // bg: 'forestGreen.500', // using your custom color here
+ // },
+ // },
+ // },
+ // },
+ },
+});
+
+export default customTheme;
diff --git a/src/Validations/Validations.js b/src/Validations/Validations.js
new file mode 100644
index 0000000..b34aaa5
--- /dev/null
+++ b/src/Validations/Validations.js
@@ -0,0 +1,811 @@
+import * as Yup from "yup";
+
+export const validationSchema = Yup.object().shape({
+ name: Yup.string().required("Email name is required"),
+ password: Yup.string().required("Password is required"),
+});
+
+export const addCommunitySchema = Yup.object().shape({
+ member_name: Yup.string().required("Name is required"),
+ designation: Yup.string().required("Designation is required"),
+ description: Yup.string().required("Description is required"),
+ linkedin: Yup.string()
+ .url("Invalid LinkedIn URL")
+ .required("Linked In link is required"),
+ profile_image: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+});
+
+export const schemaEdit = Yup.object().shape({
+ member_name: Yup.string().required("Name is required"),
+ designation: Yup.string().required("Designation is required"),
+ description: Yup.string().required("Description is required"),
+ linkedin: Yup.string()
+ .url("Invalid LinkedIn URL")
+ .required("LinkedIn is required"),
+});
+
+export const addCommunityBannerSchema = Yup.object().shape({
+ heading: Yup.string().required("Name is required"),
+ sub_heading: Yup.string().required("Designation is required"),
+ CTO_button_title: Yup.string().required("Description is required"),
+ CTO_button_link: Yup.string()
+ .url("Invalid LinkedIn URL")
+ .required("LinkedIn is required"),
+ banner_image: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+});
+
+export const editCommunityBannerSchema = Yup.object().shape({
+ heading: Yup.string().required("Name is required"),
+ sub_heading: Yup.string().required("Designation is required"),
+ CTO_button_title: Yup.string().required("Description is required"),
+ CTO_button_link: Yup.string()
+ .url("Invalid LinkedIn URL")
+ .required("LinkedIn is required"),
+});
+
+export const addBlogSchema = Yup.object().shape({
+ author_name: Yup.string().required("Author is required"),
+ author_designation: Yup.string().required("Author designation is required"),
+ title: Yup.string().required("Title is required"),
+ meta_description: Yup.string().required("Description is required"),
+ content: Yup.string(),
+ summary: Yup.string().required("Summary is required"),
+ profile_image: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // console.log(files[0].type)
+
+ const SUPPORTED_FORMATS = [
+ "image/jpeg",
+ "image/jpg",
+ "image/png",
+ // "image/gif",
+ "image/tiff",
+ "image/svg+xml",
+ ];
+ try {
+ if (files.length !== 0) {
+ return files && SUPPORTED_FORMATS.includes(files[0].type);
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ })
+ .optional(),
+ content_image_large: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+});
+
+export const editBlogSchema = Yup.object().shape({
+ author_name: Yup.string().required("Author is required"),
+ author_designation: Yup.string().required("Author designation is required"),
+ title: Yup.string().required("Title is required"),
+ meta_description: Yup.string().required("Description is required"),
+ content: Yup.string(),
+ summary: Yup.string().required("Summary is required"),
+ profile_image: Yup.mixed()
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // console.log(files[0].type)
+
+ const SUPPORTED_FORMATS = [
+ "image/jpeg",
+ "image/jpg",
+ "image/png",
+ // "image/gif",
+ "image/tiff",
+ "image/svg+xml",
+ ];
+ try {
+ if (files.length !== 0) {
+ return files && SUPPORTED_FORMATS.includes(files[0].type);
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ })
+ .optional(),
+ content_image_large: Yup.mixed()
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+});
+
+export const addNews = Yup.object().shape({
+ title: Yup.string().required("Author is required"),
+ release_date: Yup.date().required("Release date is required"),
+ meta_description: Yup.string().required("Description is required"),
+ content: Yup.string().required("Content is required"),
+ banner_image: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+ .optional(),
+});
+
+export const editNews = Yup.object().shape({
+ title: Yup.string(),
+ release_date: Yup.date(),
+ meta_description: Yup.string(),
+ content: Yup.string(),
+ banner_image: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ // .test(
+ // "fileSize",
+ // " The maximum size of profile picture is 10MB.",
+ // (files) => {
+ // //if u want to allow only certain file sizes
+ // try {
+ // if (files.length !== 0) {
+ // return files[0].size <= 10000000;
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // }
+ // )
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+ .optional(),
+});
+
+export const addEvents = Yup.object().shape({
+ title: Yup.string().required("title is required"),
+ content: Yup.string().required("content is required"),
+ location: Yup.string().required("location is required"),
+ organizer_name: Yup.string().required("Org name date is required"),
+ eventDates: Yup.string(),
+ organizer_mobile_number: Yup.string()
+ .required("Org contact is required")
+ .matches(/^[0-9]{10}$/, "Mobile number must be 10 digits"),
+ organizer_email: Yup.string()
+ .required("Org email is required")
+ .email("Please enter valid email"),
+ banner_image: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ // .test(
+ // "fileSize",
+ // " The maximum size of profile picture is 10MB.",
+ // (files) => {
+ // //if u want to allow only certain file sizes
+ // try {
+ // if (files.length !== 0) {
+ // return files[0].size <= 10000000;
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // }
+ // )
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+ .optional(),
+});
+
+export const addWhitePapers = Yup.object().shape({
+ title: Yup.string().required("title is required"),
+ image: Yup.mixed()
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/jpg",
+ // "image/png",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+ .optional(),
+ document: Yup.mixed()
+ // .test("required", "You need to provide a file", (files) => {
+ // // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ // if (files) return true;
+ // return false;
+ // })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/jpg",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+});
+
+// test("fileSize", "Image must be at least 10MB", (value) => {
+// if (!value) return true;
+// const fileSizeInBytes = value.size;
+// const fileSizeInMB = fileSizeInBytes / (1024 * 1024);
+// return fileSizeInMB >= 10;
+// })
+
+export const addVideos = Yup.object().shape({
+ title: Yup.string().required("Name is required"),
+ thumbnail: Yup.mixed()
+ .required("Thumbnail is required")
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ ),
+ description: Yup.string().required("Description is required"),
+ duration: Yup.string().required("LinkedIn is required"),
+ embeddedCode: Yup.string().required("LinkedIn is required"),
+});
+
+export const addUsecase = Yup.object().shape({
+ title: Yup.string().required("Name is required"),
+ meta_description: Yup.string().required("Description is required"),
+ attachment: Yup.mixed(),
+ content: Yup.string(),
+ banner_image: Yup.mixed()
+ // .required("Thumbnail is required")
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+ icon: Yup.mixed()
+ // .required("Icon is required")
+ .test("required", "You need to provide a file", (files) => {
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+});
+
+export const editUsecase = Yup.object().shape({
+ title: Yup.string().required("Name is required"),
+ meta_description: Yup.string().required("Description is required"),
+ attachment: Yup.mixed(),
+ content: Yup.string(),
+ banner_image: Yup.mixed()
+ // .required("Thumbnail is required")
+ .test("required", "You need to provide a file", (files) => {
+ // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ //if u want to allow only certain file sizes
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+ icon: Yup.mixed()
+ // .required("Icon is required")
+ .test("required", "You need to provide a file", (files) => {
+ if (files) return true;
+ return false;
+ })
+ .test(
+ "fileSize",
+ " The maximum size of profile picture is 10MB.",
+ (files) => {
+ try {
+ if (files.length !== 0) {
+ return files[0].size <= 10000000;
+ }
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ )
+ .optional(),
+});
+
+export const addTerms = Yup.object().shape({
+ title: Yup.string().required("title is required"),
+ content: Yup.string(),
+ banner_image: Yup.mixed()
+ // .test("required", "You need to provide a file", (files) => {
+ // // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ // if (files) return true;
+ // return false;
+ // })
+ // .test(
+ // "fileSize",
+ // " The maximum size of profile picture is 10MB.",
+ // (files) => {
+ // //if u want to allow only certain file sizes
+ // try {
+ // if (files.length !== 0) {
+ // return files[0].size <= 10000000;
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // }
+ // )
+ .optional(),
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/jpg",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+});
+
+export const addPolicy = Yup.object().shape({
+ title: Yup.string().required("title is required"),
+ content: Yup.string(),
+ banner_image: Yup.mixed()
+ // .test("required", "You need to provide a file", (files) => {
+ // // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ // if (files) return true;
+ // return false;
+ // })
+ // .test(
+ // "fileSize",
+ // " The maximum size of profile picture is 10MB.",
+ // (files) => {
+ // //if u want to allow only certain file sizes
+ // try {
+ // if (files.length !== 0) {
+ // return files[0].size <= 10000000;
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // }
+ // )
+ .optional(),
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/jpg",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+});
+
+export const addPartnerCard = Yup.object().shape({
+ website_link: Yup.string().required("link is required"),
+ description: Yup.string().required("description is required"),
+ banner_image: Yup.mixed()
+ .required("logo is required")
+ // .test("required", "You need to provide a file", (files) => {
+ // // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ // if (files) return true;
+ // return false;
+ // })
+ // .test(
+ // "fileSize",
+ // " The maximum size of profile picture is 10MB.",
+ // (files) => {
+ // //if u want to allow only certain file sizes
+ // try {
+ // if (files.length !== 0) {
+ // return files[0].size <= 10000000;
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // }
+ // )
+ .optional(),
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/jpg",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+});
+
+export const addFaq = Yup.object().shape({
+ question: Yup.string().required("Qustion is required"),
+ answer: Yup.string()
+ // banner_image: Yup.mixed()
+ // .test("required", "You need to provide a file", (files) => {
+ // // return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
+ // if (files) return true;
+ // return false;
+ // })
+ // .test(
+ // "fileSize",
+ // " The maximum size of profile picture is 10MB.",
+ // (files) => {
+ // //if u want to allow only certain file sizes
+ // try {
+ // if (files.length !== 0) {
+ // return files[0].size <= 10000000;
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // }
+ // )
+ .optional(),
+ // .test("file_formate", "Image file has unsupported format.", (files) => {
+ // // // // console.log(files[0].type)
+
+ // const SUPPORTED_FORMATS = [
+ // "image/jpeg",
+ // "image/png",
+ // "image/jpg",
+ // "image/gif",
+ // "image/tiff",
+ // "image/svg+xml",
+ // ];
+ // try {
+ // if (files.length !== 0) {
+ //
+ // return files && SUPPORTED_FORMATS.includes(files[0].type);
+ // }
+ // return true;
+ // } catch (error) {
+ // return false;
+ // }
+ // })
+});
+
+
+// Tanami Schema
+
+export const investmentSchema = Yup.object().shape({
+ name: Yup.string().required("Name is required"),
+ address: Yup.string().required("Type is required"),
+ mobile: Yup.string().required("Total Fund is required"),
+ bankDetails: Yup.string().required("Total Investor is required"),
+ bankAccount: Yup.string().required("Predicted Income is required"),
+ status: Yup.string()
+ .oneOf(["available", "upcoming", "closed"], "Invalid status")
+ .required("Status is required"),
+});
\ No newline at end of file
diff --git a/src/assets/404.png b/src/assets/404.png
new file mode 100644
index 0000000..34bfab5
Binary files /dev/null and b/src/assets/404.png differ
diff --git a/src/assets/Ellipse-37.png b/src/assets/Ellipse-37.png
new file mode 100644
index 0000000..cd7e58a
Binary files /dev/null and b/src/assets/Ellipse-37.png differ
diff --git a/src/assets/Ellipse-38.png b/src/assets/Ellipse-38.png
new file mode 100644
index 0000000..6af52ca
Binary files /dev/null and b/src/assets/Ellipse-38.png differ
diff --git a/src/assets/Ellipse-39.png b/src/assets/Ellipse-39.png
new file mode 100644
index 0000000..8b58fe6
Binary files /dev/null and b/src/assets/Ellipse-39.png differ
diff --git a/src/assets/Ellipse.png b/src/assets/Ellipse.png
new file mode 100644
index 0000000..f2db4bf
Binary files /dev/null and b/src/assets/Ellipse.png differ
diff --git a/src/assets/EmptySearchList.png b/src/assets/EmptySearchList.png
new file mode 100644
index 0000000..2d43ea0
Binary files /dev/null and b/src/assets/EmptySearchList.png differ
diff --git a/src/assets/EmptySearchList.svg b/src/assets/EmptySearchList.svg
new file mode 100644
index 0000000..0796885
--- /dev/null
+++ b/src/assets/EmptySearchList.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/Error.svg b/src/assets/Error.svg
new file mode 100644
index 0000000..ef5072e
--- /dev/null
+++ b/src/assets/Error.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/IOheader.png b/src/assets/IOheader.png
new file mode 100644
index 0000000..9eead41
Binary files /dev/null and b/src/assets/IOheader.png differ
diff --git a/src/assets/accademicbanner.png b/src/assets/accademicbanner.png
new file mode 100644
index 0000000..5595d64
Binary files /dev/null and b/src/assets/accademicbanner.png differ
diff --git a/src/assets/asset1.png b/src/assets/asset1.png
new file mode 100644
index 0000000..ea628db
Binary files /dev/null and b/src/assets/asset1.png differ
diff --git a/src/assets/asset2.png b/src/assets/asset2.png
new file mode 100644
index 0000000..24fca2f
Binary files /dev/null and b/src/assets/asset2.png differ
diff --git a/src/assets/bahrain_flag.png b/src/assets/bahrain_flag.png
new file mode 100644
index 0000000..6b650a1
Binary files /dev/null and b/src/assets/bahrain_flag.png differ
diff --git a/src/assets/click-151673.mp3 b/src/assets/click-151673.mp3
new file mode 100644
index 0000000..b8040cf
Binary files /dev/null and b/src/assets/click-151673.mp3 differ
diff --git a/src/assets/commingsoon.png b/src/assets/commingsoon.png
new file mode 100644
index 0000000..e576b78
Binary files /dev/null and b/src/assets/commingsoon.png differ
diff --git a/src/assets/communityBanner.webp b/src/assets/communityBanner.webp
new file mode 100644
index 0000000..df4629d
Binary files /dev/null and b/src/assets/communityBanner.webp differ
diff --git a/src/assets/empty_state_empty_folder.svg b/src/assets/empty_state_empty_folder.svg
new file mode 100644
index 0000000..db17326
--- /dev/null
+++ b/src/assets/empty_state_empty_folder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/failed.gif b/src/assets/failed.gif
new file mode 100644
index 0000000..f67ebf8
Binary files /dev/null and b/src/assets/failed.gif differ
diff --git a/src/assets/fallBackImage.png b/src/assets/fallBackImage.png
new file mode 100644
index 0000000..494e1de
Binary files /dev/null and b/src/assets/fallBackImage.png differ
diff --git a/src/assets/favicon.png b/src/assets/favicon.png
new file mode 100644
index 0000000..e32f05c
Binary files /dev/null and b/src/assets/favicon.png differ
diff --git a/src/assets/favicone.png b/src/assets/favicone.png
new file mode 100644
index 0000000..72359f5
Binary files /dev/null and b/src/assets/favicone.png differ
diff --git a/src/assets/favicons.png b/src/assets/favicons.png
new file mode 100644
index 0000000..60e4498
Binary files /dev/null and b/src/assets/favicons.png differ
diff --git a/src/assets/kuwait_flag.png b/src/assets/kuwait_flag.png
new file mode 100644
index 0000000..514bf42
Binary files /dev/null and b/src/assets/kuwait_flag.png differ
diff --git a/src/assets/linkedin.png b/src/assets/linkedin.png
new file mode 100644
index 0000000..1e7032b
Binary files /dev/null and b/src/assets/linkedin.png differ
diff --git a/src/assets/loginpat.png b/src/assets/loginpat.png
new file mode 100644
index 0000000..07863bc
Binary files /dev/null and b/src/assets/loginpat.png differ
diff --git a/src/assets/logo-min.png b/src/assets/logo-min.png
new file mode 100644
index 0000000..8185f0a
Binary files /dev/null and b/src/assets/logo-min.png differ
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000..27762b7
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/logo2.png b/src/assets/logo2.png
new file mode 100644
index 0000000..da697bc
Binary files /dev/null and b/src/assets/logo2.png differ
diff --git a/src/assets/logoOptifii.svg b/src/assets/logoOptifii.svg
new file mode 100644
index 0000000..d276f1d
--- /dev/null
+++ b/src/assets/logoOptifii.svg
@@ -0,0 +1,60 @@
+
diff --git a/src/assets/mobileImg.png b/src/assets/mobileImg.png
new file mode 100644
index 0000000..faa08de
Binary files /dev/null and b/src/assets/mobileImg.png differ
diff --git a/src/assets/mobileWing.png b/src/assets/mobileWing.png
new file mode 100644
index 0000000..1ec4b7a
Binary files /dev/null and b/src/assets/mobileWing.png differ
diff --git a/src/assets/mouse-click-104737.mp3 b/src/assets/mouse-click-104737.mp3
new file mode 100644
index 0000000..bfc4920
Binary files /dev/null and b/src/assets/mouse-click-104737.mp3 differ
diff --git a/src/assets/noInternet.jpg b/src/assets/noInternet.jpg
new file mode 100644
index 0000000..9f27e59
Binary files /dev/null and b/src/assets/noInternet.jpg differ
diff --git a/src/assets/oman_flag.png b/src/assets/oman_flag.png
new file mode 100644
index 0000000..5bd32a0
Binary files /dev/null and b/src/assets/oman_flag.png differ
diff --git a/src/assets/optifii_logo.png b/src/assets/optifii_logo.png
new file mode 100644
index 0000000..2cc151f
Binary files /dev/null and b/src/assets/optifii_logo.png differ
diff --git a/src/assets/optifii_white.svg b/src/assets/optifii_white.svg
new file mode 100644
index 0000000..60dc4bd
--- /dev/null
+++ b/src/assets/optifii_white.svg
@@ -0,0 +1,16 @@
+
diff --git a/src/assets/pdfscreen.png b/src/assets/pdfscreen.png
new file mode 100644
index 0000000..24653f4
Binary files /dev/null and b/src/assets/pdfscreen.png differ
diff --git a/src/assets/photo-1472313420546-a46e561861d8.avif b/src/assets/photo-1472313420546-a46e561861d8.avif
new file mode 100644
index 0000000..601721c
Binary files /dev/null and b/src/assets/photo-1472313420546-a46e561861d8.avif differ
diff --git a/src/assets/pro1.jpg b/src/assets/pro1.jpg
new file mode 100644
index 0000000..65756c8
Binary files /dev/null and b/src/assets/pro1.jpg differ
diff --git a/src/assets/proavatar.webp b/src/assets/proavatar.webp
new file mode 100644
index 0000000..0e9ecbf
Binary files /dev/null and b/src/assets/proavatar.webp differ
diff --git a/src/assets/propic.png b/src/assets/propic.png
new file mode 100644
index 0000000..2a950b8
Binary files /dev/null and b/src/assets/propic.png differ
diff --git a/src/assets/qatar_flag.png b/src/assets/qatar_flag.png
new file mode 100644
index 0000000..c3fc0ad
Binary files /dev/null and b/src/assets/qatar_flag.png differ
diff --git a/src/assets/react.svg b/src/assets/react.svg
new file mode 100644
index 0000000..6c87de9
--- /dev/null
+++ b/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/robot.png b/src/assets/robot.png
new file mode 100644
index 0000000..e3bdb6e
Binary files /dev/null and b/src/assets/robot.png differ
diff --git a/src/assets/robot2.png b/src/assets/robot2.png
new file mode 100644
index 0000000..4213b85
Binary files /dev/null and b/src/assets/robot2.png differ
diff --git a/src/assets/saudi_arabia_flag.png b/src/assets/saudi_arabia_flag.png
new file mode 100644
index 0000000..654d7ac
Binary files /dev/null and b/src/assets/saudi_arabia_flag.png differ
diff --git a/src/assets/shield.png b/src/assets/shield.png
new file mode 100644
index 0000000..5977417
Binary files /dev/null and b/src/assets/shield.png differ
diff --git a/src/assets/successimg.gif b/src/assets/successimg.gif
new file mode 100644
index 0000000..5807f09
Binary files /dev/null and b/src/assets/successimg.gif differ
diff --git a/src/assets/uae_flag.png b/src/assets/uae_flag.png
new file mode 100644
index 0000000..ebc9a38
Binary files /dev/null and b/src/assets/uae_flag.png differ
diff --git a/src/assets/ultp-fallback-img.webp b/src/assets/ultp-fallback-img.webp
new file mode 100644
index 0000000..4b4fce4
Binary files /dev/null and b/src/assets/ultp-fallback-img.webp differ
diff --git a/src/assets/under-construction.png b/src/assets/under-construction.png
new file mode 100644
index 0000000..57542de
Binary files /dev/null and b/src/assets/under-construction.png differ
diff --git a/src/assets/welcome.avif b/src/assets/welcome.avif
new file mode 100644
index 0000000..d9806e4
Binary files /dev/null and b/src/assets/welcome.avif differ
diff --git a/src/assets/welcome2.avif b/src/assets/welcome2.avif
new file mode 100644
index 0000000..ad27134
Binary files /dev/null and b/src/assets/welcome2.avif differ
diff --git a/src/assets/welcome3.avif b/src/assets/welcome3.avif
new file mode 100644
index 0000000..dd41735
Binary files /dev/null and b/src/assets/welcome3.avif differ
diff --git a/src/assets/welcome4.avif b/src/assets/welcome4.avif
new file mode 100644
index 0000000..75f9fc5
Binary files /dev/null and b/src/assets/welcome4.avif differ
diff --git a/src/main.jsx b/src/main.jsx
new file mode 100644
index 0000000..138be1d
--- /dev/null
+++ b/src/main.jsx
@@ -0,0 +1,27 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App.jsx";
+import 'bootstrap/dist/css/bootstrap.min.css';
+import 'bootstrap/dist/js/bootstrap.bundle.min';
+
+// import { persistor, store } from "./Redux/Store.js";
+
+import { Provider } from "react-redux";
+import { PersistGate } from "redux-persist/integration/react";
+import { ChakraProvider } from "@chakra-ui/react";
+import GlobalStateProvider from "./Contexts/GlobalStateProvider";
+// import { store } from "./Store/Store.js";
+import customTheme from "./Theme/Theme.js";
+import store from "./Store/Store.js";
+
+ReactDOM.createRoot(document.getElementById("root")).render(
+
+
+ {/* */}
+
+
+
+ {/* */}
+
+
+);
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..861b04b
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react-swc'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+})