commit 296d5f78aaebc2ac8c0952bd9b128fb82a4d7014 Author: karimaldeen Date: Thu Sep 26 11:38:11 2024 +0300 first push diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# 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? diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0720396 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,9 @@ +{ + "singleQuote": true, + "semi": true, + "tabWidth": 2, + "useTabs": false, + "jsxSingleQuote": false, + "jsxBracketSameLine": false, + "arrowParens": "always" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..1e5a46b --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}); +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react'; + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}); +``` diff --git a/bundle-analysis.html b/bundle-analysis.html new file mode 100644 index 0000000..3a93c19 --- /dev/null +++ b/bundle-analysis.html @@ -0,0 +1,4842 @@ + + + + + + + + Rollup Visualizer + + + +
+ + + + + diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..2b3e6cc --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import reactHooks from 'eslint-plugin-react-hooks'; +import reactRefresh from 'eslint-plugin-react-refresh'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +); diff --git a/index.html b/index.html new file mode 100644 index 0000000..a1940a9 --- /dev/null +++ b/index.html @@ -0,0 +1,19 @@ + + + + + + + + + Website + + + +
+ + diff --git a/package.json b/package.json new file mode 100644 index 0000000..94bb205 --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "name": "website", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "start": "vite --port=3000", + "build": "vite build", + "format": "prettier --write .", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@tanstack/react-query": "^5.53.1", + "antd": "^5.21.1", + "axios": "^1.7.5", + "formik": "^2.4.6", + "framer-motion": "^11.5.0", + "i18next": "^23.14.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-i18next": "^14.1.3", + "react-icons": "^5.3.0", + "react-player": "^2.16.0", + "react-router-dom": "^6.26.1", + "react-transition-group": "^4.4.5", + "swiper": "^11.1.14", + "zustand": "^4.5.5" + }, + "devDependencies": { + "@types/node": "^22.5.1", + "@types/react": "^18.3.5", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^8.57.0", + "prettier": "^3.3.3", + "rollup-plugin-visualizer": "^5.12.0", + "sass": "^1.77.8", + "typescript": "^5.5.4", + "vite": "^5.4.2", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-env-compatible": "^2.0.1" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..8aa5186 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3467 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@tanstack/react-query': + specifier: ^5.53.1 + version: 5.53.3(react@18.3.1) + antd: + specifier: ^5.21.1 + version: 5.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + axios: + specifier: ^1.7.5 + version: 1.7.7 + formik: + specifier: ^2.4.6 + version: 2.4.6(react@18.3.1) + framer-motion: + specifier: ^11.5.0 + version: 11.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + i18next: + specifier: ^23.14.0 + version: 23.14.0 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + react-i18next: + specifier: ^14.1.3 + version: 14.1.3(i18next@23.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-icons: + specifier: ^5.3.0 + version: 5.3.0(react@18.3.1) + react-player: + specifier: ^2.16.0 + version: 2.16.0(react@18.3.1) + react-router-dom: + specifier: ^6.26.1 + version: 6.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-transition-group: + specifier: ^4.4.5 + version: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + swiper: + specifier: ^11.1.14 + version: 11.1.14 + zustand: + specifier: ^4.5.5 + version: 4.5.5(@types/react@18.3.5)(react@18.3.1) + devDependencies: + '@types/node': + specifier: ^22.5.1 + version: 22.5.2 + '@types/react': + specifier: ^18.3.5 + version: 18.3.5 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.3.1(vite@5.4.2(@types/node@22.5.2)(sass@1.77.8)) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + rollup-plugin-visualizer: + specifier: ^5.12.0 + version: 5.12.0(rollup@4.21.2) + sass: + specifier: ^1.77.8 + version: 1.77.8 + typescript: + specifier: ^5.5.4 + version: 5.5.4 + vite: + specifier: ^5.4.2 + version: 5.4.2(@types/node@22.5.2)(sass@1.77.8) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@5.4.2(@types/node@22.5.2)(sass@1.77.8)) + vite-plugin-env-compatible: + specifier: ^2.0.1 + version: 2.0.1 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@ant-design/colors@7.1.0': + resolution: {integrity: sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==} + + '@ant-design/cssinjs-utils@1.1.0': + resolution: {integrity: sha512-E9nOWObXx7Dy7hdyuYlOFaer/LtPO7oyZVxZphh0CYEslr5EmhJPM3WI0Q2RBHRtYg6dSNqeSK73kvZjPN3IMQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@ant-design/cssinjs@1.21.1': + resolution: {integrity: sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/fast-color@2.0.6': + resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} + engines: {node: '>=8.x'} + + '@ant-design/icons-svg@4.4.2': + resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} + + '@ant-design/icons@5.5.1': + resolution: {integrity: sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/react-slick@1.1.2': + resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} + peerDependencies: + react: '>=16.9.0' + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.25.4': + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.6': + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.24.7': + resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.24.7': + resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rc-component/async-validator@5.0.4': + resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} + engines: {node: '>=14.x'} + + '@rc-component/color-picker@2.0.1': + resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/context@1.4.0': + resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/mini-decimal@1.1.0': + resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} + engines: {node: '>=8.x'} + + '@rc-component/mutate-observer@1.1.0': + resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/portal@1.1.2': + resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/qrcode@1.0.0': + resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/tour@1.15.1': + resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/trigger@2.2.3': + resolution: {integrity: sha512-X1oFIpKoXAMXNDYCviOmTfuNuYxE4h5laBsyCqVAVMjNHxoF3/uiyA7XdegK1XbCvBbCZ6P6byWrEoDRpKL8+A==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@remix-run/router@1.19.1': + resolution: {integrity: sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==} + engines: {node: '>=14.0.0'} + + '@rollup/rollup-android-arm-eabi@4.21.2': + resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.21.2': + resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.21.2': + resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.21.2': + resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.21.2': + resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.21.2': + resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.21.2': + resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.21.2': + resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': + resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.21.2': + resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.21.2': + resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.21.2': + resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.21.2': + resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.21.2': + resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.21.2': + resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.21.2': + resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==} + cpu: [x64] + os: [win32] + + '@tanstack/query-core@5.53.3': + resolution: {integrity: sha512-ZfjAgd7NpqDx0e4aYBt7EmS2enbulPrJwowTy+mayRE93WUUH+sIYHun1TdRjpGwDPMNNZ5D6goh7n3CwoO+HA==} + + '@tanstack/react-query@5.53.3': + resolution: {integrity: sha512-286mN/91CeM7vC6CZFLKYDHSw+WyMX6ekIvzoTbpM4xyPb99VSyCKPLyPgaOatKqYm6ooMBquSq9NGRdKgsJfg==} + peerDependencies: + react: ^18 || ^19 + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/hoist-non-react-statics@3.3.5': + resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + + '@types/node@22.5.2': + resolution: {integrity: sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react@18.3.5': + resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitejs/plugin-react@4.3.1': + resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + antd@5.21.1: + resolution: {integrity: sha512-JBNv11RmZj5npBp77eyHPVp+ona1YcqCNxJF4kJ1CTXvCittqyMyXL+PLN3dXRIIDFQ8NYlf+v/Yn2pHZXXknA==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-tree-filter@2.1.0: + resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001655: + resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + compute-scroll-into-view@3.1.0: + resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@2.2.1: + resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} + engines: {node: '>=0.10.0'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + + dotenv@8.2.0: + resolution: {integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==} + engines: {node: '>=8'} + + electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + formik@2.4.6: + resolution: {integrity: sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==} + peerDependencies: + react: '>=16.8.0' + + framer-motion@11.5.0: + resolution: {integrity: sha512-Br0sk5vVf4/dCwK+K7keLzE67ZSoQO7OeAVSQRY72mA4GEjPYJgedAaRzXHkq/ilB87Z1YiJLjhvk5+U4Kz8Yg==} + 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 + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + + i18next@23.14.0: + resolution: {integrity: sha512-Y5GL4OdA8IU2geRrt2+Uc1iIhsjICdHZzT9tNwQ3TVqdNzgxHToGCKf/TPRP80vTCAP6svg2WbbJL+Gx5MFQVA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {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. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json2mq@0.2.0: + resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + load-script@1.0.0: + resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss@8.4.44: + resolution: {integrity: sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc-cascader@3.28.1: + resolution: {integrity: sha512-9+8oHIMWVLHxuaapDiqFNmD9KSyKN/P4bo9x/MBuDbyTqP8f2/POmmZxdXWBO3yq/uE3pKyQCXYNUxrNfHRv2A==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-checkbox@3.3.0: + resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-collapse@3.8.0: + resolution: {integrity: sha512-YVBkssrKPBG09TGfcWWGj8zJBYD9G3XuTy89t5iUmSXrIXEAnO1M+qjUxRW6b4Qi0+wNWG6MHJF/+US+nmIlzA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-dialog@9.6.0: + resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-drawer@7.2.0: + resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-dropdown@4.2.0: + resolution: {integrity: sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' + + rc-field-form@2.4.0: + resolution: {integrity: sha512-XZ/lF9iqf9HXApIHQHqzJK5v2w4mkUMsVqAzOyWVzoiwwXEavY6Tpuw7HavgzIoD+huVff4JghSGcgEfX6eycg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-image@7.11.0: + resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input-number@9.2.0: + resolution: {integrity: sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input@1.6.3: + resolution: {integrity: sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-mentions@2.16.1: + resolution: {integrity: sha512-GnhSTGP9Mtv6pqFFGQze44LlrtWOjHNrUUAcsdo9DnNAhN4pwVPEWy4z+2jpjkiGlJ3VoXdvMHcNDQdfI9fEaw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-menu@9.15.1: + resolution: {integrity: sha512-UKporqU6LPfHnpPmtP6hdEK4iO5Q+b7BRv/uRpxdIyDGplZy9jwUjsnpev5bs3PQKB0H0n34WAPDfjAfn3kAPA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-motion@2.9.3: + resolution: {integrity: sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-notification@5.6.1: + resolution: {integrity: sha512-Q4ZKES3IBxWmpNnlDiMFYoH6D7MJ1L3n3gp59pnpaMI8gm9Vj+gVRxdInvoYjBoZvEOenxb9MbbKvnFhzJpgvA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-overflow@1.3.2: + resolution: {integrity: sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-pagination@4.3.0: + resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-picker@4.6.15: + resolution: {integrity: sha512-OWZ1yrMie+KN2uEUfYCfS4b2Vu6RC1FWwNI0s+qypsc3wRt7g+peuZKVIzXCTaJwyyZruo80+akPg2+GmyiJjw==} + engines: {node: '>=8.x'} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + + rc-progress@4.0.0: + resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-rate@2.13.0: + resolution: {integrity: sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-resize-observer@1.4.0: + resolution: {integrity: sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-segmented@2.5.0: + resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-select@14.15.2: + resolution: {integrity: sha512-oNoXlaFmpqXYcQDzcPVLrEqS2J9c+/+oJuGrlXeVVX/gVgrbHa5YcyiRUXRydFjyuA7GP3elRuLF7Y3Tfwltlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-slider@11.1.6: + resolution: {integrity: sha512-LACAaXM0hi+4x4ErDGZLy7weIQwmBIVbIgPE+eDHiHkyzMvKjWHraCG8/B22Y/tCQUPAsP02wBhKhth7mH2PIw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-steps@6.0.1: + resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-switch@4.1.0: + resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-table@7.47.5: + resolution: {integrity: sha512-fzq+V9j/atbPIcvs3emuclaEoXulwQpIiJA6/7ey52j8+9cJ4P8DGmp4YzfUVDrb3qhgedcVeD6eRgUrokwVEQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tabs@15.2.0: + resolution: {integrity: sha512-ZfHdGw0krK4walBYNOgPWCcBImSp5NtzJR5+oI4rN9Z44FYDQKozBFfuAQHhumIUtx4EmGaYCFjywwgca/Rs1g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-textarea@1.8.2: + resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tooltip@6.2.1: + resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tree-select@5.23.0: + resolution: {integrity: sha512-aQGi2tFSRw1WbXv0UVXPzHm09E0cSvUVZMLxQtMv3rnZZpNmdRXWrnd9QkLNlVH31F+X5rgghmdSFF3yZW0N9A==} + peerDependencies: + react: '*' + react-dom: '*' + + rc-tree@5.9.0: + resolution: {integrity: sha512-CPrgOvm9d/9E+izTONKSngNzQdIEjMox2PBufWjS1wf7vxtvmCWzK1SlpHbRY6IaBfJIeZ+88RkcIevf729cRg==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-upload@4.8.1: + resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-util@5.43.0: + resolution: {integrity: sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-virtual-list@3.14.7: + resolution: {integrity: sha512-wFH1vzByGzT4jwNzj53JXScCHiTtZmEEXE9F8qyGDhoEaQAEg+RDeRZcTi0oIUo2EWqPiFnpaV5H09c8XVKSIw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-fast-compare@2.0.4: + resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-i18next@14.1.3: + resolution: {integrity: sha512-wZnpfunU6UIAiJ+bxwOiTmBOAaB14ha97MjOEnLGac2RJ+h/maIYXZuTHlmyqQVX1UVHmU1YDTQ5vxLmwfXTjw==} + peerDependencies: + i18next: '>= 23.2.3' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + react-icons@5.3.0: + resolution: {integrity: sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==} + peerDependencies: + react: '*' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-player@2.16.0: + resolution: {integrity: sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ==} + peerDependencies: + react: '>=16.6.0' + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-router-dom@6.26.1: + resolution: {integrity: sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.26.1: + resolution: {integrity: sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-visualizer@5.12.0: + resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + + rollup@4.21.2: + resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sass@1.77.8: + resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} + engines: {node: '>=14.0.0'} + hasBin: true + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + string-convert@0.2.1: + resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + swiper@11.1.14: + resolution: {integrity: sha512-VbQLQXC04io6AoAjIUWuZwW4MSYozkcP9KjLdrsG/00Q/yiwvhz9RQyt0nHXV10hi9NVnDNy1/wv7Dzq1lkOCQ==} + engines: {node: '>= 4.7.0'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + vite-plugin-compression@0.5.1: + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-env-compatible@2.0.1: + resolution: {integrity: sha512-DRrOZTg/W44ojVQQfGSMPEgYQGzp5TeIpt9cpaK35hTOC/b2D7Ffl8/RIgK8vQ0mlnDIUgETcA173bnMEkyzdw==} + + vite@5.4.2: + resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + 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 + + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zustand@4.5.5: + resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@ant-design/colors@7.1.0': + dependencies: + '@ctrl/tinycolor': 3.6.1 + + '@ant-design/cssinjs-utils@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.25.6 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/cssinjs@1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + classnames: 2.5.1 + csstype: 3.1.3 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + stylis: 4.3.4 + + '@ant-design/fast-color@2.0.6': + dependencies: + '@babel/runtime': 7.25.6 + + '@ant-design/icons-svg@4.4.2': {} + + '@ant-design/icons@5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/colors': 7.1.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/react-slick@1.1.2(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + json2mq: 0.2.0 + react: 18.3.1 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.2 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + + '@babel/compat-data@7.25.4': {} + + '@babel/core@7.25.2': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.6 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helpers@7.25.6': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + + '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + + '@babel/traverse@7.25.6': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@ctrl/tinycolor@3.6.1': {} + + '@emotion/hash@0.8.0': {} + + '@emotion/unitless@0.7.5': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.6 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@rc-component/async-validator@5.0.4': + dependencies: + '@babel/runtime': 7.25.6 + + '@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/fast-color': 2.0.6 + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/context@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/mini-decimal@1.1.0': + dependencies: + '@babel/runtime': 7.25.6 + + '@rc-component/mutate-observer@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/qrcode@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/tour@1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/trigger@2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@remix-run/router@1.19.1': {} + + '@rollup/rollup-android-arm-eabi@4.21.2': + optional: true + + '@rollup/rollup-android-arm64@4.21.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.21.2': + optional: true + + '@rollup/rollup-darwin-x64@4.21.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.21.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.21.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.21.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.21.2': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.21.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.21.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.21.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.21.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.21.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.21.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.21.2': + optional: true + + '@tanstack/query-core@5.53.3': {} + + '@tanstack/react-query@5.53.3(react@18.3.1)': + dependencies: + '@tanstack/query-core': 5.53.3 + react: 18.3.1 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.25.6 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.6 + + '@types/estree@1.0.5': {} + + '@types/hoist-non-react-statics@3.3.5': + dependencies: + '@types/react': 18.3.5 + hoist-non-react-statics: 3.3.2 + + '@types/node@22.5.2': + dependencies: + undici-types: 6.19.8 + + '@types/prop-types@15.7.12': {} + + '@types/react-dom@18.3.0': + dependencies: + '@types/react': 18.3.5 + + '@types/react@18.3.5': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + + '@ungap/structured-clone@1.2.0': {} + + '@vitejs/plugin-react@4.3.1(vite@5.4.2(@types/node@22.5.2)(sass@1.77.8))': + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.2(@types/node@22.5.2)(sass@1.77.8) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + antd@5.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@ant-design/colors': 7.1.0 + '@ant-design/cssinjs': 1.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/cssinjs-utils': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/icons': 5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/react-slick': 1.1.2(react@18.3.1) + '@babel/runtime': 7.25.6 + '@ctrl/tinycolor': 3.6.1 + '@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/tour': 1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + copy-to-clipboard: 3.3.3 + dayjs: 1.11.13 + rc-cascader: 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-checkbox: 3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-collapse: 3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-drawer: 7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-field-form: 2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-image: 7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input-number: 9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-mentions: 2.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-notification: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-pagination: 4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-picker: 4.6.15(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-rate: 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-segmented: 2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-slider: 11.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-steps: 6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-switch: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-table: 7.47.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tabs: 15.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tooltip: 6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree-select: 5.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-upload: 4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - date-fns + - luxon + - moment + - react + - react-dom + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + array-tree-filter@2.1.0: {} + + asynckit@0.4.0: {} + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.3: + dependencies: + caniuse-lite: 1.0.30001655 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001655: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + classnames@2.5.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + compute-scroll-into-view@3.1.0: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + dayjs@1.11.13: {} + + debug@4.3.6: + dependencies: + ms: 2.1.2 + + deep-is@0.1.4: {} + + deepmerge@2.2.1: {} + + deepmerge@4.3.1: {} + + define-lazy-prop@2.0.0: {} + + delayed-stream@1.0.0: {} + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.25.6 + csstype: 3.1.3 + + dotenv-expand@5.1.0: {} + + dotenv@8.2.0: {} + + electron-to-chromium@1.5.13: {} + + emoji-regex@8.0.0: {} + + esbuild@0.21.5: + 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 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.11.0 + '@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.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6 + 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.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + follow-redirects@1.15.6: {} + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + formik@2.4.6(react@18.3.1): + dependencies: + '@types/hoist-non-react-statics': 3.3.5 + deepmerge: 2.2.1 + hoist-non-react-statics: 3.3.2 + lodash: 4.17.21 + lodash-es: 4.17.21 + react: 18.3.1 + react-fast-compare: 2.0.4 + tiny-warning: 1.0.3 + tslib: 2.7.0 + + framer-motion@11.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + tslib: 2.7.0 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + html-parse-stringify@3.0.1: + dependencies: + void-elements: 3.1.0 + + i18next@23.14.0: + dependencies: + '@babel/runtime': 7.25.6 + + ignore@5.3.2: {} + + immutable@4.3.7: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json2mq@0.2.0: + dependencies: + string-convert: 0.2.1 + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + load-script@1.0.0: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + memoize-one@5.2.1: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + ms@2.1.2: {} + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + object-assign@4.1.1: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + picocolors@1.1.0: {} + + picomatch@2.3.1: {} + + postcss@8.4.44: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.0 + + prelude-ls@1.2.1: {} + + prettier@3.3.3: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + rc-cascader@3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + array-tree-filter: 2.1.0 + classnames: 2.5.1 + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-checkbox@3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-collapse@3.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-dialog@9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-drawer@7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-dropdown@4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-field-form@2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/async-validator': 5.0.4 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-image@7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-input-number@9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/mini-decimal': 1.1.0 + classnames: 2.5.1 + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-input@1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-mentions@2.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-menu@9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-motion@2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-notification@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-overflow@1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-pagination@4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-picker@4.6.15(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + dayjs: 1.11.13 + + rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-rate@2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-resize-observer@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + resize-observer-polyfill: 1.5.1 + + rc-segmented@2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-select@14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.14.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-slider@11.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-steps@6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-switch@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-table@7.47.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/context': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.14.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tabs@15.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-textarea@1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tooltip@6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + '@rc-component/trigger': 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tree-select@5.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-select: 14.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tree@5.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.14.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-upload@4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-util@5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.3.1 + + rc-virtual-list@3.14.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + classnames: 2.5.1 + rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-fast-compare@2.0.4: {} + + react-fast-compare@3.2.2: {} + + react-i18next@14.1.3(i18next@23.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + html-parse-stringify: 3.0.1 + i18next: 23.14.0 + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + + react-icons@5.3.0(react@18.3.1): + dependencies: + react: 18.3.1 + + react-is@16.13.1: {} + + react-is@18.3.1: {} + + react-player@2.16.0(react@18.3.1): + dependencies: + deepmerge: 4.3.1 + load-script: 1.0.0 + memoize-one: 5.2.1 + prop-types: 15.8.1 + react: 18.3.1 + react-fast-compare: 3.2.2 + + react-refresh@0.14.2: {} + + react-router-dom@6.26.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@remix-run/router': 1.19.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.26.1(react@18.3.1) + + react-router@6.26.1(react@18.3.1): + dependencies: + '@remix-run/router': 1.19.1 + react: 18.3.1 + + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + resize-observer-polyfill@1.5.1: {} + + resolve-from@4.0.0: {} + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup-plugin-visualizer@5.12.0(rollup@4.21.2): + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.21.2 + + rollup@4.21.2: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.2 + '@rollup/rollup-android-arm64': 4.21.2 + '@rollup/rollup-darwin-arm64': 4.21.2 + '@rollup/rollup-darwin-x64': 4.21.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.2 + '@rollup/rollup-linux-arm-musleabihf': 4.21.2 + '@rollup/rollup-linux-arm64-gnu': 4.21.2 + '@rollup/rollup-linux-arm64-musl': 4.21.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2 + '@rollup/rollup-linux-riscv64-gnu': 4.21.2 + '@rollup/rollup-linux-s390x-gnu': 4.21.2 + '@rollup/rollup-linux-x64-gnu': 4.21.2 + '@rollup/rollup-linux-x64-musl': 4.21.2 + '@rollup/rollup-win32-arm64-msvc': 4.21.2 + '@rollup/rollup-win32-ia32-msvc': 4.21.2 + '@rollup/rollup-win32-x64-msvc': 4.21.2 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sass@1.77.8: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.7 + source-map-js: 1.2.0 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.0 + + semver@6.3.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.0: {} + + source-map@0.7.4: {} + + string-convert@0.2.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + stylis@4.3.4: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + swiper@11.1.14: {} + + text-table@0.2.0: {} + + throttle-debounce@5.0.2: {} + + tiny-warning@1.0.3: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toggle-selection@1.0.6: {} + + tslib@2.7.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + typescript@5.5.4: {} + + undici-types@6.19.8: {} + + universalify@2.0.1: {} + + update-browserslist-db@1.1.0(browserslist@4.23.3): + dependencies: + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + + vite-plugin-compression@0.5.1(vite@5.4.2(@types/node@22.5.2)(sass@1.77.8)): + dependencies: + chalk: 4.1.2 + debug: 4.3.6 + fs-extra: 10.1.0 + vite: 5.4.2(@types/node@22.5.2)(sass@1.77.8) + transitivePeerDependencies: + - supports-color + + vite-plugin-env-compatible@2.0.1: + dependencies: + dotenv: 8.2.0 + dotenv-expand: 5.1.0 + + vite@5.4.2(@types/node@22.5.2)(sass@1.77.8): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.44 + rollup: 4.21.2 + optionalDependencies: + '@types/node': 22.5.2 + fsevents: 2.3.3 + sass: 1.77.8 + + void-elements@3.1.0: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + zustand@4.5.5(@types/react@18.3.5)(react@18.3.1): + dependencies: + use-sync-external-store: 1.2.2(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.5 + react: 18.3.1 diff --git a/public/Download/1.png b/public/Download/1.png new file mode 100644 index 0000000..8506274 Binary files /dev/null and b/public/Download/1.png differ diff --git a/public/Features/1.png b/public/Features/1.png new file mode 100644 index 0000000..53d5fa5 Binary files /dev/null and b/public/Features/1.png differ diff --git a/public/Features/2.png b/public/Features/2.png new file mode 100644 index 0000000..7a494eb Binary files /dev/null and b/public/Features/2.png differ diff --git a/public/Features/3.png b/public/Features/3.png new file mode 100644 index 0000000..aa18848 Binary files /dev/null and b/public/Features/3.png differ diff --git a/public/Features/4.png b/public/Features/4.png new file mode 100644 index 0000000..99b2006 Binary files /dev/null and b/public/Features/4.png differ diff --git a/public/Features/5.png b/public/Features/5.png new file mode 100644 index 0000000..8443643 Binary files /dev/null and b/public/Features/5.png differ diff --git a/public/Features/6.png b/public/Features/6.png new file mode 100644 index 0000000..4ffe77d Binary files /dev/null and b/public/Features/6.png differ diff --git a/public/Features/main.png b/public/Features/main.png new file mode 100644 index 0000000..ed71172 Binary files /dev/null and b/public/Features/main.png differ diff --git a/public/HomeImage.png b/public/HomeImage.png new file mode 100644 index 0000000..4b582dd Binary files /dev/null and b/public/HomeImage.png differ diff --git a/public/HowItWorks/1.png b/public/HowItWorks/1.png new file mode 100644 index 0000000..7889f55 Binary files /dev/null and b/public/HowItWorks/1.png differ diff --git a/public/HowItWorks/2.png b/public/HowItWorks/2.png new file mode 100644 index 0000000..ed71172 Binary files /dev/null and b/public/HowItWorks/2.png differ diff --git a/public/HowItWorks/3.png b/public/HowItWorks/3.png new file mode 100644 index 0000000..5d998f3 Binary files /dev/null and b/public/HowItWorks/3.png differ diff --git a/public/HowItWorks/4.png b/public/HowItWorks/4.png new file mode 100644 index 0000000..bb035f9 Binary files /dev/null and b/public/HowItWorks/4.png differ diff --git a/public/HowItWorks/main.png b/public/HowItWorks/main.png new file mode 100644 index 0000000..03d713e Binary files /dev/null and b/public/HowItWorks/main.png differ diff --git a/public/LOGO.png b/public/LOGO.png new file mode 100644 index 0000000..b2ad2ae Binary files /dev/null and b/public/LOGO.png differ diff --git a/public/Note/1.png b/public/Note/1.png new file mode 100644 index 0000000..ca7e271 Binary files /dev/null and b/public/Note/1.png differ diff --git a/public/Note/2.png b/public/Note/2.png new file mode 100644 index 0000000..4643b68 Binary files /dev/null and b/public/Note/2.png differ diff --git a/public/Slider.png b/public/Slider.png new file mode 100644 index 0000000..ed145a4 Binary files /dev/null and b/public/Slider.png differ diff --git a/public/SwipeScreenShoot/1.png b/public/SwipeScreenShoot/1.png new file mode 100644 index 0000000..5c2341e Binary files /dev/null and b/public/SwipeScreenShoot/1.png differ diff --git a/public/SwipeScreenShoot/2.png b/public/SwipeScreenShoot/2.png new file mode 100644 index 0000000..395f91b Binary files /dev/null and b/public/SwipeScreenShoot/2.png differ diff --git a/public/SwipeScreenShoot/3.png b/public/SwipeScreenShoot/3.png new file mode 100644 index 0000000..379e109 Binary files /dev/null and b/public/SwipeScreenShoot/3.png differ diff --git a/public/SwipeScreenShoot/4.png b/public/SwipeScreenShoot/4.png new file mode 100644 index 0000000..e2b08a0 Binary files /dev/null and b/public/SwipeScreenShoot/4.png differ diff --git a/public/SwipeScreenShoot/5.png b/public/SwipeScreenShoot/5.png new file mode 100644 index 0000000..15bd1ba Binary files /dev/null and b/public/SwipeScreenShoot/5.png differ diff --git a/public/Video/1.png b/public/Video/1.png new file mode 100644 index 0000000..be7fb0c Binary files /dev/null and b/public/Video/1.png differ diff --git a/public/Video/2.png b/public/Video/2.png new file mode 100644 index 0000000..1d30eb3 Binary files /dev/null and b/public/Video/2.png differ diff --git a/public/Video/3.png b/public/Video/3.png new file mode 100644 index 0000000..f4291c0 Binary files /dev/null and b/public/Video/3.png differ diff --git a/public/Video/4.png b/public/Video/4.png new file mode 100644 index 0000000..b134b19 Binary files /dev/null and b/public/Video/4.png differ diff --git a/public/Video/Play.png b/public/Video/Play.png new file mode 100644 index 0000000..31970b3 Binary files /dev/null and b/public/Video/Play.png differ diff --git a/public/Video/video.png b/public/Video/video.png new file mode 100644 index 0000000..c7ae927 Binary files /dev/null and b/public/Video/video.png differ diff --git a/public/circle.png b/public/circle.png new file mode 100644 index 0000000..d55a890 Binary files /dev/null and b/public/circle.png differ diff --git a/public/contact/1.png b/public/contact/1.png new file mode 100644 index 0000000..f42021f Binary files /dev/null and b/public/contact/1.png differ diff --git a/public/contact/2.png b/public/contact/2.png new file mode 100644 index 0000000..db259d6 Binary files /dev/null and b/public/contact/2.png differ diff --git a/public/contact/3.png b/public/contact/3.png new file mode 100644 index 0000000..2290aff Binary files /dev/null and b/public/contact/3.png differ diff --git a/public/shape.svg b/public/shape.svg new file mode 100644 index 0000000..2602338 --- /dev/null +++ b/public/shape.svg @@ -0,0 +1,3 @@ + + + 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/robots.txt b/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/site.webmanifest b/site.webmanifest new file mode 100644 index 0000000..ac6a1bc --- /dev/null +++ b/site.webmanifest @@ -0,0 +1,26 @@ +{ + "name": "My Web App", + "short_name": "WebApp", + "description": "A description of your web app.", + "start_url": "/", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#000000", + "icons": [ + { + "src": "/src/assets/core/Logo-192x192.webp", + "sizes": "192x192", + "type": "image/webp" + }, + { + "src": "/src/assets/core/Logo-512x512.webp", + "sizes": "512x512", + "type": "image/webp" + }, + { + "src": "/src/assets/core/Logo-192x192.png", + "sizes": "192x192", + "type": "image/png" + } + ] +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..3c7c164 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,31 @@ +import Layout from './components/layout/Layout'; +import DownloadPage from './pages/DownloadPage'; +import FeaturesPage from './pages/FeaturesPage'; +import HomePage from './pages/HomePage'; +import HowItWork from './pages/HowItWork'; +import NotePage from './pages/NotePage'; +import ScreenShoot from './pages/ScreenShoot'; +import VideoPage from './pages/VideoPage'; +import ProviderContainer from './ProviderContainer'; +import ContactPage from './pages/ContactPage'; +import './styles/App/index.scss'; +const App = () => { + + return ( + + {/* */} + + + + + + + + + + + + ); +}; + +export default App; diff --git a/src/ProviderContainer.tsx b/src/ProviderContainer.tsx new file mode 100644 index 0000000..358eca4 --- /dev/null +++ b/src/ProviderContainer.tsx @@ -0,0 +1,13 @@ +import { BrowserRouter } from 'react-router-dom'; +import QueryProvider from './lib/ReactQueryProvider'; +import I18nProvider from './lib/I18nProvider'; + +function ProviderContainer({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ); +} + +export default ProviderContainer; diff --git a/src/Routes.tsx b/src/Routes.tsx new file mode 100644 index 0000000..ce831ff --- /dev/null +++ b/src/Routes.tsx @@ -0,0 +1,33 @@ +import { lazy, Suspense } from 'react'; +import { Route, Routes as RoutesContainer } from 'react-router-dom'; +import './styles/App/index.scss'; +import SpinContainer from './components/layout/SpinContainer'; +import HomePage from './pages/HomePage'; +import Layout from './components/layout/Layout'; +import { RoutesEnums } from './enums/RoutesEnums'; +const Page404 = lazy(() => import('./components/layout/NotFoundPage')); + +const Routes = () => { + return ( + + + + + } + /> + }> + + + } + /> + + ); +}; + +export default Routes; diff --git a/src/apis/Logo-192x192.png b/src/apis/Logo-192x192.png new file mode 100644 index 0000000..ed8e678 Binary files /dev/null and b/src/apis/Logo-192x192.png differ diff --git a/src/apis/example.ts b/src/apis/example.ts new file mode 100644 index 0000000..60b66ee --- /dev/null +++ b/src/apis/example.ts @@ -0,0 +1,22 @@ +import { + useAddMutation, + useDeleteMutation, + useGetQuery, + useUpdateMutation, +} from './helpers'; + +const API = { + GET: '/example', + ADD: '/example', + DELETE: '/example', + UPDATE: '/example', +}; + +const KEY = 'example'; + +export const useGetExample = (params?: any, options?: any) => + useGetQuery(KEY, API.GET, params, options); +export const useAddExample = () => useAddMutation(KEY, API.ADD); +export const useUpdateExample = () => useUpdateMutation(KEY, API.ADD); + +export const useDeleteExample = () => useDeleteMutation(KEY, API.ADD); diff --git a/src/apis/helpers/AxiosBuilder.ts b/src/apis/helpers/AxiosBuilder.ts new file mode 100644 index 0000000..119c125 --- /dev/null +++ b/src/apis/helpers/AxiosBuilder.ts @@ -0,0 +1,41 @@ +import axios, { AxiosInstance, AxiosRequestConfig, ResponseType } from 'axios'; + +class AxiosBuilder { + private baseURL: string = ''; + private headers: Record = {}; + private timeout: number = 60000; + private responseType: ResponseType = 'json'; + + withBaseURL(baseURL: string): AxiosBuilder { + this.baseURL = baseURL; + return this; + } + + withHeaders(headers: Record): AxiosBuilder { + this.headers = { ...this.headers, ...headers }; + return this; + } + + withTimeout(timeout: number): AxiosBuilder { + this.timeout = timeout; + return this; + } + + withResponseType(responseType: ResponseType): AxiosBuilder { + this.responseType = responseType; + return this; + } + + build(): AxiosInstance { + const config: AxiosRequestConfig = { + baseURL: this.baseURL, + headers: this.headers, + timeout: this.timeout, + responseType: this.responseType, + }; + + return axios.create(config); + } +} + +export default AxiosBuilder; diff --git a/src/apis/helpers/index.ts b/src/apis/helpers/index.ts new file mode 100644 index 0000000..2c020f3 --- /dev/null +++ b/src/apis/helpers/index.ts @@ -0,0 +1,5 @@ +export { default as useDeleteMutation } from './useDeleteMutation'; +export { default as useUpdateMutation } from './useUpdateMutation'; +export { default as useAddMutation } from './useAddMutation'; +export { default as useGetQuery } from './useGetQuery'; +export { default as useGetQueryPagination } from './useGetQueryPagination'; diff --git a/src/apis/helpers/useAddMutation.ts b/src/apis/helpers/useAddMutation.ts new file mode 100644 index 0000000..f0862ad --- /dev/null +++ b/src/apis/helpers/useAddMutation.ts @@ -0,0 +1,30 @@ +import { useMutation, UseMutationResult } from '@tanstack/react-query'; +import useAxios from './useAxios'; +import { AxiosEnum } from '../../enums/Axios'; + +interface MutationData { + [key: string]: any; +} + +function useAddMutation( + key: string, + url: string, + message: string = '', +): UseMutationResult { + const axios = useAxios(); + return useMutation({ + mutationFn: async (dataToSend: MutationData) => { + const response = await axios.post(url, dataToSend, { + headers: { + 'Content-Type': 'multipart/form-data', + [AxiosEnum.HEADER_KEY]: key, + [AxiosEnum.HEADER_CUSTOM_MESSAGE]: message, + }, + }); + + return response.data; + }, + }); +} + +export default useAddMutation; diff --git a/src/apis/helpers/useAxios.ts b/src/apis/helpers/useAxios.ts new file mode 100644 index 0000000..83554a2 --- /dev/null +++ b/src/apis/helpers/useAxios.ts @@ -0,0 +1,15 @@ +import AxiosBuilder from './AxiosBuilder'; +import { AxiosEnum } from '../../enums/Axios'; + +function useAxios() { + const buildAxios = new AxiosBuilder() + .withBaseURL(AxiosEnum?.BASEURL as string) + .withResponseType(AxiosEnum.RESPONSE_TYPE) + .withTimeout(AxiosEnum.TIMEOUT) + .withHeaders({ Accept: 'application/json' }); + const axios = buildAxios.build(); + + return axios; +} + +export default useAxios; diff --git a/src/apis/helpers/useDeleteMutation.ts b/src/apis/helpers/useDeleteMutation.ts new file mode 100644 index 0000000..26c9546 --- /dev/null +++ b/src/apis/helpers/useDeleteMutation.ts @@ -0,0 +1,33 @@ +import { useMutation, UseMutationResult } from '@tanstack/react-query'; +import useAxios from './useAxios'; +import { AxiosEnum } from '../../enums/Axios'; +import { AxiosResponse } from '../../types/axios'; + +type DataToSend = { + id: number | string; +}; + +function useDeleteMutation( + key: string, + url: string, + message: string = '', +): UseMutationResult, unknown, DataToSend, unknown> { + const axios = useAxios(); + + return useMutation, unknown, DataToSend, unknown>({ + mutationFn: async (dataToSend: DataToSend) => { + const { data } = await axios.delete>( + `${url}/${dataToSend.id}`, + { + headers: { + [AxiosEnum.HEADER_KEY]: key, + [AxiosEnum.HEADER_CUSTOM_MESSAGE]: message, + }, + }, + ); + return data; + }, + }); +} + +export default useDeleteMutation; diff --git a/src/apis/helpers/useGetQuery.ts b/src/apis/helpers/useGetQuery.ts new file mode 100644 index 0000000..a7619a1 --- /dev/null +++ b/src/apis/helpers/useGetQuery.ts @@ -0,0 +1,23 @@ +import { useQuery } from '@tanstack/react-query'; +import useAxios from './useAxios'; + +function useGetQuery( + KEY: string | string[], + url: string, + params: Record = {}, + options: Record = {}, +) { + const axios = useAxios(); + + const KEYS = typeof KEY === 'string' ? [KEY, params] : [...KEY, params]; + return useQuery({ + queryKey: KEYS, + queryFn: async () => { + const response = await axios.get(url, { params }); + return response?.data ?? []; + }, + ...options, + }); +} + +export default useGetQuery; diff --git a/src/apis/helpers/useGetQueryPagination.ts b/src/apis/helpers/useGetQueryPagination.ts new file mode 100644 index 0000000..c4c0d9f --- /dev/null +++ b/src/apis/helpers/useGetQueryPagination.ts @@ -0,0 +1,41 @@ +import { useQuery } from '@tanstack/react-query'; +import useAxios from './useAxios'; +import { QueryPaginationEnum } from '../../enums/TankStackQueryEnum'; + +function useGetQueryPagination( + KEY: string | string[], + url: string, + params: Record = {}, + options: Record = {}, +) { + const axios = useAxios(); + + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + + const page = urlParams.get('page') || QueryPaginationEnum.DEFAULT_PAGE; + const per_page = + urlParams.get('per_page') || QueryPaginationEnum.DEFAULT_PER_PAGE; + + const KEYS = + typeof KEY === 'string' + ? [KEY, params, page, per_page] + : [...KEY, params, page, per_page]; + + return useQuery({ + queryKey: KEYS, + queryFn: async () => { + const response = await axios.get(url, { + params: { + ...params, + page, + per_page, + }, + }); + return (response?.data as any) ?? []; + }, + ...options, + }); +} + +export default useGetQueryPagination; diff --git a/src/apis/helpers/useUpdateMutation.ts b/src/apis/helpers/useUpdateMutation.ts new file mode 100644 index 0000000..19afd33 --- /dev/null +++ b/src/apis/helpers/useUpdateMutation.ts @@ -0,0 +1,48 @@ +import { useMutation, UseMutationResult } from '@tanstack/react-query'; +import useAxios from './useAxios'; // Adjust the import path as necessary +import { AxiosEnum } from '../../enums/Axios'; + +type DataToSend = { + id: number | string; + newData: any; // Define the type for updated data +}; + +interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: Record; + config: Record; + request?: any; +} + +function useUpdateMutation( + key: string, + url: string, + message: string = '', +): UseMutationResult, unknown, DataToSend, unknown> { + const axios = useAxios(); + + return useMutation, unknown, DataToSend, unknown>({ + mutationFn: async (dataToSend: DataToSend) => { + const { id, newData } = dataToSend; + const newUrl = `${url}/${id}`; + const MutateData = + newData instanceof FormData ? newData : { ...newData, _method: 'PUT' }; + const { data } = await axios.post>( + newUrl, + MutateData, + { + headers: { + 'Content-Type': 'multipart/form-data', + [AxiosEnum.HEADER_KEY]: key, + [AxiosEnum.HEADER_CUSTOM_MESSAGE]: message, + }, + }, + ); + return data; + }, + }); +} + +export default useUpdateMutation; diff --git a/src/assets/core/Logo-192x192.png b/src/assets/core/Logo-192x192.png new file mode 100644 index 0000000..ed8e678 Binary files /dev/null and b/src/assets/core/Logo-192x192.png differ diff --git a/src/assets/core/Logo-192x192.webp b/src/assets/core/Logo-192x192.webp new file mode 100644 index 0000000..f97be21 Binary files /dev/null and b/src/assets/core/Logo-192x192.webp differ diff --git a/src/assets/core/Logo-512x512.webp b/src/assets/core/Logo-512x512.webp new file mode 100644 index 0000000..ea47a71 Binary files /dev/null and b/src/assets/core/Logo-512x512.webp differ diff --git a/src/assets/core/logo.svg b/src/assets/core/logo.svg new file mode 100644 index 0000000..03d7db7 --- /dev/null +++ b/src/assets/core/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/language/ar.svg b/src/assets/language/ar.svg new file mode 100644 index 0000000..c409129 --- /dev/null +++ b/src/assets/language/ar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/language/en.svg b/src/assets/language/en.svg new file mode 100644 index 0000000..b1db6ff --- /dev/null +++ b/src/assets/language/en.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/static/shapes.svg b/src/assets/static/shapes.svg new file mode 100644 index 0000000..785e470 --- /dev/null +++ b/src/assets/static/shapes.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/components/Contact/Left.tsx b/src/components/Contact/Left.tsx new file mode 100644 index 0000000..0aaa1ed --- /dev/null +++ b/src/components/Contact/Left.tsx @@ -0,0 +1,46 @@ +import React from 'react' + +const Left = () => { + const Left = [ + { + title: "المكتب الرئيسي", + image: "/contact/1.png", + value: "121 King St , ملبورن VIC 3000, أستراليا" + }, + { + title: "المكتب الرئيسي", + image: "/contact/2.png", + value: "121 King St , ملبورن VIC 3000, أستراليا" + }, + { + title: "المكتب الرئيسي", + image: "/contact/3.png", + value: "121 King St , ملبورن VIC 3000, أستراليا" + } + ] + return ( +
+

تواصل معنا

+

+ من السهل جدا الاتصال بنا. ما عليك سوى استخدام نموذج الاتصال أو زيارتنا في المكتب. ابتكار التكنولوجيا التنافسية ديناميكيا بعد مجموعة موسعة من القيادة. +

+
+ {Left?.map((item, index) => { + return ( + +
+ +
{item.title}
+
+

{item.value}

+
+ ) + })} + +
+
+ + ) +} + +export default Left \ No newline at end of file diff --git a/src/components/Contact/Right.tsx b/src/components/Contact/Right.tsx new file mode 100644 index 0000000..f179e69 --- /dev/null +++ b/src/components/Contact/Right.tsx @@ -0,0 +1,32 @@ +import { Form, Formik } from 'formik' +import React from 'react' +import InputField from '../Field/InputField' +import TextAreaField from '../Field/TextAreaField' + +const Right = () => { + const handleSubmit = ()=>{ + + } + return ( +
+

تواصل معنا بسرعة

+ +
+
+ + + + + +
+ +
+
+ +
+ ) +} + +export default Right \ No newline at end of file diff --git a/src/components/Field/InputField.tsx b/src/components/Field/InputField.tsx new file mode 100644 index 0000000..fb5bf19 --- /dev/null +++ b/src/components/Field/InputField.tsx @@ -0,0 +1,25 @@ +import { Input, InputProps } from "antd"; +import React from "react"; +import { Field } from "formik"; + +const InputField = ({ + name, + ...props +}: InputProps) => { + + return ( +
+ + +
+ ); +}; + +export default React.memo(InputField); diff --git a/src/components/Field/TextAreaField.tsx b/src/components/Field/TextAreaField.tsx new file mode 100644 index 0000000..23dc5c6 --- /dev/null +++ b/src/components/Field/TextAreaField.tsx @@ -0,0 +1,27 @@ +import { InputProps } from "antd"; +import React from "react"; +import { Field } from "formik"; +import TextArea from "antd/es/input/TextArea"; + +const TextAreaField = ({ + name, + ...props +}: InputProps) => { + + return ( +
+ + +
+ ); +}; + +export default React.memo(TextAreaField); diff --git a/src/components/SwiperScreenShoot.tsx b/src/components/SwiperScreenShoot.tsx new file mode 100644 index 0000000..38f4527 --- /dev/null +++ b/src/components/SwiperScreenShoot.tsx @@ -0,0 +1,67 @@ +import React from 'react'; +// Import Swiper React components +import { Pagination, A11y ,Autoplay} from 'swiper/modules'; +import { Swiper, SwiperSlide } from 'swiper/react'; +import 'swiper/css'; +import 'swiper/css/navigation'; +import 'swiper/css/pagination'; +import 'swiper/css/scrollbar'; + +const SwipeScreenShoot = () => { + const SwipeScreenShoot = [ + { image: "/SwipeScreenShoot/1.png" }, + { image: "/SwipeScreenShoot/2.png" }, + { image: "/SwipeScreenShoot/3.png" }, + { image: "/SwipeScreenShoot/4.png" }, + { image: "/SwipeScreenShoot/1.png" }, + { image: "/SwipeScreenShoot/2.png" }, + { image: "/SwipeScreenShoot/3.png" }, + { image: "/SwipeScreenShoot/1.png" }, + { image: "/SwipeScreenShoot/2.png" }, + { image: "/SwipeScreenShoot/3.png" }, + { image: "/SwipeScreenShoot/4.png" }, + { image: "/SwipeScreenShoot/1.png" }, + { image: "/SwipeScreenShoot/2.png" }, + { image: "/SwipeScreenShoot/3.png" }, + + ]; + + return ( +
+ console.log(swiper)} + onSlideChange={() => console.log('slide change')} + breakpoints={{ + 400: { + slidesPerView: 1, + }, + 800: { + slidesPerView: 2, + }, + 1200: { + slidesPerView: 3, + }, + 1500: { + slidesPerView: 5, + }, + 2000: { + slidesPerView: 7, + }, + }} + > + {SwipeScreenShoot.map((item, index) => ( + + {`Screenshot + + ))} + +
+ ); +} + +export default SwipeScreenShoot; \ No newline at end of file diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx new file mode 100644 index 0000000..31e9b19 --- /dev/null +++ b/src/components/layout/Footer.tsx @@ -0,0 +1,33 @@ +import { Input } from "antd"; +import { FaFacebook, FaInstagram, FaTelegram, FaTwitter } from "react-icons/fa"; + +const Footer = () => { + return ( +
+ logo +
+ + + + +
+

+ © زاكر 2024.جميع الحقوق محفوظة +

+ + +

اشترك في نشرتنا الإخبارية

+

نحن فريق من غير المتشائمين الذين يهتمون حقا بعملنا.

+
+
+ +
+ +
+
+
+
+ ) +}; + +export default Footer; diff --git a/src/components/layout/Layout.tsx b/src/components/layout/Layout.tsx new file mode 100644 index 0000000..50f04fc --- /dev/null +++ b/src/components/layout/Layout.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import NavBar from './NavBar'; +import Footer from './Footer'; + +const Layout = ({ children }: { children: React.ReactNode }) => { + return ( +
+ + {children} +
+
+ ); +}; + +export default Layout; diff --git a/src/components/layout/NavBar.tsx b/src/components/layout/NavBar.tsx new file mode 100644 index 0000000..a1f8ecb --- /dev/null +++ b/src/components/layout/NavBar.tsx @@ -0,0 +1,87 @@ +// NavBar.tsx +import React, { useState } from 'react'; +import { RoutesEnums } from '../../enums/RoutesEnums'; +import { useTranslation } from 'react-i18next'; +import { MdLanguage } from "react-icons/md"; +import { FaEllipsis } from 'react-icons/fa6'; +import { Popover } from 'antd'; + +// Define an enum for the routes + + +// Define a type for the link objects +interface NavLink { + path: RoutesEnums; + label: string; +} + +const NavBar: React.FC = () => { + // Define an array of link objects using the RoutesEnums + const [t] = useTranslation() + const links: NavLink[] = [ + { path: RoutesEnums.HOME, label: t('home') }, + { path: RoutesEnums.FEATURES, label: t('features') }, + { path: RoutesEnums.HOW_IT_WORK, label: t('how_it_work') }, + { path: RoutesEnums.SCREEN_SHOOT, label: t('screen_shoot') }, + { path: RoutesEnums.NOTE, label: t('note') }, + { path: RoutesEnums.CONTACT, label: t('contact_us') }, + ]; + const [Open, setOpen] = useState(false) + const handleToggle = ()=>{ + setOpen(!Open) + } + + +const NavBarContent = ( +
+
    + {links.map((link) =>{ + return ( +
  • + {link.label} +
  • + ) + + })} +
+ +
+); + + + const [Active, setActive] = useState(location.hash) + console.log(Active); + + return ( + + ); +}; + +export default NavBar; \ No newline at end of file diff --git a/src/components/layout/NotFoundPage.tsx b/src/components/layout/NotFoundPage.tsx new file mode 100644 index 0000000..81be32b --- /dev/null +++ b/src/components/layout/NotFoundPage.tsx @@ -0,0 +1,21 @@ +import { useNavigate } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; +function NotFoundPage() { + const navigate = useNavigate(); + const [t] = useTranslation(); + const handleNavigate = () => { + navigate('/'); + }; + return ( +
+
+

404 | {t('This_page_could_not_be_found')}

+
+ +
+
+
+ ); +} + +export default NotFoundPage; diff --git a/src/components/layout/PageTransition.tsx b/src/components/layout/PageTransition.tsx new file mode 100644 index 0000000..28c2f74 --- /dev/null +++ b/src/components/layout/PageTransition.tsx @@ -0,0 +1,47 @@ +import React, { useState, useEffect, ReactNode } from 'react'; +import { useNavigate, useLocation } from 'react-router-dom'; + +interface PageTransitionProps { + to: string; + children: ReactNode; +} + +const PageTransition: React.FC = ({ to, children }) => { + const [transitioning, setTransitioning] = useState(false); + const [reversed, setReversed] = useState(false); + const navigate = useNavigate(); + const location = useLocation(); + + const handleClick = () => { + if (location.pathname === to) { + return; // Prevent navigation to the same route + } + setTransitioning(true); + setTimeout(() => { + navigate(to); + setReversed(true); // Set reversed for the entrance animation + }, 1000); // Match this timing with the exit animation duration + }; + + useEffect(() => { + if (reversed) { + setTimeout(() => { + setReversed(false); // Clear the reversed state after the animation + setTransitioning(false); + }, 1000); // Match this timing with the entrance animation duration + } + }, [reversed]); + + return ( + <> +
+
+ {children} +
+ + ); +}; + +export default PageTransition; diff --git a/src/components/layout/SpinContainer.tsx b/src/components/layout/SpinContainer.tsx new file mode 100644 index 0000000..2f31dd9 --- /dev/null +++ b/src/components/layout/SpinContainer.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +const SpinContainer: React.FC = () => { + return ( +
+
+
+ ); +}; + + +export default SpinContainer; \ No newline at end of file diff --git a/src/design-system/FirstLoading.tsx b/src/design-system/FirstLoading.tsx new file mode 100644 index 0000000..74d1b1d --- /dev/null +++ b/src/design-system/FirstLoading.tsx @@ -0,0 +1,59 @@ +import React, { useEffect, useState } from 'react'; +import { Logo } from '../utils'; + +interface FirstLoadingProps { + seconds: number; + children: React.ReactNode; // Add children prop +} +const FirstLoading: React.FC = ({ seconds,children }) => { + const [currentNumber, setCurrentNumber] = useState(1); + const [animate, setAnimate] = useState(false); + const [pageUp, setPageUp] = useState(false); // New state for page movement + const totalNumbers = 100; + + useEffect(() => { + const intervalTime = (seconds * 1000) / totalNumbers; + + const interval = setInterval(() => { + setCurrentNumber((prev) => { + if (prev < totalNumbers) { + setAnimate(true); + return prev + 1; + } else { + setPageUp(true); // Trigger page movement + clearInterval(interval); + return prev; + } + }); + }, intervalTime); + + return () => clearInterval(interval); + }, [seconds]); + + useEffect(() => { + if (animate) { + const timer = setTimeout(() => setAnimate(false), 500); + return () => clearTimeout(timer); + } + }, [animate]); + + return ( + <> +
+
+ +
+ [{currentNumber} %] +
+
+
+ { + pageUp && children + } + + + + ); +}; + +export default FirstLoading; \ No newline at end of file diff --git a/src/enums/Axios.ts b/src/enums/Axios.ts new file mode 100644 index 0000000..d64a1b8 --- /dev/null +++ b/src/enums/Axios.ts @@ -0,0 +1,28 @@ +export enum AxiosQueryEnum { + GET = 'get', + POST = 'post', + DELETE = 'delete', +} + +export enum AxiosStatusEnum { + VALIDATION = 422, + AUTHENTICATED = 401, +} + +export enum AxiosEnum { + BASEURL = import.meta.env.REACT_APP_BASE_URL, + IMAGE_BASE_URL = 'http://localhost:8000', + + HEADER_KEY = 'X-Custom-Query-Key', + HEADER_CUSTOM_MESSAGE = 'X-Custom-message', + RESPONSE_TYPE = 'json', + TIMEOUT = 120000, + BEARER = 'Bearer ', +} + +export enum AxiosQueryStatusEnum { + ERROR = 'error', + IDLE = 'idle', + PENDING = 'pending', + SUCCESS = 'success', +} diff --git a/src/enums/LocalStorage.ts b/src/enums/LocalStorage.ts new file mode 100644 index 0000000..9dc28fd --- /dev/null +++ b/src/enums/LocalStorage.ts @@ -0,0 +1,8 @@ +export enum LocalStorageEnum { + PROJECT_NAME = 'NERD', + LANGUAGE_KEY = LocalStorageEnum.PROJECT_NAME + '_L', + THEME_KEY = LocalStorageEnum.PROJECT_NAME + '_T', + TOKEN_KEY = LocalStorageEnum.PROJECT_NAME + '_TK', + USER_KEY = LocalStorageEnum.PROJECT_NAME + '_UK', + ABILITIES_KEY = LocalStorageEnum.PROJECT_NAME + '_AK', +} diff --git a/src/enums/RoutesEnums.ts b/src/enums/RoutesEnums.ts new file mode 100644 index 0000000..f9ed87f --- /dev/null +++ b/src/enums/RoutesEnums.ts @@ -0,0 +1,8 @@ +export enum RoutesEnums { + HOME = '#', + FEATURES = '#features', + HOW_IT_WORK = '#how_it_work', + SCREEN_SHOOT = '#screen_shoot', + NOTE = '#note', + CONTACT = '#contact_us', + } \ No newline at end of file diff --git a/src/enums/TankStackQueryEnum.ts b/src/enums/TankStackQueryEnum.ts new file mode 100644 index 0000000..3c345a9 --- /dev/null +++ b/src/enums/TankStackQueryEnum.ts @@ -0,0 +1,11 @@ +export enum QueryPaginationEnum { + DEFAULT_PER_PAGE = 10, + DEFAULT_PAGE = 1, +} + +export enum QueryStatusEnum { + ERROR = 'error', + IDLE = 'idle', + PENDING = 'pending', + SUCCESS = 'success', +} diff --git a/src/hooks/useChangeLanguage.ts b/src/hooks/useChangeLanguage.ts new file mode 100644 index 0000000..5a0aaab --- /dev/null +++ b/src/hooks/useChangeLanguage.ts @@ -0,0 +1,52 @@ +import { useState, useCallback, useEffect } from 'react'; +import i18n from 'i18next'; +import { setLanguageDirection } from '../utils/document/setLanguageDirection'; +import { LocalStorageEnum } from '../enums/LocalStorage'; +import en from '../../../assets/language/en.svg'; +import ar from '../../../assets/language/ar.svg'; +import { LocalStorageManager } from '../utils/class/LocalStorageManager'; +const validLanguages = ['en', 'ar']; + +export const useChangeLanguage = () => { + const getInitialLanguage = () => { + const storedLanguage = LocalStorageManager.getItem( + LocalStorageEnum.LANGUAGE_KEY, + ) as string; + return validLanguages.includes(storedLanguage) ? storedLanguage : 'ar'; + }; + + const [currentLanguage, setCurrentLanguage] = + useState(getInitialLanguage()); + + const changeLanguage = useCallback((newLanguage: string) => { + if (validLanguages.includes(newLanguage)) { + setCurrentLanguage(newLanguage); + } else { + console.error(`Invalid language code: ${newLanguage}`); + } + }, []); + + useEffect(() => { + const applyLanguage = async () => { + try { + await i18n.changeLanguage(currentLanguage); + setLanguageDirection(currentLanguage); + LocalStorageManager.setItem( + LocalStorageEnum.LANGUAGE_KEY, + currentLanguage, + ); + } catch (error) { + console.error('Error changing language:', error); + } + }; + + applyLanguage(); + }, [currentLanguage]); + + return { currentLanguage, changeLanguage }; +}; + +export const languageOptions = [ + { code: 'ar', icon: ar, label: 'Arabic' }, + { code: 'en', icon: en, label: 'English' }, +]; diff --git a/src/hooks/useTheme.ts b/src/hooks/useTheme.ts new file mode 100644 index 0000000..f8e75bd --- /dev/null +++ b/src/hooks/useTheme.ts @@ -0,0 +1,29 @@ +import { useState, useEffect } from 'react'; +import { LocalStorageEnum } from '../enums/LocalStorage'; +import { LocalStorageManager } from '../utils/class/LocalStorageManager'; + +function useTheme(): [string, () => void] { + const [theme, setTheme] = useState(() => { + const storedTheme = LocalStorageManager.getItem( + LocalStorageEnum.THEME_KEY, + ) as string; + return storedTheme ? storedTheme : 'light'; + }); + + useEffect(() => { + // Update the body class when the theme changes + document.body.classList.remove(theme === 'light' ? 'dark' : 'light'); + document.body.classList.add(theme); + + // Save the new theme to local storage + LocalStorageManager.setItem(LocalStorageEnum.THEME_KEY, theme); + }, [theme]); + + const changeTheme = () => { + setTheme(theme === 'light' ? 'dark' : 'light'); + }; + + return [theme, changeTheme]; +} + +export default useTheme; diff --git a/src/lib/I18nProvider.tsx b/src/lib/I18nProvider.tsx new file mode 100644 index 0000000..50eb83f --- /dev/null +++ b/src/lib/I18nProvider.tsx @@ -0,0 +1,23 @@ +import React, { ReactNode, useEffect } from 'react'; +import { I18nextProvider } from 'react-i18next'; +import i18n from './i18n'; // Import the pre-initialized i18n instance +import { LocalStorageEnum } from '../enums/LocalStorage'; +import { LocalStorageManager } from '../utils/class/LocalStorageManager'; + +interface I18nProviderProps { + children: ReactNode; +} + +const I18nProvider: React.FC = ({ children }) => { + useEffect(() => { + const currentLanguage =(LocalStorageManager.getItem(LocalStorageEnum.LANGUAGE_KEY) as string) === + 'en' + ? 'en' + : 'ar'; + i18n.changeLanguage(currentLanguage); + }, []); + + return {children}; +}; + +export default I18nProvider; diff --git a/src/lib/ReactQueryProvider.tsx b/src/lib/ReactQueryProvider.tsx new file mode 100644 index 0000000..95c4dc7 --- /dev/null +++ b/src/lib/ReactQueryProvider.tsx @@ -0,0 +1,17 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; + +function QueryProvider({ children }: { children: React.ReactNode }) { + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false, + }, + }, + }); + + return ( + {children} + ); +} + +export default QueryProvider; diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts new file mode 100644 index 0000000..a6fecdb --- /dev/null +++ b/src/lib/i18n.ts @@ -0,0 +1,22 @@ +// i18n.ts +import i18n from 'i18next'; +import { initReactI18next } from 'react-i18next'; +import translationEN from '../translate/en.json'; +import translationAR from '../translate/ar.json'; + +i18n.use(initReactI18next).init({ + resources: { + en: { + translation: translationEN, + }, + ar: { + translation: translationAR, + }, + }, + fallbackLng: 'en', + interpolation: { + escapeValue: false, + }, +}); + +export default i18n; diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..e0ba81b --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,4 @@ +import { createRoot } from 'react-dom/client'; +import App from './App.tsx'; + +createRoot(document.getElementById('root')!).render(); diff --git a/src/pages/AboutUs.tsx b/src/pages/AboutUs.tsx new file mode 100644 index 0000000..77b9b7c --- /dev/null +++ b/src/pages/AboutUs.tsx @@ -0,0 +1,9 @@ +import React from 'react' + +const AboutUs = () => { + return ( +
AboutUs
+ ) +} + +export default AboutUs \ No newline at end of file diff --git a/src/pages/ContactPage.tsx b/src/pages/ContactPage.tsx new file mode 100644 index 0000000..2b177f0 --- /dev/null +++ b/src/pages/ContactPage.tsx @@ -0,0 +1,15 @@ +import React from 'react' +import Left from '../components/Contact/Left' +import Right from '../components/Contact/Right' + +const ContactPage = () => { + return ( +
+ + + +
+ ) +} + +export default ContactPage \ No newline at end of file diff --git a/src/pages/DownloadPage.tsx b/src/pages/DownloadPage.tsx new file mode 100644 index 0000000..3465df0 --- /dev/null +++ b/src/pages/DownloadPage.tsx @@ -0,0 +1,47 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' +import { BsGooglePlay } from 'react-icons/bs' +import { FaApple } from 'react-icons/fa' + +const DownloadPage = () => { + const { t } = useTranslation() + + return ( +
+
+

متوفر الآن على

+

ابدأ العمل مع ذلك الذي يمكن أن يوفر كل ما تحتاجه لتوليد الوعي وزيادة حركة المرور والتواصل. تحويل القيمة الدقيقة بكفاءة من خلال المحتوى الذي يركز على العميل.

+
+ + +
+
+ +
+ + +
+ + +
+ + ) +} + +export default DownloadPage \ No newline at end of file diff --git a/src/pages/FeaturesPage.tsx b/src/pages/FeaturesPage.tsx new file mode 100644 index 0000000..56f4032 --- /dev/null +++ b/src/pages/FeaturesPage.tsx @@ -0,0 +1,68 @@ +import { useTranslation } from 'react-i18next' + +const FeaturesPage = () => { + + const features = [ + { + "img": "1", + "title": "Friendly_Online_Support", + "description": "Providing_round_the_clock_technical_support_to_assist_you_with_any_inquiries" + }, + { + "img": "2", + "title": "Unlimited_Features", + "description": "Enjoy_limitless_possibilities_to_customize_your_experience" + }, + { + "img": "3", + "title": "Modular_and_Switchable_Component", + "description": "Easily_switch_between_layouts_and_even_demos" + }, + { + "img": "4", + "title": "High_Resolution", + "description": "Get_high_quality_images_and_videos" + }, + { + "img": "5", + "title": "Social_Sharing", + "description": "Easily_share_content_across_social_media_platforms" + }, + { + "img": "6", + "title": "Use_on_Any_Device", + "description": "Compatibility_with_all_devices_for_a_seamless_experience" + } + ] + const [t] = useTranslation() + return ( +
+

{t("Application_Features")}

+

{t("Providing_professional_value_objectively_with_varied_web_readiness_Collaborative_wireless_customer_service_without_targeted_incentives_for_change_Collaboration")}

+
+ + {features.map((item, index) => { + return ( +
+ {`${index}`} +
+

+ {t(item.title)} +

+

+ {t(item.description)} +

+
+
+ ) + })} + +
+ + +
+
+ ) +} + +export default FeaturesPage \ No newline at end of file diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx new file mode 100644 index 0000000..b7c2423 --- /dev/null +++ b/src/pages/HomePage.tsx @@ -0,0 +1,41 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' +import { BsGooglePlay } from 'react-icons/bs' +import { FaApple } from 'react-icons/fa' + +const HomePage = () => { + const { t } = useTranslation() + return ( +
+
+

{t('get_free_download')}

{t('quiz_app')}

+

{t('reader_distracted')}

+
+ + +
+
+ + + +
+ ) +} + +export default HomePage \ No newline at end of file diff --git a/src/pages/HowItWork.tsx b/src/pages/HowItWork.tsx new file mode 100644 index 0000000..165ba75 --- /dev/null +++ b/src/pages/HowItWork.tsx @@ -0,0 +1,77 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' + +const HowItWork = () => { + + const HowItWorks = [ + { + "img": "1", + "title": "Friendly_Online_Support", + "description": "Providing_round_the_clock_technical_support_to_assist_you_with_any_inquiries" + }, + { + "img": "2", + "title": "Unlimited_Features", + "description": "Enjoy_limitless_possibilities_to_customize_your_experience" + }, + { + "img": "3", + "title": "Modular_and_Switchable_Component", + "description": "Easily_switch_between_layouts_and_even_demos" + }, + { + "img": "4", + "title": "High_Resolution", + "description": "Get_high_quality_images_and_videos" + }, + ] + const [t] = useTranslation() + + return ( +
+

كيف يعمل؟

+

+ استضافة احترافية بسعر مناسب. تلخيص الكفاءات الأساسية التي تركز على المبدأ بشكل مميز من خلال الكفاءات الأساسية التي تركز على العميل. +

+
+ + {HowItWorks.slice(0,2).map((item, index) => { + return ( +
+ {`${index}`} +
+

+ {t(item.title)} +

+

+ {t(item.description)} +

+
+
+ ) + })} +
+ + + {HowItWorks.slice(2,4).map((item, index) => { + return ( +
+ {`${index}`} +
+

+ {t(item.title)} +

+

+ {t(item.description)} +

+
+
+ ) + })} +
+
+
+ ) +} + +export default HowItWork \ No newline at end of file diff --git a/src/pages/NotePage.tsx b/src/pages/NotePage.tsx new file mode 100644 index 0000000..fdaa0d9 --- /dev/null +++ b/src/pages/NotePage.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import { Rate } from 'antd'; + +const NotePage = () => { + const Note = [ + { + description:"تسهيل الضرورات الوظيفية بشكل جوهري بدون خدمات وصفية من الجيل التالي. إحداث ثورة مقنعة في المستخدمين في جميع أنحاء العالم مقابل أفضل ممارسات المؤسسة", + rate:4, + img:"/Note/1.png", + name:"إليسا اسكندر" + + }, + { + description:"تسهيل الضرورات الوظيفية بشكل جوهري بدون خدمات وصفية من الجيل التالي. إحداث ثورة مقنعة في المستخدمين في جميع أنحاء العالم مقابل أفضل ممارسات المؤسسة", + rate:4, + img:"/Note/1.png", + name:"إليسا اسكندر" + + }, + { + description:"تسهيل الضرورات الوظيفية بشكل جوهري بدون خدمات وصفية من الجيل التالي. إحداث ثورة مقنعة في المستخدمين في جميع أنحاء العالم مقابل أفضل ممارسات المؤسسة", + rate:4, + img:"/Note/1.png", + name:"إليسا اسكندر" + + }, + + ] + return ( +
+

ماذا يقول عملاؤنا عن ذاكر

+

+ استضافة احترافية بسعر مناسب. تلخيص الكفاءات الأساسية التي تركز على المبدأ بشكل مميز من خلال الكفاءات الأساسية التي تركز على العميل. +

+
+ {Note.map((item,index:number)=>{ + return ( +
+
+

+ {item.description} +

+ +
+ + +
{item.name}
+
+
+ + ) + })} +
+
+ ) +} + +export default NotePage \ No newline at end of file diff --git a/src/pages/ScreenShoot.tsx b/src/pages/ScreenShoot.tsx new file mode 100644 index 0000000..8d25d4e --- /dev/null +++ b/src/pages/ScreenShoot.tsx @@ -0,0 +1,18 @@ +import React from 'react' +import SwipeScreenShoot from '../components/SwiperScreenShoot' + +const ScreenShoot = () => { + return ( +
+ +

لقطات شاشة التطبيق

+

+ استضافة احترافية بسعر مناسب. تلخيص الكفاءات الأساسية التي تركز على المبدأ بشكل مميز من خلال الكفاءات الأساسية التي تركز على العميل. +

+ + +
+ ) +} + +export default ScreenShoot \ No newline at end of file diff --git a/src/pages/VideoPage.tsx b/src/pages/VideoPage.tsx new file mode 100644 index 0000000..b9b7514 --- /dev/null +++ b/src/pages/VideoPage.tsx @@ -0,0 +1,67 @@ +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaPlayCircle } from 'react-icons/fa'; +import { PiPlayCircle } from 'react-icons/pi'; +import ReactPlayer from 'react-player'; + +const VideoPage = () => { + const [isPlaying, setIsPlaying] = useState(false); + const [t] = useTranslation(); + + const details = [ + { + "img": "1", + "title": "Friendly_Online_Support", + "number": "1111" + }, + { + "img": "2", + "title": "Unlimited_Features", + "number": "2222" + }, + { + "img": "3", + "title": "Modular_and_Switchable_Component", + "number": "3333" + }, + { + "img": "4", + "title": "High_Resolution", + "number": "4444" + }, + ]; + + const handlePlayPause = () => { + setIsPlaying(!isPlaying); + }; + + return ( +
+ + + +
+

منصة التطبيق الأكثر استخداما

+

+ ابدأ العمل مع ذلك الذي يمكن أن يوفر كل ما تحتاجه لتوليد الوعي وزيادة حركة المرور والتواصل. تحويل القيمة الدقيقة بكفاءة من خلال المحتوى الذي يركز على العميل. +

+ +
+ + + {details.map((item, index) => ( +
+ {`${index}`} + +

{t(item.number)}

+

{t(item.title)}

+ +
+ ))} +
+ +
+ ); +}; + +export default VideoPage; \ No newline at end of file diff --git a/src/states/ObjectToEditState.ts b/src/states/ObjectToEditState.ts new file mode 100644 index 0000000..3083373 --- /dev/null +++ b/src/states/ObjectToEditState.ts @@ -0,0 +1,16 @@ +import { create } from 'zustand'; + +// Define the type of the object you are editing +interface EditableObject { + [key: string]: any; +} + +interface ModelState { + objectToEdit: {}; + setObjectToEdit: (data: EditableObject) => void; +} + +export const useObjectToEdit = create((set) => ({ + objectToEdit: {}, + setObjectToEdit: (data) => set({ objectToEdit: data }), +})); diff --git a/src/styles/App/App.scss b/src/styles/App/App.scss new file mode 100644 index 0000000..7dd3803 --- /dev/null +++ b/src/styles/App/App.scss @@ -0,0 +1,82 @@ + + + +html, +body { + background: var(--bg); + color: var(--text); + overflow-x: hidden; + font-family: 'Noto Sans Arabic'; + + @include Scrollbar(); + direction: rtl; + padding: 0; + margin: 0; +} + +* { + padding: 0; + margin: 0; + font-weight: 600; + // font-size: 16px; +} +h1, +h2, +h3, +h4, +h5, +h6, +p { + padding: 0; + margin: 0; +} + +a { + color: inherit; + text-decoration: none !important; + cursor: pointer; +} + +button, +svg { + cursor: pointer; +} + +i { + @include Flex; +} + +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +input:-webkit-autofill:active { + -webkit-box-shadow: 0 0 0 30px var(--bg) inset !important; +} + +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +input:-webkit-autofill:active { + -webkit-background-clip: text; + -webkit-text-fill-color: var(--text); + transition: background-color 5000s ease-in-out 0s; + box-shadow: inset 0 0 20px 20px #23232329; +} + + +button{ + cursor: pointer; + transition: .5s ease-in-out; + &:hover{ + scale: 1.02; + } +} + + +svg,.scale{ + cursor: pointer; + transition: .5s ease-in-out; + &:hover{ + scale: 1.1; + } +} diff --git a/src/styles/App/Mixing.scss b/src/styles/App/Mixing.scss new file mode 100644 index 0000000..0dc589c --- /dev/null +++ b/src/styles/App/Mixing.scss @@ -0,0 +1,224 @@ +@mixin Shadow { + box-shadow: 2px 2px 2px 3px rgba(0, 0, 0, 0.04); +} + +@mixin Flex { + display: flex; + justify-content: center; + align-items: center; +} + +@mixin Hover { + &:hover { + color: var(--secondary); + } +} + +@mixin Hover_outline_characters { + &:hover { + text-shadow: 2px 2px var(--secondary); + } +} + +@mixin underLineText($color1, $color2) { + background-image: linear-gradient(90deg, $color1, $color2); + background-size: 0% 3px; + background-repeat: no-repeat; + background-position: left bottom; + transition: background-size 500ms ease-in-out; + &:hover { + background-size: 100% 3px; + } +} +.underLineText { + background-image: linear-gradient(90deg, var(--primary), var(--secondary)); + background-size: 0% 3px; + background-repeat: no-repeat; + background-position: left bottom; + transition: background-size 500ms ease-in-out; + &:hover { + background-size: 100% 3px; + } +} + +@mixin Typewriter { + // border-right: 5px solid var(--secondary); + width: 100%; + word-spacing: nowrap; + text-wrap: nowrap; + overflow: hidden; + animation: typing 6s; +} + +@keyframes typing { + from { + width: 0; + } +} + +@mixin Glitch { + letter-spacing: 5px; + animation: shift 8s ease-in-out infinite alternate; +} + +@keyframes shift { + 0%, + 40%, + 44%, + 58%, + 61%, + 65%, + 69%, + 73%, + 100% { + transform: skewX(0deg); + } + + 41% { + transform: skewX(10deg); + } + + 42% { + transform: skewX(-10deg); + } + + 59% { + transform: skewX(40deg) skewY(10deg); + } + + 60% { + transform: skewX(-40deg) skewY(-10deg); + } + + 63% { + transform: skewX(10deg) skewY(-5deg); + } + + 70% { + transform: skewX(-50deg) skewY(-20deg); + } + + 71% { + transform: skewX(10deg) skewY(-10deg); + } +} + +@mixin Scrollbar() { + scroll-behavior: smooth; + scroll-padding: 10rem; + &::-webkit-scrollbar { + width: 0.4vw; + max-height: 10px; + } + + /* Handle */ + &::-webkit-scrollbar-thumb { + background-color: var(--primary); + border-radius: 5px; /* Adjust border-radius as needed */ + } + + /* Track */ + &::-webkit-scrollbar-track { + border-radius: 5px; /* Adjust border-radius as needed */ + background-color: #d3d5d7; /* Set to desired background color */ + } +} + +@mixin CustomScrollbar($color) { + scroll-behavior: smooth; + scroll-padding: 10rem; + &::-webkit-scrollbar { + width: 10px; + } + + /* Handle */ + &::-webkit-scrollbar-thumb { + background-color: $color; + border-radius: 5px; /* Adjust border-radius as needed */ + } + + /* Track */ + &::-webkit-scrollbar-track { + border-radius: 5px; /* Adjust border-radius as needed */ + background-color: transparent; /* Set to desired background color */ + } +} + +@mixin ScrollbarHover($color) { + scroll-behavior: smooth; + scroll-padding: 10rem; + &::-webkit-scrollbar { + width: 6px; + } + + /* Handle */ + &::-webkit-scrollbar-thumb { + background-color: transparent; + border-radius: 3px; /* Adjust border-radius as needed */ + } + &:hover { + &::-webkit-scrollbar-thumb { + background-color: $color; + + border-radius: 3px; /* Adjust border-radius as needed */ + } + } + + /* Track */ + &::-webkit-scrollbar-track { + background-color: transparent; /* Set to desired background color */ + } +} +.maxWidth150 { + white-space: nowrap; /* Prevents text from wrapping */ + overflow: hidden; /* Hides any content that overflows the container */ + text-overflow: ellipsis; + max-width: 150px; +} + +.maxWidth200 { + white-space: nowrap; /* Prevents text from wrapping */ + overflow: hidden; /* Hides any content that overflows the container */ + text-overflow: ellipsis; + max-width: 200px; +} + +// background-color: rgb( +// /* Random value between 0 and 255 for red */ +// calc(255 * random()), +// /* Random value between 0 and 255 for green */ +// calc(255 * random()), +// /* Random value between 0 and 255 for blue */ +// calc(255 * random()) +// ); + +@mixin colorIndicator($color) { + color: var(--secondary); + position: relative; + text-align: center; + width: 3vw; + &::after { + background-color: $color; + position: absolute; + right: -1.4vw; + top: 50%; + transform: translate(-50%, -50%); + content: ''; + width: 0.7vw; + height: 0.7vw; + border-radius: 50%; + } +} + +/* Apply the mixin using CSS variables */ +h6[data-color='Red'] { + @include colorIndicator(red); +} + +h6[data-color='Green'] { + @include colorIndicator(green); +} + +h6[data-color='Orange'] { + @include colorIndicator(orange); +} diff --git a/src/styles/App/Variables.scss b/src/styles/App/Variables.scss new file mode 100644 index 0000000..af677f5 --- /dev/null +++ b/src/styles/App/Variables.scss @@ -0,0 +1,18 @@ +:root { + --primary: #222838; + --secondary: #55B9E3; + --white:white; + --text: #4C5462; + --placeholder: rgb(0, 0, 0, 0.3); + --bg: rgb(245 247 251); + --bg2: white; + --gradient : linear-gradient(45deg, #55B9E3, #5262E3); + +} + +:root:has(.dark) { + --text: white; + --placeholder: rgb(255, 255, 255, 0.3); + --bg: rgb(51, 51, 51); + --bg2: black; +} diff --git a/src/styles/App/classNames.scss b/src/styles/App/classNames.scss new file mode 100644 index 0000000..5d42914 --- /dev/null +++ b/src/styles/App/classNames.scss @@ -0,0 +1,19 @@ +.full-width { + min-width: 100%; + background-color: red; +} + +.full-screen-center{ + position: absolute; + z-index: 999; + height: 100vh; + width: 100vw; + display: flex; + align-items: center; + justify-content: center; + + +} +.spinner{ + +} \ No newline at end of file diff --git a/src/styles/App/index.scss b/src/styles/App/index.scss new file mode 100644 index 0000000..9916944 --- /dev/null +++ b/src/styles/App/index.scss @@ -0,0 +1,13 @@ +@import './Variables.scss'; +@import './Mixing.scss'; +@import './App.scss'; +@import './media.scss'; +@import './classNames.scss'; + +//// components + +@import '../components/index.scss'; + +/// pages + +@import '../pages/index.scss'; diff --git a/src/styles/App/media.scss b/src/styles/App/media.scss new file mode 100644 index 0000000..750bbf2 --- /dev/null +++ b/src/styles/App/media.scss @@ -0,0 +1,14 @@ +$breakpoint-mobile: 600px; +$breakpoint-desktop: 1024px; + +@mixin respond-to($media) { + @if $media == 'mobile' { + @media (max-width: $breakpoint-mobile) { + @content; + } + } @else if $media == 'desktop' { + @media (min-width: $breakpoint-tablet) { + @content; + } + } +} diff --git a/src/styles/components/FirstLoading.scss b/src/styles/components/FirstLoading.scss new file mode 100644 index 0000000..9271b75 --- /dev/null +++ b/src/styles/components/FirstLoading.scss @@ -0,0 +1,43 @@ +.FirstLoading { + position: fixed; + top: 0; + left: 0; + right: 0; + width: 100vw; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background: black; + color: white; + z-index: 9999999999; + overflow: hidden; + transition: transform 1s cubic-bezier(.25,1,.5,1), visibility 1ms linear 1s; +} + +.Logo { + width: 30vw; + mix-blend-mode: difference; + margin-bottom: 1rem; +} + +.Info { + font-size: 1vw; + transition: transform 0.5s ease; +} + +/* New animation for page movement */ +@keyframes pageUp { + 0% { + transform: translate3d(0, 0, 0); + } + 100% { + transform: translate3d(0, -100vh, 0); + visibility: hidden; + } +} + +.PageUp { + animation: pageUp 0.8s ease-in-out forwards; +} \ No newline at end of file diff --git a/src/styles/components/Footer.scss b/src/styles/components/Footer.scss new file mode 100644 index 0000000..3c9356b --- /dev/null +++ b/src/styles/components/Footer.scss @@ -0,0 +1,183 @@ +.Footer{ + background: var(--primary); + height: 300px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 30px; + margin-top: 250px; + width: 100%; + z-index: 999; + position: relative; + img{ + width: 100px; + + } + >div{ + display: flex; + align-items: center; + justify-content: center; + gap: 20px; + svg{ + font-size: 20px; + color: var(--white); + padding: 10px; + border: 1px solid var(--white); + border-radius: 50%; + } + + } + p{ + font-size: 14px; + } +} + +.FooterHeader{ + position: absolute; + top: -40%; + background-image: var(--gradient); + width: 70%; + height: 150px; + display: flex; + justify-content: space-between; + align-items: center; + + padding-inline: 5%; + color: var(--white); + >span{ + display: flex; + flex-direction: column; + gap: 10px; + p{ + font-weight: normal; + } + } + >div{ + background: var(--white); + width: 300px; + height: 40px; + display: flex; + padding: 5px; + gap: 10px; + .ant-input{ + border: none; + height: 40px; + all: unset; + min-width: 240px; + color: var(--text); + &::placeholder{ + font-size: 10px; + } + } + div{ + background-image: var(--gradient); + width: 50px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 5px; + cursor: pointer; + } + } + + +} + + +@media screen and (max-width:750px) { + + .Footer{ + background: var(--primary); + height: 400px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 30px; + margin-top: 250px; + width: 100%; + z-index: 999; + position: relative; + + img{ + width: 100px; + + } + >div{ + display: flex; + align-items: center; + justify-content: center; + gap: 20px; + svg{ + font-size: 20px; + color: var(--white); + padding: 10px; + border: 1px solid var(--white); + border-radius: 50%; + } + + } + p{ + font-size: 14px; + } + } + + .FooterHeader{ + position: absolute; + top: -40%; + background-image: var(--gradient); + width: 60%; + min-height: 200px; + display: flex; + justify-content: center; + gap: 30px; + align-items: center; + flex-direction: column; + + padding-inline: 10%; + color: var(--white); + >span{ + display: flex; + flex-direction: column; + gap: 10px; + h1{ + font-size: 20px; + } + p{ + font-size: 14px; + font-weight: normal; + } + } + >div{ + background: var(--white); + width: 200px; + height: 40px; + display: flex; + padding: 5px; + gap: 10px; + .ant-input{ + border: none; + height: 40px; + all: unset; + min-width: 140px; + color: var(--text); + &::placeholder{ + font-size: 10px; + } + } + div{ + background-image: var(--gradient); + width: 50px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 5px; + cursor: pointer; + } + } + + + } + +} \ No newline at end of file diff --git a/src/styles/components/Layout.scss b/src/styles/components/Layout.scss new file mode 100644 index 0000000..b4a9b6b --- /dev/null +++ b/src/styles/components/Layout.scss @@ -0,0 +1,16 @@ +// .shapes { +// position: fixed; +// top: 0; +// left: 0; +// width: 100%; +// height: 100%; +// display: flex; /* Change from grid to flex */ +// flex-direction: row; /* Arrange items in a row */ +// flex-wrap: wrap; /* Allow wrapping to the next line if needed */ +// pointer-events: none; +// z-index: 1000; +// background: black; +// } + + + diff --git a/src/styles/components/NavBar.scss b/src/styles/components/NavBar.scss new file mode 100644 index 0000000..1d80f95 --- /dev/null +++ b/src/styles/components/NavBar.scss @@ -0,0 +1,109 @@ +.NavBar{ + background-color: var(--primary); + color: var(--white); + display: flex; + justify-content: space-between; + align-items: center; + padding: max(3vh,10px) max(50px,4vw); + position: fixed; + width: calc(100% - 100px); + z-index: 999999999; + font-size: max(20px , 1.5vw); + img,svg{ + width: 60px; + font-size: 30px; + } + >ul{ + + display: flex; + li{ + all: unset; + cursor: pointer; + transition: .5s ease-in-out; + &:hover{ + scale: 1.1; + + } + } + } + .NavBarLinks{ + display: flex; + gap: max(20px,2vw); + + a{ + color: var(--white) !important; + opacity: .6; + transition: .5s ease-in-out; + &:hover{ + color: var(--secondary) !important; + scale: 1.1; + opacity: 1; + + } + } + .activeLink{ + a{ + color: var(--secondary) !important; + opacity: 1; + } + } + } + >div{ + article{ + &:nth-child(2){ + display: none; + } + } + } +} + + + +@media screen and (max-width:750px) { + .NavBar{ + + .NavBarLinks{ + display: none !important; + + } + >div{ + display: flex; + article{ + &:nth-child(2){ + display: block; + + } + } + } + } +} + +.NavBarContent{ + position: relative; + z-index: 9999999999; + background-image: var(--gradient); + width: 150px; + min-height: 200px; + padding-top: 20px; + .NavBarLinks{ + all: unset; + display: flex; + flex-direction: column; + width: 100%; + color: var(--white); + li{ + border-bottom: 1px solid var(--white); + padding: 10px; + &:last-child{ + border: none; + } + } + } + +} +.ant-popover,.ant-popover-inner{ + padding: 0 !important; + z-index: 999; + margin-inline: 30px; + +} \ No newline at end of file diff --git a/src/styles/components/PageTransition.scss b/src/styles/components/PageTransition.scss new file mode 100644 index 0000000..21ae978 --- /dev/null +++ b/src/styles/components/PageTransition.scss @@ -0,0 +1,25 @@ +.transition-overlay { + position: fixed; + top: 100%; + left: 0; + width: 100%; + height: 100%; + background-color: red; + z-index: 1000; + pointer-events: none; + transition: top 1s ease-in-out; +} + +/* Exit Animation: Moves up */ +.transition-overlay.exit { + top: 0; +} + +/* Entrance Animation: Moves down */ +.transition-overlay.enter { + top: -100%; + transition: top 1s ease-in-out; + top: 100%; +} + + diff --git a/src/styles/components/index.scss b/src/styles/components/index.scss new file mode 100644 index 0000000..09e13f5 --- /dev/null +++ b/src/styles/components/index.scss @@ -0,0 +1,5 @@ +@import './FirstLoading.scss'; +@import './Layout.scss'; +@import "./PageTransition.scss"; +@import './NavBar.scss'; +@import './Footer.scss'; \ No newline at end of file diff --git a/src/styles/pages/ContactPage.scss b/src/styles/pages/ContactPage.scss new file mode 100644 index 0000000..dc031bf --- /dev/null +++ b/src/styles/pages/ContactPage.scss @@ -0,0 +1,167 @@ +.ContactPage{ + background: var(--bg); + display: flex; + + padding-inline: 5%; + gap: 30px; + width: 80%; + margin-bottom: 100px; + margin-inline: auto; + .Right{ + display: flex; + flex-direction: column; + gap: 10px; + .Forms{ + display: flex; + flex-wrap: wrap; + gap: 1%; + max-width: 100%; + .ValidationField{ + min-width: 48%; + margin-bottom: 20px; + .ant-input{ + min-height: 50px; + + } + } + .TextAreaField{ + min-width: 97%; + } + + } + button{ + all: unset; + padding: 14px 30px; + display: flex; + align-items: center; + gap: max(1vw,10px); + color: var(--white); + border: 1px solid var(--white); + border-radius: 7px; + background-image: linear-gradient(45deg, #55B9E3, #5262E3); + cursor: pointer; + transition: .5s ease-in-out; + &:hover{ + scale: 1.1; + } + } + } + .Left{ + display: flex; + flex-direction: column; + gap: 20px; + p{ + color: var(--text); + } + >div{ + display: flex; + flex-direction: column; + gap: 20px; + >span{ + display: flex; + flex-direction: column; + gap: 10px; + >div{ + display: flex; + align-items: center; + gap: 10px; + h6{ + font-size: 18px; + } + img{ + width: 15px; + } + + } + p{ + font-size: 14px; + font-weight: normal; + } + } + } + } +} + + +@media screen and (max-width:750px) { + .ContactPage{ + background: var(--bg); + display: flex; + flex-direction: column; + padding-inline: 5%; + gap: 30px; + width: 80%; + margin-block: 100px; + margin-inline: auto; + gap: 30px; + .Right{ + display: flex; + flex-direction: column; + gap: 40px; + .Forms{ + display: flex; + flex-wrap: wrap; + gap: 1%; + max-width: 100%; + .ValidationField{ + min-width: 100%; + margin-bottom: 20px; + .ant-input{ + min-height: 50px; + + } + } + .TextAreaField{ + min-width: 100%; + } + + } + button{ + all: unset; + padding: 14px 30px; + display: flex; + align-items: center; + gap: max(1vw,10px); + color: var(--white); + border: 1px solid var(--white); + border-radius: 7px; + background-image: linear-gradient(45deg, #55B9E3, #5262E3); + } + } + .Left{ + display: flex; + flex-direction: column; + gap: 20px; + p{ + color: var(--text); + } + >div{ + display: flex; + flex-direction: column; + gap: 20px; + >span{ + display: flex; + flex-direction: column; + gap: 10px; + >div{ + display: flex; + align-items: center; + gap: 10px; + h6{ + font-size: 18px; + } + img{ + width: 15px; + } + + } + p{ + font-size: 14px; + font-weight: normal; + } + } + } + } + } + +} \ No newline at end of file diff --git a/src/styles/pages/DownloadPage.scss b/src/styles/pages/DownloadPage.scss new file mode 100644 index 0000000..a55fb06 --- /dev/null +++ b/src/styles/pages/DownloadPage.scss @@ -0,0 +1,189 @@ +.DownloadPage{ + background: var(--bg); + display: flex; + gap: 50px; + width: 100%; + padding-block: 100px; + position: relative; + flex-direction: column; + + >main{ + position: relative; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + gap: max(2vh,25px); + text-align: center; + z-index: 99; + padding-top: 140px ; + >h1{ + display: flex; + align-items: center; + gap: 20px; + color: var(--white); + font-size: max(4vw,50px); + + } + p{ + color: var(--white); + font-size: max(1.3vw,15px); + width: 50%; + } + >div{ + display: flex; + gap: max(1vw,10px); + button{ + all: unset; + padding: max(.5vw,8px) max(1.5vw,30px); + display: flex; + align-items: center; + gap: max(1vw,10px); + color: var(--white); + border: 1px solid var(--white); + border-radius: 10px; + cursor: pointer; + transition: .5s ease-in-out; + &:hover{ + background: var(--gradient); + scale: 1.1; + } + h6{ + font-size: max(12px,1vw); + } + h5{ + font-weight: bold; + font-size: max(14px,1vw); + } + svg{ + font-size: max(20px,1.3vw); + } + } + } + + + } + >div{ + position: absolute; + z-index: 1; + top: 0; + width: 100%; + height: 700px; + background: var(--primary); + overflow: hidden; + .circle{ + position: absolute; + width: 66%; + top: 0%; + left: 50%; + transform: translate(-50%,0%); + z-index: 9999; + + } + + } + .main{ + position: relative; + z-index: 99999; + // margin-top: 300px; + width: 80%; + object-fit: contain; + margin-inline: auto; + + } + +} + +@media screen and (max-width:750px) { + .DownloadPage{ + background: var(--bg); + display: flex; + gap: 50px; + width: 100%; + padding-block: 100px; + position: relative; + flex-direction: column; + + >main{ + position: relative; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + gap: max(2vh,25px); + text-align: center; + z-index: 99; + padding-top: 20px ; + >h1{ + display: flex; + align-items: center; + gap: 20px; + color: var(--white); + font-size: max(4vw,50px); + + } + p{ + color: var(--white); + font-size: max(1.3vw,15px); + width: 50%; + } + >div{ + display: flex; + gap: max(1vw,10px); + button{ + all: unset; + padding: max(.5vw,8px) max(1.5vw,30px); + display: flex; + align-items: center; + gap: max(1vw,10px); + color: var(--white); + border: 1px solid var(--white); + border-radius: 10px; + cursor: pointer; + h6{ + font-size: max(12px,1vw); + } + h5{ + font-weight: bold; + font-size: max(14px,1vw); + } + svg{ + font-size: max(20px,1.3vw); + } + } + } + + + } + >div{ + position: absolute; + z-index: 1; + top: 0; + width: 100%; + height: 700px; + background: var(--primary); + overflow: hidden; + .circle{ + position: absolute; + width: 800px; + top: 0%; + left: 50%; + transform: translate(-50%,0%); + z-index: 9999; + + } + + } + .main{ + position: relative; + z-index: 99999; + // margin-top: 300px; + width: 100%; + object-fit: contain; + margin-inline: auto; + + } + + } + +} \ No newline at end of file diff --git a/src/styles/pages/FeaturesPage.scss b/src/styles/pages/FeaturesPage.scss new file mode 100644 index 0000000..6d103ef --- /dev/null +++ b/src/styles/pages/FeaturesPage.scss @@ -0,0 +1,127 @@ +.FeaturesPage{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-bottom: 100px; + >h1{ + font-size: 4vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 1.5vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + >div{ + display: flex; + justify-content: center; + align-items: center; + width: 100%; + gap: 40px; + >img{ + width: 400px; + } + >span{ + display: flex; + flex-wrap: wrap; + max-width: 45%; + gap: 50px; + article{ + display: flex; + align-items: center; + gap: 20px; + max-width: 40%; + img{ + width: 50px; + object-fit: contain; + } + div{ + h4{ + font-size: max(1.2vw,16px); + } + p{ + font-weight: normal; + font-size: max(1vw,14px); + + } + } + } + } + + } +} + +@media screen and (max-width:750px) { + .FeaturesPage{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-block: 50px; + >h1{ + font-size: 8vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 3vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + >div{ + display: flex; + justify-content: center; + align-items: center; + flex-direction: column-reverse; + width: 100%; + gap: 40px; + >img{ + width: 300px; + } + >span{ + display: flex; + flex-wrap: wrap; + width: 250px; + + gap: 50px; + article{ + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + gap: 20px; + max-width: 80%; + img{ + width: 50px; + object-fit: contain; + } + div{ + text-align: center; + h4{ + font-size: max(1.2vw,16px); + } + p{ + font-weight: normal; + font-size: max(1vw,14px); + + } + } + } + } + + } + } + +} \ No newline at end of file diff --git a/src/styles/pages/HomePage.scss b/src/styles/pages/HomePage.scss new file mode 100644 index 0000000..dd00ad4 --- /dev/null +++ b/src/styles/pages/HomePage.scss @@ -0,0 +1,187 @@ +.HomePage{ + min-height: 100vh; + background: var(--primary); + position: relative; + overflow: hidden; + margin-bottom: 20px; + >main{ + position: relative; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-top: max(15vh,150px); + gap: max(2vh,25px); + + z-index: 99; + >h1{ + display: flex; + align-items: center; + gap: 20px; + color: var(--white); + font-size: max(4vw,50px); + h2{ + color: var(--secondary); + font-size: max(4vw,50px); + } + } + p{ + color: var(--white); + font-size: max(1.5vw,15px); + } + >div{ + display: flex; + gap: max(1vw,10px); + button{ + all: unset; + padding: max(.5vw,8px) max(1.5vw,30px); + display: flex; + align-items: center; + gap: max(1vw,10px); + color: var(--white); + border: 1px solid var(--white); + border-radius: 10px; + cursor: pointer; + transition: .5s ease-in-out; + &:hover{ + background: var(--gradient); + scale: 1.1; + } + h6{ + font-size: max(12px,1vw); + } + h5{ + font-weight: bold; + font-size: max(14px,1vw); + } + svg{ + font-size: max(20px,1.3vw); + } + } + } + + + } + .shape{ + position: absolute; + bottom: -18%; + width: 100%; + height: 300px; + min-height: 60vh; + + object-fit: cover; + + + } + .circle{ + position: absolute; + width: 66%; + top: 73%; + left: 50%; + transform: translate(-50%,-50%); + + + } + .slider{ + position: absolute; + width: 50%; + top: 74%; + left: 50%; + transform: translate(-50%,-50%); + } + + + +} + + + +@media screen and (max-width:750px) { + .HomePage{ + min-height: 100vh; + background: var(--primary); + position: relative; + overflow: hidden; + padding-bottom: 120px; + >main{ + position: relative; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-top: max(15vh,150px); + gap: max(2vh,25px); + + z-index: 99; + >h1{ + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + gap: 20px; + color: var(--white); + font-size: max(5vw,25px); + h2{ + color: var(--secondary); + font-size: max(5vw,25px); + } + } + p{ + color: var(--white); + font-size: max(3vw,15px); + width: 70%; + text-align: center; + } + >div{ + display: flex; + gap: max(1vw,10px); + button{ + all: unset; + padding: max(.5vw,8px) max(1.5vw,30px); + display: flex; + align-items: center; + gap: max(1vw,10px); + color: var(--white); + border: 1px solid var(--white); + border-radius: 10px; + cursor: pointer; + h6{ + font-size: max(12px,1vw); + } + h5{ + font-weight: bold; + font-size: max(14px,1vw); + } + svg{ + font-size: max(20px,1.3vw); + } + } + } + + + } + .shape{ + display: none; + + } + .circle{ + position: absolute; + width: 800px; + top: 500px; + + + } + .slider{ + position: absolute; + width: 800px; + top: 600px; + + } + + + + } + +} \ No newline at end of file diff --git a/src/styles/pages/HowItWork.scss b/src/styles/pages/HowItWork.scss new file mode 100644 index 0000000..db1add0 --- /dev/null +++ b/src/styles/pages/HowItWork.scss @@ -0,0 +1,144 @@ +.HowItWork{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-bottom: 100px; + + >h1{ + font-size: 4vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 1.5vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + >div{ + display: flex; + justify-content: center; + + width: 80%; + gap: 40px; + margin-top: 40px; + >img{ + width: 600px; + } + >span{ + display: flex; + flex-direction: column; + justify-content: space-between; + max-width: 100%; + height: 100%; + gap: 100px; + padding-block: 10%; + article{ + display: flex; + align-items: center; + gap: 20px; + max-width: 100%; + img{ + width: 50px; + object-fit: contain; + } + div{ + h4{ + font-size: max(1.2vw,16px); + } + p{ + font-weight: normal; + font-size: max(1vw,14px); + width: 100%; + + } + } + } + } + + } +} + + +@media screen and (max-width:750px) { + + .HowItWork{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-block: 100px; + + >h1{ + font-size: 7vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 3vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + >div{ + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; + width: 80%; + gap: 40px; + margin-top: 40px; + >img{ + width: 300px; + order: 0; + + } + >span{ + order: 2; + display: flex; + flex-direction: column; + justify-content: space-between; + min-width: 100%; + height: 100%; + gap: 20px; + padding-block: 0%; + + article{ + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 20px; + max-width: 100%; + background: var(--bg2); + padding:30px; + img{ + width: 50px; + object-fit: contain; + } + div{ + width: 80%; + h4{ + font-size: max(1.2vw,16px); + } + p{ + font-weight: normal; + font-size: max(1vw,14px); + width: 100%; + + } + } + } + } + + } + } +} \ No newline at end of file diff --git a/src/styles/pages/NotePage.scss b/src/styles/pages/NotePage.scss new file mode 100644 index 0000000..a3f5299 --- /dev/null +++ b/src/styles/pages/NotePage.scss @@ -0,0 +1,113 @@ +.NotePage{ + background: var(--bg2); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 50px; + width: 100%; + padding-block: 100px; + >h1{ + font-size: 4vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 1.5vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + +>div{ + display: flex; + justify-content: center; + align-items: center; + + gap: 40px; + padding-block: 30px; + article{ + width: 20vw; + max-width: 300px; + display: flex; + flex-direction: column; + gap: 30px; + >div{ + display: flex; + gap: 10px; + flex-direction: column; + padding: 30px 10px; + background: var(--bg); + } + >span{ + display: flex; + align-items: center; + gap: 20px; + img{ + width: 50px; + } + } + } +} +} + +@media screen and (max-width:750px) { + + .NotePage{ + background: var(--bg2); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 20px; + width: 100%; + padding-block: 50px; + >h1{ + font-size: 6vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 3vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + + >div{ + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + width: 100%; + + gap: 40px; + padding-block: 30px; + article{ + width: 100%; + display: flex; + flex-direction: column; + gap: 30px; + >div{ + display: flex; + gap: 10px; + flex-direction: column; + padding: 30px 10px; + background: var(--bg); + } + >span{ + display: flex; + align-items: center; + gap: 20px; + img{ + width: 50px; + } + } + } + } + } + + +} \ No newline at end of file diff --git a/src/styles/pages/ScreenShoot.scss b/src/styles/pages/ScreenShoot.scss new file mode 100644 index 0000000..35bb05d --- /dev/null +++ b/src/styles/pages/ScreenShoot.scss @@ -0,0 +1,94 @@ +.ScreenShoot{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-bottom: 100px; + position: relative; + + >h1{ + font-size: 4vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 1.5vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + .SwipeScreenShoot{ + color: white; + width: 80%; + + margin-inline: auto; + img{ + width: 200px; + margin-inline: auto; + } + + + } +} + +.swiper-pagination-bullets.swiper-pagination-horizontal{ + transform: translateY(10px); +} +.swiper-slide{ + display: flex; +} + + + +@media screen and (max-width:750px) { + + .ScreenShoot{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-block: 50px; + position: relative; + + >h1{ + font-size: 8vw; + color: var(--text); + } + >p{ + font-weight: 500; + font-size: 3vw; + text-wrap: pretty; + width: 60%; + text-align: center; + color: var(--text); + } + .SwipeScreenShoot{ + color: white; + width: 80%; + + margin-inline: auto; + img{ + width: 200px; + margin-inline: auto; + } + + + } +} + +.swiper-pagination-bullets.swiper-pagination-horizontal{ + transform: translateY(10px); +} +.swiper-slide{ + display: flex; +} + + +} \ No newline at end of file diff --git a/src/styles/pages/VideoPage.scss b/src/styles/pages/VideoPage.scss new file mode 100644 index 0000000..14e2754 --- /dev/null +++ b/src/styles/pages/VideoPage.scss @@ -0,0 +1,149 @@ +.VideoPage{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-bottom: 100px; + position: relative; + + >img{ + + width: 80%; + height: 500px; + object-fit: cover; + + } + + + main{ + position: absolute; + top:30%; + left: 50%; + transform: translate(-50%,-50%); + color: var(--white); + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 20px; + h1{ + font-size: 3vw; + } + p{ + font-weight: normal; + } + img{ + width: 80px; + object-fit: contain; + cursor: pointer; + } + } + >span{ + position: absolute; + bottom: -10%; + display: flex; + justify-content: space-around; + align-items: center; + background:var(--white); + border-radius: 10px; + width: 70%; + z-index: 99; + min-height: 200px; + article{ + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 10px; + } + } +} + + +@media screen and (max-width:750px) { + + .VideoPage{ + background: var(--bg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + width: 100%; + margin-bottom: 100px; + position: relative; + + >img{ + + width: 80%; + height: 700px; + object-fit: cover; + + } + + + main{ + position: absolute; + top:30%; + left: 50%; + transform: translate(-50%,-50%); + color: var(--white); + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 20px; + h1{ + font-size: 5vw; + } + p{ + font-weight: normal; + line-height: 20px; + font-size: 3vw; + } + img{ + width: 80px; + object-fit: contain; + cursor: pointer; + } + } + >span{ + position: absolute; + bottom: -10%; + display: flex; + justify-content: space-around; + align-items: center; + flex-wrap: wrap; + background:var(--white); + border-radius: 10px; + width: 60%; + z-index: 99; + min-height: 200px; + padding: 40px 20px; + gap: 30px; + article{ + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 10px; + min-width: 30%; + img{ + width: 30px; + } + h4{ + font-size: 16px; + } + p{ + font-size: 13px; + } + + } + } + } + + +} \ No newline at end of file diff --git a/src/styles/pages/index.scss b/src/styles/pages/index.scss new file mode 100644 index 0000000..90e69df --- /dev/null +++ b/src/styles/pages/index.scss @@ -0,0 +1,8 @@ +@import './HomePage.scss'; +@import './FeaturesPage.scss'; +@import './HowItWork.scss'; +@import './VideoPage.scss'; +@import './ScreenShoot.scss'; +@import './NotePage.scss'; +@import './DownloadPage.scss'; +@import './ContactPage.scss' \ No newline at end of file diff --git a/src/translate/ar.json b/src/translate/ar.json new file mode 100644 index 0000000..471b6b0 --- /dev/null +++ b/src/translate/ar.json @@ -0,0 +1,32 @@ +{ + "Arabic": "عربي", + "home": "الرئيسية", + "features": "الميزات", + "how_it_work": "كيف يعمل", + "screen_shoot": "لقطة الشاشة", + "note": "ملاحظة", + "contact_us": "اتصل بنا", + "get_free_download": "احصل على تنزيل مجاني لتطبيق", + "quiz_app": "Quiz", + "reader_distracted": "من الحقائق الثابتة منذ فترة طويلة أن القارئ سوف يصرف انتباهه عن المحتوى", + "download_on": "تحميل على", + "play_store": "المتجر", + "available_on": "متاح على", + "google_play": "جوجل بلاي", + "Friendly_Online_Support": "دعم ودود عبر الإنترنت", + "Providing_round_the_clock_technical_support_to_assist_you_with_any_inquiries": "توفير دعم فني متاح على مدار الساعة لمساعدتك في أي استفسارات.", + "Unlimited_Features": "ميزات غير محدودة", + "Enjoy_limitless_possibilities_to_customize_your_experience": "استمتع بإمكانيات غير محدودة لتخصيص تجربتك.", + "Modular_and_Switchable_Component": "مكون معياري وقابل للتبديل", + "Easily_switch_between_layouts_and_even_demos": "تبديل بين التخطيطات وحتى العروض التوضيحية بسهولة.", + "High_Resolution": "دقة عالية", + "Get_high_quality_images_and_videos": "احصل على جودة صور وفيديو عالية الدقة.", + "Social_Sharing": "مشاركة اجتماعية", + "Easily_share_content_across_social_media_platforms": "سهولة مشاركة المحتوى عبر منصات التواصل الاجتماعي.", + "Use_on_Any_Device": "استخدم على أي جهاز", + "Compatibility_with_all_devices_for_a_seamless_experience": "توافق مع جميع الأجهزة لضمان تجربة سلسة.", + "Creative_Design": "التصميم الإبداعي", + "Attractive_and_innovative_design_that_meets_your_needs": "تصميم جذاب وابتكاري يلبي احتياجاتك.", + "Providing_professional_value_objectively_with_varied_web_readiness_Collaborative_wireless_customer_service_without_targeted_incentives_for_change_Collaboration" :"تقديم قيمة احترافية بموضوعية مع جاهزية متنوعة للويب. نقل خدمة العملاء اللاسلكية بشكل تعاوني دون محفزات موجهة نحو الهدف للتغيير. التعاون.", + "Application_Features":"ميزات التطبيق" +} diff --git a/src/translate/en.json b/src/translate/en.json new file mode 100644 index 0000000..66b79a7 --- /dev/null +++ b/src/translate/en.json @@ -0,0 +1,27 @@ +{ + "Arabic": "Arabic", + "get_free_download": "Get a free download of the", + "quiz_app": "Quiz App", + "reader_distracted": "It is a long established fact that a reader will be distracted by the readable content", + "download_on": "Download on", + "play_store": "Play Store", + "available_on": "Available on", + "google_play": "Google Play", + "Friendly_Online_Support": "Friendly Online Support", + "Providing_round_the_clock_technical_support_to_assist_you_with_any_inquiries": "Providing round-the-clock technical support to assist you with any inquiries.", + "Unlimited_Features": "Unlimited Features", + "Enjoy_limitless_possibilities_to_customize_your_experience": "Enjoy limitless possibilities to customize your experience.", + "Modular_and_Switchable_Component": "Modular and Switchable Component", + "Easily_switch_between_layouts_and_even_demos": "Easily switch between layouts and even demos.", + "High_Resolution": "High Resolution", + "Get_high_quality_images_and_videos": "Get high-quality images and videos.", + "Social_Sharing": "Social Sharing", + "Easily_share_content_across_social_media_platforms": "Easily share content across social media platforms.", + "Use_on_Any_Device": "Use on Any Device", + "Compatibility_with_all_devices_for_a_seamless_experience": "Compatibility with all devices for a seamless experience.", + "Creative_Design": "Creative Design", + "Attractive_and_innovative_design_that_meets_your_needs": "Attractive and innovative design that meets your needs.", + "Application_Features": "Features of the Application", + "Providing_professional_value_objectively_with_varied_web_readiness_Collaborative_wireless_customer_service_without_targeted_incentives_for_change_Collaboration": "Providing professional value objectively with diverse web readiness Transferring wireless customer service collaboratively without targeted incentives for change Collaboration", + "":"" +} diff --git a/src/types/axios.ts b/src/types/axios.ts new file mode 100644 index 0000000..c264c49 --- /dev/null +++ b/src/types/axios.ts @@ -0,0 +1,47 @@ +export interface ErrorResponse { + request: { + status: number; + }; + response: { + data: { + message?: string; + code?: number; + [key: string]: any; + }; + }; + config: { + method: string; + headers: Record; + }; +} + +export interface MutationData { + [key: string]: any; +} + +export interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: Record; + config: Record; + request?: any; +} + +// export type QueryConfig = { +// KEY: string | string[], +// url: string, +// message?: string, +// params?: any , +// options?: any , + +// } + +export enum AxiosQueryStatusEnum { + ERROR = 'error', + IDLE = 'idle', + PENDING = 'pending', + SUCCESS = 'success', +} + +export type AxiosQueryStatusType = 'error' | 'idle' | 'pending' | 'success'; diff --git a/src/utils/Interface/LocalStorageInterface.ts b/src/utils/Interface/LocalStorageInterface.ts new file mode 100644 index 0000000..726ca5a --- /dev/null +++ b/src/utils/Interface/LocalStorageInterface.ts @@ -0,0 +1,6 @@ +import { LocalStorageEnum } from '../../enums/LocalStorage'; + +export interface LocalStorageInterface { + getItem(key: LocalStorageEnum): T | null; + setItem(key: LocalStorageEnum, value: T): void; +} diff --git a/src/utils/Interface/LocalStorageManagerInterface.ts b/src/utils/Interface/LocalStorageManagerInterface.ts new file mode 100644 index 0000000..d4fe9c9 --- /dev/null +++ b/src/utils/Interface/LocalStorageManagerInterface.ts @@ -0,0 +1,7 @@ +import { LocalStorageEnum } from '../../enums/LocalStorage'; +import { LocalStorageInterface } from './LocalStorageInterface'; + +export interface LocalStorageManagerInterface extends LocalStorageInterface { + removeItem(key: LocalStorageEnum): void; + clearItems(): void; +} diff --git a/src/utils/class/Hash.ts b/src/utils/class/Hash.ts new file mode 100644 index 0000000..68ae9c9 --- /dev/null +++ b/src/utils/class/Hash.ts @@ -0,0 +1,30 @@ +// HashManager.ts + +export class Hash { + static getOffset(num?: number): number { + return num !== undefined + ? num + : Number(import.meta.env.REACT_APP_HASH_NUMBER) || 4; + } + + static hash(str: string, num?: number): string { + const offset = this.getOffset(num); + return str + .split('') + .map((char) => { + const charCode = char.charCodeAt(0) + offset; + return String.fromCharCode(charCode); + }) + .join(''); + } + static unHash(str: string, num?: number): string { + const offset = this.getOffset(num); + return str + .split('') + .map((char) => { + const charCode = char.charCodeAt(0) - offset; + return String.fromCharCode(charCode); + }) + .join(''); + } +} diff --git a/src/utils/class/HashLocalStorage.ts b/src/utils/class/HashLocalStorage.ts new file mode 100644 index 0000000..6fdda4c --- /dev/null +++ b/src/utils/class/HashLocalStorage.ts @@ -0,0 +1,22 @@ +import { LocalStorageEnum } from '../../enums/LocalStorage'; +import { Hash } from './Hash'; + +export class HashLocalStorage extends Hash { + static getItem(key: LocalStorageEnum): T | null { + const hashedValue = localStorage.getItem(key); + if (!hashedValue) return null; + + try { + const unHashedValue = this.unHash(hashedValue); + return JSON.parse(unHashedValue) as T; + } catch { + return null; + } + } + + static setItem(key: LocalStorageEnum, value: T): void { + const stringifyValue = JSON.stringify(value); + const hashedValue = this.hash(stringifyValue); + localStorage.setItem(key, hashedValue); + } +} diff --git a/src/utils/class/LocalStorage.ts b/src/utils/class/LocalStorage.ts new file mode 100644 index 0000000..4aebaaa --- /dev/null +++ b/src/utils/class/LocalStorage.ts @@ -0,0 +1,24 @@ +import { LocalStorageEnum } from '../../enums/LocalStorage'; + +export class LocalStorage { + static getItem(key: LocalStorageEnum): T | null { + const value = localStorage.getItem(key); + if (value === null) { + return null; // Return null if the item doesn't exist + } + try { + return JSON.parse(value) as T; + } catch (error) { + console.error( + `Error parsing value from localStorage for key "${key}":`, + error, + ); + return value as unknown as T; + } + } + + static setItem(key: LocalStorageEnum, value: T): void { + const stringifyValue = JSON.stringify(value); + localStorage.setItem(key, stringifyValue); + } +} diff --git a/src/utils/class/LocalStorageManager.ts b/src/utils/class/LocalStorageManager.ts new file mode 100644 index 0000000..f29ce34 --- /dev/null +++ b/src/utils/class/LocalStorageManager.ts @@ -0,0 +1,21 @@ +import { HashLocalStorage } from './HashLocalStorage'; +import { LocalStorage } from './LocalStorage'; +import { LocalStorageManagerInterface } from '../Interface/LocalStorageManagerInterface'; +import { LocalStorageEnum } from '../../enums/LocalStorage'; + +const isHashed = import.meta.env.REACT_APP_IS_HASH === 'true'; + +export class LocalStorageManagerClass extends (isHashed + ? HashLocalStorage + : LocalStorage) { + static removeItem(key: LocalStorageEnum): void { + localStorage.removeItem(key); + } + + static clearItems(): void { + localStorage.clear(); + } +} + +export const LocalStorageManager: LocalStorageManagerInterface = + LocalStorageManagerClass; diff --git a/src/utils/document/BodyClassName.ts b/src/utils/document/BodyClassName.ts new file mode 100644 index 0000000..3c97615 --- /dev/null +++ b/src/utils/document/BodyClassName.ts @@ -0,0 +1,11 @@ +export const getBodyClassName = (className: string): string | null => { + return document.body.classList.contains(className) ? className : null; +}; + +export const setBodyClassName = (className: string): void => { + document.body.classList.add(className); +}; + +export const removeBodyClassName = (className: string): void => { + document.body.classList.remove(className); +}; diff --git a/src/utils/document/getCSSVariable.ts b/src/utils/document/getCSSVariable.ts new file mode 100644 index 0000000..fb7e41c --- /dev/null +++ b/src/utils/document/getCSSVariable.ts @@ -0,0 +1,5 @@ +export function getCSSVariable(name: string) { + return getComputedStyle(document.documentElement).getPropertyValue( + `--${name}`, + ); +} diff --git a/src/utils/document/rootVariables.ts b/src/utils/document/rootVariables.ts new file mode 100644 index 0000000..64b5944 --- /dev/null +++ b/src/utils/document/rootVariables.ts @@ -0,0 +1,9 @@ +export const getVariables = (Variables: string): string | undefined => { + return getComputedStyle( + document.querySelector(':root') as Element, + )?.getPropertyValue(`--${Variables}`); +}; + +export const setVariables = (Variables: string, value: string): void => { + document.documentElement.style.setProperty(`--${Variables}`, value); +}; diff --git a/src/utils/document/setLanguageDirection.ts b/src/utils/document/setLanguageDirection.ts new file mode 100644 index 0000000..642f738 --- /dev/null +++ b/src/utils/document/setLanguageDirection.ts @@ -0,0 +1,11 @@ +export const setLanguageDirection = (language: string) => { + if (language === 'ar') { + document.body.setAttribute('dir', 'rtl'); + document.body.classList.remove('en'); + document.body.classList.add('ar'); + } else { + document.body.setAttribute('dir', 'ltr'); + document.body.classList.remove('ar'); + document.body.classList.add('en'); + } +}; diff --git a/src/utils/index.tsx b/src/utils/index.tsx new file mode 100644 index 0000000..bd28c41 --- /dev/null +++ b/src/utils/index.tsx @@ -0,0 +1,6 @@ +import Logo from '../assets/core/logo.svg' + + +export { + Logo +} \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..36aae69 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a8d3cb5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + } +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..49b80c2 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"], + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..522f657 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import { visualizer } from 'rollup-plugin-visualizer'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react(), + visualizer({ + filename: './bundle-analysis.html', // Output file + open: true, // Open the generated file automatically + }), + ], + + resolve: { + alias: { + '@': '/src', + }, + }, +});