diff --git a/template/.editorconfig b/template/.editorconfig new file mode 100644 index 0000000..1a3af92 --- /dev/null +++ b/template/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/template/.eslintignore b/template/.eslintignore new file mode 100644 index 0000000..5e43a56 --- /dev/null +++ b/template/.eslintignore @@ -0,0 +1,22 @@ +// .eslintignore +build/* +dist/* +public/* +**/out/* +**/node_modules/* + +**/.next/* +next.config.js + +vite.config.js +vite.config.ts + +src/reportWebVitals.js +src/service-worker.js +src/serviceWorkerRegistration.js +src/setupTests.js + +src/reportWebVitals.ts +src/service-worker.ts +src/serviceWorkerRegistration.ts +src/setupTests.ts diff --git a/template/.eslintrc b/template/.eslintrc new file mode 100644 index 0000000..ca72eb7 --- /dev/null +++ b/template/.eslintrc @@ -0,0 +1,176 @@ +{ + "root": true, + "env": { + "browser": true, + "es2021": true + }, + "plugins": [ + "perfectionist", + "unused-imports", + "prettier" + ], + "extends": [ + "airbnb", + "airbnb/hooks", + "prettier" + ], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module", + "ecmaFeatures": { + "jsx": true + } + }, + "settings": { + "react": { + "version": "detect" + }, + "import/resolver": { + "alias": { + "map": [ + [ + "src", + "./src" + ] + ], + "extensions": [ + ".js", + ".jsx", + ".json" + ] + } + } + }, + "rules": { + "no-alert": 0, + "camelcase": 0, + "no-console": 0, + "no-param-reassign": 0, + "naming-convention": 0, + "default-param-last": 0, + "no-underscore-dangle": 0, + "no-use-before-define": 0, + "no-restricted-exports": 0, + "react/no-children-prop": 0, + "react/forbid-prop-types": 0, + "react/react-in-jsx-scope": 0, + "jsx-a11y/anchor-is-valid": 0, + "react/no-array-index-key": 0, + "no-promise-executor-return": 0, + "react/require-default-props": 0, + "react/jsx-filename-extension": 0, + "react/jsx-props-no-spreading": 0, + "import/prefer-default-export": 0, + "react/function-component-definition": 0, + "jsx-a11y/control-has-associated-label": 0, + "react/jsx-no-useless-fragment": [ + 1, + { + "allowExpressions": true + } + ], + "prefer-destructuring": [ + 1, + { + "object": true, + "array": false + } + ], + "react/no-unstable-nested-components": [ + 1, + { + "allowAsProps": true + } + ], + "no-unused-vars": [ + 1, + { + "args": "none" + } + ], + "react/jsx-no-duplicate-props": [ + 1, + { + "ignoreCase": false + } + ], + // unused-imports + // https://www.npmjs.com/package/eslint-plugin-unused-imports + "unused-imports/no-unused-imports": 1, + "unused-imports/no-unused-vars": [ + 0, + { + "vars": "all", + "varsIgnorePattern": "^_", + "args": "after-used", + "argsIgnorePattern": "^_" + } + ], + // perfectionist + // https://eslint-plugin-perfectionist.azat.io/ + "perfectionist/sort-named-imports": [ + 1, + { + "order": "asc", + "type": "line-length" + } + ], + "perfectionist/sort-named-exports": [ + 1, + { + "order": "asc", + "type": "line-length" + } + ], + "perfectionist/sort-exports": [ + 1, + { + "order": "asc", + "type": "line-length" + } + ], + "perfectionist/sort-imports": [ + 1, + { + "order": "asc", + "type": "line-length", + "newlines-between": "always", + "groups": [ + [ + "builtin", + "external" + ], + "custom-mui", + "custom-routes", + "custom-hooks", + "custom-utils", + "internal", + "custom-components", + "custom-sections", + "custom-types", + [ + "parent", + "sibling", + "index" + ], + "object", + "unknown" + ], + "custom-groups": { + "value": { + "custom-mui": "@mui/**", + "custom-routes": "src/routes/**", + "custom-hooks": "src/hooks/**", + "custom-utils": "src/utils/**", + "custom-components": "src/components/**", + "custom-sections": "src/sections/**", + "custom-types": "src/types/**" + } + }, + "internal-pattern": [ + "src/**" + ] + } + ] + } +} diff --git a/template/.gitignore b/template/.gitignore new file mode 100644 index 0000000..44300dc --- /dev/null +++ b/template/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +node_modules +.pnp +.pnp.js + +# testing +coverage + +# production +.next +.swc +_static +out +dist +build + +# environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# misc +.DS_Store +.vercel +.netlify +.unimportedrc.json +tsconfig.tsbuildinfo +.vscode + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/template/.prettierignore b/template/.prettierignore new file mode 100644 index 0000000..7ea9455 --- /dev/null +++ b/template/.prettierignore @@ -0,0 +1,9 @@ +build/* +dist/* +public/* +**/out/* +**/.next/* +**/node_modules/* + +package-lock.json +yarn.lock diff --git a/template/.prettierrc b/template/.prettierrc new file mode 100644 index 0000000..9ddd2fd --- /dev/null +++ b/template/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "es5", + "tabWidth": 2 +} diff --git a/template/README.md b/template/README.md new file mode 100644 index 0000000..0d3b4f0 --- /dev/null +++ b/template/README.md @@ -0,0 +1,13 @@ +## NODE.JS + +- Node 16.x || 18.x + +## USING YARN (Recommend) + +- yarn install +- yarn start + +## USING NPM + +- npm i OR npm i --legacy-peer-deps +- npm start diff --git a/template/index.html b/template/index.html new file mode 100644 index 0000000..e9e53e6 --- /dev/null +++ b/template/index.html @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + Zone UI Kit + + + + + + + + +
+ + + + diff --git a/template/jsconfig.json b/template/jsconfig.json new file mode 100644 index 0000000..fb8ee3d --- /dev/null +++ b/template/jsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "baseUrl": "." + } +} diff --git a/template/package-lock.json b/template/package-lock.json new file mode 100644 index 0000000..9053aef --- /dev/null +++ b/template/package-lock.json @@ -0,0 +1,6555 @@ +{ + "name": "@zone-kit/vite-js", + "version": "2.4.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@zone-kit/vite-js", + "version": "2.4.0", + "dependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@hookform/resolvers": "^3.3.2", + "@iconify/react": "^4.1.1", + "@mui/lab": "^5.0.0-alpha.155", + "@mui/material": "^5.14.20", + "@mui/system": "^5.14.20", + "@mui/x-date-pickers": "^6.18.4", + "date-fns": "^2.30.0", + "framer-motion": "^10.16.16", + "google-map-react": "^2.2.1", + "lodash.isequal": "^4.5.0", + "lodash.merge": "^4.6.2", + "mui-one-time-password-input": "^2.0.1", + "nprogress": "^0.2.0", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-countup": "^6.5.0", + "react-dom": "^18.2.0", + "react-helmet-async": "^2.0.3", + "react-hook-form": "^7.48.2", + "react-lazy-load-image-component": "^1.6.0", + "react-player": "^2.13.0", + "react-router": "^6.20.1", + "react-router-dom": "^6.20.1", + "react-slick": "^0.29.0", + "simplebar-react": "^3.2.4", + "slick-carousel": "^1.8.1", + "stylis": "^4.3.0", + "stylis-plugin-rtl": "^2.1.1", + "yet-another-react-lightbox": "^3.15.6", + "yup": "^1.3.2" + }, + "devDependencies": { + "@vitejs/plugin-react-swc": "^3.5.0", + "eslint": "^8.55.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-jsx-a11y": "^6.8.0", + "eslint-plugin-perfectionist": "^2.5.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-unused-imports": "^3.0.0", + "prettier": "^3.1.1", + "typescript": "^5.3.3", + "vite": "^5.0.7", + "vite-plugin-checker": "^0.6.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", + "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", + "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", + "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", + "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", + "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", + "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", + "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", + "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", + "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", + "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", + "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", + "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", + "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", + "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", + "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", + "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", + "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", + "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", + "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", + "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", + "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", + "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", + "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz", + "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz", + "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==", + "dependencies": { + "@floating-ui/dom": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, + "node_modules/@googlemaps/js-api-loader": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.16.2.tgz", + "integrity": "sha512-psGw5u0QM6humao48Hn4lrChOM2/rA43ZCm3tKK9qQsEj1/VzqkCqnvGfEOshDbBQflydfaRovbKwZMF4AyqbA==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/@hookform/resolvers": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.3.2.tgz", + "integrity": "sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA==", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@iconify/react": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@iconify/react/-/react-4.1.1.tgz", + "integrity": "sha512-jed14EjvKjee8mc0eoscGxlg7mSQRkwQG3iX3cPBCO7UlOjz0DtlvTqxqEcHUJGh+z1VJ31Yhu5B9PxfO0zbdg==", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.26.tgz", + "integrity": "sha512-gPMRKC84VRw+tjqYoyBzyrBUqHQucMXdlBpYazHa5rCXrb91fYEQk5SqQ2U5kjxx9QxZxTBvWAmZ6DblIgaGhQ==", + "dependencies": { + "@babel/runtime": "^7.23.4", + "@floating-ui/react-dom": "^2.0.4", + "@mui/types": "^7.2.10", + "@mui/utils": "^5.14.20", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.14.20", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.20.tgz", + "integrity": "sha512-fXoGe8VOrIYajqALysFuyal1q1YmBARqJ3tmnWYDVl0scu8f6h6tZQbS2K8BY28QwkWNGyv4WRfuUkzN5HR3Ow==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/lab": { + "version": "5.0.0-alpha.155", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.155.tgz", + "integrity": "sha512-9mE929QFToQnSghSwvcy3Yeg+Pkj2WnR6z9OP871JiqFDL80b6OaLg2qyUt4zTFhbiBwUyBTJQ9XFrkFIibLHw==", + "dependencies": { + "@babel/runtime": "^7.23.4", + "@mui/base": "5.0.0-beta.26", + "@mui/system": "^5.14.20", + "@mui/types": "^7.2.10", + "@mui/utils": "^5.14.20", + "clsx": "^2.0.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material": ">=5.10.11", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.14.20", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.20.tgz", + "integrity": "sha512-SUcPZnN6e0h1AtrDktEl76Dsyo/7pyEUQ+SAVe9XhHg/iliA0b4Vo+Eg4HbNkELsMbpDsUF4WHp7rgflPG7qYQ==", + "dependencies": { + "@babel/runtime": "^7.23.4", + "@mui/base": "5.0.0-beta.26", + "@mui/core-downloads-tracker": "^5.14.20", + "@mui/system": "^5.14.20", + "@mui/types": "^7.2.10", + "@mui/utils": "^5.14.20", + "@types/react-transition-group": "^4.4.9", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.14.20", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.20.tgz", + "integrity": "sha512-WV560e1vhs2IHCh0pgUaWHznrcrVoW9+cDCahU1VTkuwPokWVvb71ccWQ1f8Y3tRBPPcNkU2dChkkRJChLmQlQ==", + "dependencies": { + "@babel/runtime": "^7.23.4", + "@mui/utils": "^5.14.20", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.14.20", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.20.tgz", + "integrity": "sha512-Vs4nGptd9wRslo9zeRkuWcZeIEp+oYbODy+fiZKqqr4CH1Gfi9fdP0Q1tGYk8OiJ2EPB/tZSAyOy62Hyp/iP7g==", + "dependencies": { + "@babel/runtime": "^7.23.4", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.14.20", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.20.tgz", + "integrity": "sha512-jKOGtK4VfYZG5kdaryUHss4X6hzcfh0AihT8gmnkfqRtWP7xjY+vPaUhhuSeibE5sqA5wCtdY75z6ep9pxFnIg==", + "dependencies": { + "@babel/runtime": "^7.23.4", + "@mui/private-theming": "^5.14.20", + "@mui/styled-engine": "^5.14.19", + "@mui/types": "^7.2.10", + "@mui/utils": "^5.14.20", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.10.tgz", + "integrity": "sha512-wX1vbDC+lzF7FlhT6A3ffRZgEoKWPF8VqRoTu4lZwouFX2t90KyCMsgepMw5DxLak1BSp/KP86CmtZttikb/gQ==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.14.20", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.20.tgz", + "integrity": "sha512-Y6yL5MoFmtQml20DZnaaK1znrCEwG6/vRSzW8PKOTrzhyqKIql0FazZRUR7sA5EPASgiyKZfq0FPwISRXm5NdA==", + "dependencies": { + "@babel/runtime": "^7.23.4", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/x-date-pickers": { + "version": "6.18.4", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.18.4.tgz", + "integrity": "sha512-YqJ6lxZHBIt344B3bvRAVbdYSQz4dcmJQXGcfvJTn26VdKjpgzjAqwhlbQhbAt55audJOWzGB99ImuQuljDROA==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/base": "^5.0.0-beta.22", + "@mui/utils": "^5.14.16", + "@types/react-transition-group": "^4.4.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.8.6", + "@mui/system": "^5.8.0", + "date-fns": "^2.25.0", + "date-fns-jalali": "^2.13.0-0", + "dayjs": "^1.10.7", + "luxon": "^3.0.2", + "moment": "^2.29.4", + "moment-hijri": "^2.1.2", + "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "date-fns-jalali": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-hijri": { + "optional": true + }, + "moment-jalaali": { + "optional": true + } + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@remix-run/router": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.13.1.tgz", + "integrity": "sha512-so+DHzZKsoOcoXrILB4rqDkMDy7NLMErRdOxvzvOKb507YINKUP4Di+shbTZDhSE/pBZ+vr7XGIpcOO0VLSA+Q==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.7.0.tgz", + "integrity": "sha512-rGku10pL1StFlFvXX5pEv88KdGW6DHUghsxyP/aRYb9eH+74jTGJ3U0S/rtlsQ4yYq1Hcc7AMkoJOb1xu29Fxw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.7.0.tgz", + "integrity": "sha512-/EBw0cuJ/KVHiU2qyVYUhogXz7W2vXxBzeE9xtVIMC+RyitlY2vvaoysMUqASpkUtoNIHlnKTu/l7mXOPgnKOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.7.0.tgz", + "integrity": "sha512-4VXG1bgvClJdbEYYjQ85RkOtwN8sqI3uCxH0HC5w9fKdqzRzgG39K7GAehATGS8jghA7zNoS5CjSKkDEqWmNZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.7.0.tgz", + "integrity": "sha512-/ImhO+T/RWJ96hUbxiCn2yWI0/MeQZV/aeukQQfhxiSXuZJfyqtdHPUPrc84jxCfXTxbJLmg4q+GBETeb61aNw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.7.0.tgz", + "integrity": "sha512-zhye8POvTyUXlKbfPBVqoHy3t43gIgffY+7qBFqFxNqVtltQLtWeHNAbrMnXiLIfYmxcoL/feuLDote2tx+Qbg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.7.0.tgz", + "integrity": "sha512-RAdr3OJnUum6Vs83cQmKjxdTg31zJnLLTkjhcFt0auxM6jw00GD6IPFF42uasYPr/wGC6TRm7FsQiJyk0qIEfg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.7.0.tgz", + "integrity": "sha512-nhWwYsiJwZGq7SyR3afS3EekEOsEAlrNMpPC4ZDKn5ooYSEjDLe9W/xGvoIV8/F/+HNIY6jY8lIdXjjxfxopXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.7.0.tgz", + "integrity": "sha512-rlfy5RnQG1aop1BL/gjdH42M2geMUyVQqd52GJVirqYc787A/XVvl3kQ5NG/43KXgOgE9HXgCaEH05kzQ+hLoA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.7.0.tgz", + "integrity": "sha512-cCkoGlGWfBobdDtiiypxf79q6k3/iRVGu1HVLbD92gWV5WZbmuWJCgRM4x2N6i7ljGn1cGytPn9ZAfS8UwF6vg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.7.0.tgz", + "integrity": "sha512-R2oBf2p/Arc1m+tWmiWbpHBjEcJnHVnv6bsypu4tcKdrYTpDfl1UT9qTyfkIL1iiii5D4WHxUHCg5X0pzqmxFg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.7.0.tgz", + "integrity": "sha512-CPtgaQL1aaPc80m8SCVEoxFGHxKYIt3zQYC3AccL/SqqiWXblo3pgToHuBwR8eCP2Toa+X1WmTR/QKFMykws7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.7.0.tgz", + "integrity": "sha512-pmioUlttNh9GXF5x2CzNa7Z8kmRTyhEzzAC+2WOOapjewMbl+3tGuAnxbwc5JyG8Jsz2+hf/QD/n5VjimOZ63g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.7.0.tgz", + "integrity": "sha512-SeZzC2QhhdBQUm3U0c8+c/P6UlRyBcLL2Xp5KX7z46WXZxzR8RJSIWL9wSUeBTgxog5LTPJuPj0WOT9lvrtP7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/core": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.100.tgz", + "integrity": "sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.100", + "@swc/core-darwin-x64": "1.3.100", + "@swc/core-linux-arm64-gnu": "1.3.100", + "@swc/core-linux-arm64-musl": "1.3.100", + "@swc/core-linux-x64-gnu": "1.3.100", + "@swc/core-linux-x64-musl": "1.3.100", + "@swc/core-win32-arm64-msvc": "1.3.100", + "@swc/core-win32-ia32-msvc": "1.3.100", + "@swc/core-win32-x64-msvc": "1.3.100" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz", + "integrity": "sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz", + "integrity": "sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz", + "integrity": "sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz", + "integrity": "sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz", + "integrity": "sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz", + "integrity": "sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz", + "integrity": "sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz", + "integrity": "sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.100", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz", + "integrity": "sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "node_modules/@types/react": { + "version": "18.2.43", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.43.tgz", + "integrity": "sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz", + "integrity": "sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.2.tgz", + "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz", + "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.2.tgz", + "integrity": "sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.13.2", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/typescript-estree": "6.13.2", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz", + "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.13.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.5.0.tgz", + "integrity": "sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig==", + "dev": true, + "dependencies": { + "@swc/core": "^1.3.96" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/can-use-dom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", + "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ==" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/countup.js": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-2.8.0.tgz", + "integrity": "sha512-f7xEhX0awl4NOElHulrl4XRfKoNH3rB+qfNSZZyjSZhaAoUk6elvhH+MNxMmlmuUJ2/QNTWPSA7U4mNtIAKljQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssjanus": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cssjanus/-/cssjanus-2.1.0.tgz", + "integrity": "sha512-kAijbny3GmdOi9k+QT6DGIXqFvL96aksNlGr4Rhk9qXDZYWUojU4bRc3IHWxdaLNOqgEZHuXoe5Wl2l7dxLW5g==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", + "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.9", + "@esbuild/android-arm64": "0.19.9", + "@esbuild/android-x64": "0.19.9", + "@esbuild/darwin-arm64": "0.19.9", + "@esbuild/darwin-x64": "0.19.9", + "@esbuild/freebsd-arm64": "0.19.9", + "@esbuild/freebsd-x64": "0.19.9", + "@esbuild/linux-arm": "0.19.9", + "@esbuild/linux-arm64": "0.19.9", + "@esbuild/linux-ia32": "0.19.9", + "@esbuild/linux-loong64": "0.19.9", + "@esbuild/linux-mips64el": "0.19.9", + "@esbuild/linux-ppc64": "0.19.9", + "@esbuild/linux-riscv64": "0.19.9", + "@esbuild/linux-s390x": "0.19.9", + "@esbuild/linux-x64": "0.19.9", + "@esbuild/netbsd-x64": "0.19.9", + "@esbuild/openbsd-x64": "0.19.9", + "@esbuild/sunos-x64": "0.19.9", + "@esbuild/win32-arm64": "0.19.9", + "@esbuild/win32-ia32": "0.19.9", + "@esbuild/win32-x64": "0.19.9" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "dev": true, + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-alias": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz", + "integrity": "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==", + "dev": true, + "engines": { + "node": ">= 4" + }, + "peerDependencies": { + "eslint-plugin-import": ">=1.4.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-perfectionist": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-2.5.0.tgz", + "integrity": "sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^6.13.0", + "minimatch": "^9.0.3", + "natural-compare-lite": "^1.4.0" + }, + "peerDependencies": { + "astro-eslint-parser": "^0.16.0", + "eslint": ">=8.0.0", + "svelte": ">=3.0.0", + "svelte-eslint-parser": "^0.33.0", + "vue-eslint-parser": ">=9.0.0" + }, + "peerDependenciesMeta": { + "astro-eslint-parser": { + "optional": true + }, + "svelte": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + }, + "vue-eslint-parser": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/eslint-plugin-perfectionist/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-unused-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz", + "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.0.0", + "eslint": "^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/framer-motion": { + "version": "10.16.16", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.16.tgz", + "integrity": "sha512-je6j91rd7NmUX7L1XHouwJ4v3R+SO4umso2LUcgOct3rHZ0PajZ80ETYZTajzEXEl9DlKyzjyt4AvGQ+lrebOw==", + "dependencies": { + "tslib": "^2.4.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/framer-motion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/google-map-react": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/google-map-react/-/google-map-react-2.2.1.tgz", + "integrity": "sha512-Dg8aexf5rNSmywj0XKQ5m4RNzVcWwKEM2BGDj5aPChD0um8ZRjB5Upcb/yg/i0oG1aES29asQ5+6BHVgrK5xGA==", + "dependencies": { + "@googlemaps/js-api-loader": "^1.13.8", + "@mapbox/point-geometry": "^0.1.0", + "eventemitter3": "^4.0.4", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "peer": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mui-one-time-password-input": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mui-one-time-password-input/-/mui-one-time-password-input-2.0.1.tgz", + "integrity": "sha512-VIp4bSHUpX2GK5VSzAoi8leRnZLcXUQ+T3mR+HHY8T/+31hfe3nR2OPPLHEB79Rp+91HWDaWkD6DQ7JMveX9gQ==", + "dependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material": "^5.0.0", + "@types/react": "^18.0.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material": "^5.0.0", + "@types/react": "^18.0.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-countup": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/react-countup/-/react-countup-6.5.0.tgz", + "integrity": "sha512-26JFHbUHsHxu8SetkJwWVIUEkaNnrj4P9msxNGC8tS4hGr1bngRzbwtJYOgXD2G/ItjaKJ3JfYKd85sw7qRVeA==", + "dependencies": { + "countup.js": "^2.8.0" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-helmet-async": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.3.tgz", + "integrity": "sha512-7/X3ehSCbjCaIljWa39Bb7F1Y2JWM23FN80kLozx2TdgzUmxKDSLN6qu06NG0Srzm8ljGOjgk7r7CXeEOx4MPw==", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.48.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.48.2.tgz", + "integrity": "sha512-H0T2InFQb1hX7qKtDIZmvpU1Xfn/bdahWBN1fH19gSe4bBEqTfmlr7H3XWTaVtiK4/tpPaI1F3355GPMZYge+A==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/react-lazy-load-image-component": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/react-lazy-load-image-component/-/react-lazy-load-image-component-1.6.0.tgz", + "integrity": "sha512-8KFkDTgjh+0+PVbH+cx0AgxLGbdTsxWMnxXzU5HEUztqewk9ufQAu8cstjZhyvtMIPsdMcPZfA0WAa7HtjQbBQ==", + "dependencies": { + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1" + }, + "peerDependencies": { + "react": "^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x", + "react-dom": "^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x" + } + }, + "node_modules/react-player": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.13.0.tgz", + "integrity": "sha512-gkY7ZdbVFztlKFFhCPcnDrFQm+L399b8fhWsKatZ+b2wpKJwfUHBXQFMRxqYQGT0ic1/wQ7D7EZEWy7ZBqk2pw==", + "dependencies": { + "deepmerge": "^4.0.0", + "load-script": "^1.0.0", + "memoize-one": "^5.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.0.1" + }, + "peerDependencies": { + "react": ">=16.6.0" + } + }, + "node_modules/react-router": { + "version": "6.20.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.20.1.tgz", + "integrity": "sha512-ccvLrB4QeT5DlaxSFFYi/KR8UMQ4fcD8zBcR71Zp1kaYTC5oJKYAp1cbavzGrogwxca+ubjkd7XjFZKBW8CxPA==", + "dependencies": { + "@remix-run/router": "1.13.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.20.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.20.1.tgz", + "integrity": "sha512-npzfPWcxfQN35psS7rJgi/EW0Gx6EsNjfdJSAk73U/HqMEJZ2k/8puxfwHFgDQhBGmS3+sjnGbMdMSV45axPQw==", + "dependencies": { + "@remix-run/router": "1.13.1", + "react-router": "6.20.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-slick": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.29.0.tgz", + "integrity": "sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA==", + "dependencies": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.7.0.tgz", + "integrity": "sha512-7Kw0dUP4BWH78zaZCqF1rPyQ8D5DSU6URG45v1dqS/faNsx9WXyess00uTOZxKr7oR/4TOjO1CPudT8L1UsEgw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.7.0", + "@rollup/rollup-android-arm64": "4.7.0", + "@rollup/rollup-darwin-arm64": "4.7.0", + "@rollup/rollup-darwin-x64": "4.7.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.7.0", + "@rollup/rollup-linux-arm64-gnu": "4.7.0", + "@rollup/rollup-linux-arm64-musl": "4.7.0", + "@rollup/rollup-linux-riscv64-gnu": "4.7.0", + "@rollup/rollup-linux-x64-gnu": "4.7.0", + "@rollup/rollup-linux-x64-musl": "4.7.0", + "@rollup/rollup-win32-arm64-msvc": "4.7.0", + "@rollup/rollup-win32-ia32-msvc": "4.7.0", + "@rollup/rollup-win32-x64-msvc": "4.7.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simplebar-core": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.2.4.tgz", + "integrity": "sha512-P+Sqshef4fq3++gQ82TgNYcgl3qZFSCP5jS2/8NMmw18oagXOijMzs1G+vm6RUY3oMvpwH3wGoqh9u6SyDjHfQ==", + "dependencies": { + "@types/lodash-es": "^4.17.6", + "can-use-dom": "^0.1.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, + "node_modules/simplebar-react": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/simplebar-react/-/simplebar-react-3.2.4.tgz", + "integrity": "sha512-ogLN79e7JUm82wJChD7NSUB+4EHCFvDkjXpiu8hT1Alk7DnCekUWds61NXcsP9jC97KOgF5To/AVjYFbX0olgg==", + "dependencies": { + "simplebar-core": "^1.2.4" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/stylis-plugin-rtl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/stylis-plugin-rtl/-/stylis-plugin-rtl-2.1.1.tgz", + "integrity": "sha512-q6xIkri6fBufIO/sV55md2CbgS5c6gg9EhSVATtHHCdOnbN/jcI0u3lYhNVeuI65c4lQPo67g8xmq5jrREvzlg==", + "dependencies": { + "cssjanus": "^2.0.1" + }, + "peerDependencies": { + "stylis": "4.x" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", + "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "dev": true + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.7.tgz", + "integrity": "sha512-B4T4rJCDPihrQo2B+h1MbeGL/k/GMAHzhQ8S0LjQ142s6/+l3hHTT095ORvsshj4QCkoWu3Xtmob5mazvakaOw==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.2.tgz", + "integrity": "sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "fs-extra": "^11.1.0", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "semver": "^7.5.0", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": ">=1.3.9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "dev": true, + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "engines": { + "vscode": "^1.52.0" + } + }, + "node_modules/vscode-languageclient/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yet-another-react-lightbox": { + "version": "3.15.6", + "resolved": "https://registry.npmjs.org/yet-another-react-lightbox/-/yet-another-react-lightbox-3.15.6.tgz", + "integrity": "sha512-he+WqKL5ZPk393oZQyadD347QqEPPr4fjqUVZKjIOeaIpbe9PHtwV4m8PjUzkbx3BISXasOqv0C/+cE1gBboXg==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.3.2.tgz", + "integrity": "sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ==", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/template/package.json b/template/package.json new file mode 100644 index 0000000..b6c0ef4 --- /dev/null +++ b/template/package.json @@ -0,0 +1,74 @@ +{ + "name": "@zone-kit/vite-js", + "author": "Minimals", + "version": "2.4.0", + "description": "Vite Starter & JavaScript", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "start": "vite preview", + "build": "vite build", + "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", + "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", + "prettier": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", + "rm:all": "rm -rf node_modules .next out dist build", + "re:start": "yarn rm:all && yarn install && yarn dev", + "re:build": "yarn rm:all && yarn install && yarn build", + "re:build-npm": "npm run rm:all && npm install && npm run build", + "dev:host": "vite --host" + }, + "dependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@hookform/resolvers": "^3.3.2", + "@iconify/react": "^4.1.1", + "@mui/lab": "^5.0.0-alpha.155", + "@mui/material": "^5.14.20", + "@mui/system": "^5.14.20", + "@mui/x-date-pickers": "^6.18.4", + "date-fns": "^2.30.0", + "framer-motion": "^10.16.16", + "google-map-react": "^2.2.1", + "lodash.isequal": "^4.5.0", + "lodash.merge": "^4.6.2", + "mui-one-time-password-input": "^2.0.1", + "nprogress": "^0.2.0", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-countup": "^6.5.0", + "react-dom": "^18.2.0", + "react-helmet-async": "^2.0.3", + "react-hook-form": "^7.48.2", + "react-lazy-load-image-component": "^1.6.0", + "react-player": "^2.13.0", + "react-router": "^6.20.1", + "react-router-dom": "^6.20.1", + "react-slick": "^0.29.0", + "simplebar-react": "^3.2.4", + "slick-carousel": "^1.8.1", + "stylis": "^4.3.0", + "stylis-plugin-rtl": "^2.1.1", + "yet-another-react-lightbox": "^3.15.6", + "yup": "^1.3.2" + }, + "devDependencies": { + "@vitejs/plugin-react-swc": "^3.5.0", + "eslint": "^8.55.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-jsx-a11y": "^6.8.0", + "eslint-plugin-perfectionist": "^2.5.0", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-unused-imports": "^3.0.0", + "prettier": "^3.1.1", + "typescript": "^5.3.3", + "vite": "^5.0.7", + "vite-plugin-checker": "^0.6.2" + } +} diff --git a/template/public/_redirects b/template/public/_redirects new file mode 100644 index 0000000..50a4633 --- /dev/null +++ b/template/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 \ No newline at end of file diff --git a/template/public/assets/background/overlay_1.jpg b/template/public/assets/background/overlay_1.jpg new file mode 100644 index 0000000..b2c0ac9 Binary files /dev/null and b/template/public/assets/background/overlay_1.jpg differ diff --git a/template/public/assets/background/overlay_2.jpg b/template/public/assets/background/overlay_2.jpg new file mode 100644 index 0000000..d4f133e Binary files /dev/null and b/template/public/assets/background/overlay_2.jpg differ diff --git a/template/public/assets/cyan-blur.png b/template/public/assets/cyan-blur.png new file mode 100644 index 0000000..b5dbc95 Binary files /dev/null and b/template/public/assets/cyan-blur.png differ diff --git a/template/public/assets/icons/app-store/ic_app_store.svg b/template/public/assets/icons/app-store/ic_app_store.svg new file mode 100644 index 0000000..0fd59ad --- /dev/null +++ b/template/public/assets/icons/app-store/ic_app_store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/app-store/ic_google_play.svg b/template/public/assets/icons/app-store/ic_google_play.svg new file mode 100644 index 0000000..4e5f3d4 --- /dev/null +++ b/template/public/assets/icons/app-store/ic_google_play.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_book.svg b/template/public/assets/icons/ecommerce/ic_book.svg new file mode 100644 index 0000000..a732136 --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_headphones.svg b/template/public/assets/icons/ecommerce/ic_headphones.svg new file mode 100644 index 0000000..73ebb63 --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_headphones.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_health.svg b/template/public/assets/icons/ecommerce/ic_health.svg new file mode 100644 index 0000000..3c8f4ca --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_health.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_home_appliances.svg b/template/public/assets/icons/ecommerce/ic_home_appliances.svg new file mode 100644 index 0000000..e1b514c --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_home_appliances.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_home_living.svg b/template/public/assets/icons/ecommerce/ic_home_living.svg new file mode 100644 index 0000000..ce8d3f0 --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_home_living.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_laptop.svg b/template/public/assets/icons/ecommerce/ic_laptop.svg new file mode 100644 index 0000000..5ad746d --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_laptop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_men_clothes.svg b/template/public/assets/icons/ecommerce/ic_men_clothes.svg new file mode 100644 index 0000000..ad16d1c --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_men_clothes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_mobile.svg b/template/public/assets/icons/ecommerce/ic_mobile.svg new file mode 100644 index 0000000..3ddcbe9 --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_mobile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_sport.svg b/template/public/assets/icons/ecommerce/ic_sport.svg new file mode 100644 index 0000000..a1cfed9 --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_sport.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_tablet.svg b/template/public/assets/icons/ecommerce/ic_tablet.svg new file mode 100644 index 0000000..ecb42b1 --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_tablet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_watches.svg b/template/public/assets/icons/ecommerce/ic_watches.svg new file mode 100644 index 0000000..8af9fe4 --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_watches.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ecommerce/ic_women_clothes.svg b/template/public/assets/icons/ecommerce/ic_women_clothes.svg new file mode 100644 index 0000000..d6ccd9d --- /dev/null +++ b/template/public/assets/icons/ecommerce/ic_women_clothes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/faq/ic_faq_account.svg b/template/public/assets/icons/faq/ic_faq_account.svg new file mode 100644 index 0000000..50562b7 --- /dev/null +++ b/template/public/assets/icons/faq/ic_faq_account.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/faq/ic_faq_assurances.svg b/template/public/assets/icons/faq/ic_faq_assurances.svg new file mode 100644 index 0000000..2d0375f --- /dev/null +++ b/template/public/assets/icons/faq/ic_faq_assurances.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/faq/ic_faq_delivery.svg b/template/public/assets/icons/faq/ic_faq_delivery.svg new file mode 100644 index 0000000..c9976bb --- /dev/null +++ b/template/public/assets/icons/faq/ic_faq_delivery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/faq/ic_faq_package.svg b/template/public/assets/icons/faq/ic_faq_package.svg new file mode 100644 index 0000000..52a975d --- /dev/null +++ b/template/public/assets/icons/faq/ic_faq_package.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/faq/ic_faq_payment.svg b/template/public/assets/icons/faq/ic_faq_payment.svg new file mode 100644 index 0000000..9156ace --- /dev/null +++ b/template/public/assets/icons/faq/ic_faq_payment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/faq/ic_faq_refund.svg b/template/public/assets/icons/faq/ic_faq_refund.svg new file mode 100644 index 0000000..9835b70 --- /dev/null +++ b/template/public/assets/icons/faq/ic_faq_refund.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/flags/ic_flag_de.svg b/template/public/assets/icons/flags/ic_flag_de.svg new file mode 100644 index 0000000..c361707 --- /dev/null +++ b/template/public/assets/icons/flags/ic_flag_de.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/flags/ic_flag_en.svg b/template/public/assets/icons/flags/ic_flag_en.svg new file mode 100644 index 0000000..485ad5c --- /dev/null +++ b/template/public/assets/icons/flags/ic_flag_en.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/flags/ic_flag_fr.svg b/template/public/assets/icons/flags/ic_flag_fr.svg new file mode 100644 index 0000000..2ae63a1 --- /dev/null +++ b/template/public/assets/icons/flags/ic_flag_fr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_accounting.svg b/template/public/assets/icons/ic_accounting.svg new file mode 100644 index 0000000..11e7225 --- /dev/null +++ b/template/public/assets/icons/ic_accounting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_agreement.svg b/template/public/assets/icons/ic_agreement.svg new file mode 100644 index 0000000..7f3253e --- /dev/null +++ b/template/public/assets/icons/ic_agreement.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_analysis.svg b/template/public/assets/icons/ic_analysis.svg new file mode 100644 index 0000000..048adef --- /dev/null +++ b/template/public/assets/icons/ic_analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_banking.svg b/template/public/assets/icons/ic_banking.svg new file mode 100644 index 0000000..5464db3 --- /dev/null +++ b/template/public/assets/icons/ic_banking.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_banking_currency.svg b/template/public/assets/icons/ic_banking_currency.svg new file mode 100644 index 0000000..fc9dea3 --- /dev/null +++ b/template/public/assets/icons/ic_banking_currency.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_book.png b/template/public/assets/icons/ic_book.png new file mode 100644 index 0000000..23f8b3e Binary files /dev/null and b/template/public/assets/icons/ic_book.png differ diff --git a/template/public/assets/icons/ic_checklist.svg b/template/public/assets/icons/ic_checklist.svg new file mode 100644 index 0000000..cf4d5dc --- /dev/null +++ b/template/public/assets/icons/ic_checklist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_chip.svg b/template/public/assets/icons/ic_chip.svg new file mode 100644 index 0000000..69cdfd6 --- /dev/null +++ b/template/public/assets/icons/ic_chip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_creativity.svg b/template/public/assets/icons/ic_creativity.svg new file mode 100644 index 0000000..f001230 --- /dev/null +++ b/template/public/assets/icons/ic_creativity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_customer_service.svg b/template/public/assets/icons/ic_customer_service.svg new file mode 100644 index 0000000..1e579d0 --- /dev/null +++ b/template/public/assets/icons/ic_customer_service.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_email_inbox.svg b/template/public/assets/icons/ic_email_inbox.svg new file mode 100644 index 0000000..339c23e --- /dev/null +++ b/template/public/assets/icons/ic_email_inbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_email_sent.svg b/template/public/assets/icons/ic_email_sent.svg new file mode 100644 index 0000000..da91473 --- /dev/null +++ b/template/public/assets/icons/ic_email_sent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_figma_outline.svg b/template/public/assets/icons/ic_figma_outline.svg new file mode 100644 index 0000000..959892c --- /dev/null +++ b/template/public/assets/icons/ic_figma_outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_file.svg b/template/public/assets/icons/ic_file.svg new file mode 100644 index 0000000..ee28e12 --- /dev/null +++ b/template/public/assets/icons/ic_file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_google.svg b/template/public/assets/icons/ic_google.svg new file mode 100644 index 0000000..003454c --- /dev/null +++ b/template/public/assets/icons/ic_google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_health_care.svg b/template/public/assets/icons/ic_health_care.svg new file mode 100644 index 0000000..b3daca5 --- /dev/null +++ b/template/public/assets/icons/ic_health_care.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_lock_password.svg b/template/public/assets/icons/ic_lock_password.svg new file mode 100644 index 0000000..a3d4e69 --- /dev/null +++ b/template/public/assets/icons/ic_lock_password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_marketing_bullhorn.svg b/template/public/assets/icons/ic_marketing_bullhorn.svg new file mode 100644 index 0000000..892d1dc --- /dev/null +++ b/template/public/assets/icons/ic_marketing_bullhorn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_money.svg b/template/public/assets/icons/ic_money.svg new file mode 100644 index 0000000..3d6a7a7 --- /dev/null +++ b/template/public/assets/icons/ic_money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_newsletter.svg b/template/public/assets/icons/ic_newsletter.svg new file mode 100644 index 0000000..4e62e7d --- /dev/null +++ b/template/public/assets/icons/ic_newsletter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_optimization.svg b/template/public/assets/icons/ic_optimization.svg new file mode 100644 index 0000000..80fd865 --- /dev/null +++ b/template/public/assets/icons/ic_optimization.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_pencil.png b/template/public/assets/icons/ic_pencil.png new file mode 100644 index 0000000..b8adb56 Binary files /dev/null and b/template/public/assets/icons/ic_pencil.png differ diff --git a/template/public/assets/icons/ic_popularity.svg b/template/public/assets/icons/ic_popularity.svg new file mode 100644 index 0000000..1130bc0 --- /dev/null +++ b/template/public/assets/icons/ic_popularity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_qrcode.svg b/template/public/assets/icons/ic_qrcode.svg new file mode 100644 index 0000000..e13620a --- /dev/null +++ b/template/public/assets/icons/ic_qrcode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_real_time.svg b/template/public/assets/icons/ic_real_time.svg new file mode 100644 index 0000000..cbe274c --- /dev/null +++ b/template/public/assets/icons/ic_real_time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_report.svg b/template/public/assets/icons/ic_report.svg new file mode 100644 index 0000000..3528385 --- /dev/null +++ b/template/public/assets/icons/ic_report.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_reputation.svg b/template/public/assets/icons/ic_reputation.svg new file mode 100644 index 0000000..56bb10c --- /dev/null +++ b/template/public/assets/icons/ic_reputation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_resume_job.svg b/template/public/assets/icons/ic_resume_job.svg new file mode 100644 index 0000000..d1de99a --- /dev/null +++ b/template/public/assets/icons/ic_resume_job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_search.svg b/template/public/assets/icons/ic_search.svg new file mode 100644 index 0000000..e4bfc8e --- /dev/null +++ b/template/public/assets/icons/ic_search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_search_job.svg b/template/public/assets/icons/ic_search_job.svg new file mode 100644 index 0000000..51f31ad --- /dev/null +++ b/template/public/assets/icons/ic_search_job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_secure_payment.svg b/template/public/assets/icons/ic_secure_payment.svg new file mode 100644 index 0000000..7c5033a --- /dev/null +++ b/template/public/assets/icons/ic_secure_payment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_signup_job.svg b/template/public/assets/icons/ic_signup_job.svg new file mode 100644 index 0000000..31269a1 --- /dev/null +++ b/template/public/assets/icons/ic_signup_job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_sketch_design.svg b/template/public/assets/icons/ic_sketch_design.svg new file mode 100644 index 0000000..13023ef --- /dev/null +++ b/template/public/assets/icons/ic_sketch_design.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_social_media.svg b/template/public/assets/icons/ic_social_media.svg new file mode 100644 index 0000000..93a99b0 --- /dev/null +++ b/template/public/assets/icons/ic_social_media.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_software_development.svg b/template/public/assets/icons/ic_software_development.svg new file mode 100644 index 0000000..d9d7cdc --- /dev/null +++ b/template/public/assets/icons/ic_software_development.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_statistics.svg b/template/public/assets/icons/ic_statistics.svg new file mode 100644 index 0000000..5a69396 --- /dev/null +++ b/template/public/assets/icons/ic_statistics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_stethoscope.svg b/template/public/assets/icons/ic_stethoscope.svg new file mode 100644 index 0000000..576f848 --- /dev/null +++ b/template/public/assets/icons/ic_stethoscope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_transparency.svg b/template/public/assets/icons/ic_transparency.svg new file mode 100644 index 0000000..8cbf8b6 --- /dev/null +++ b/template/public/assets/icons/ic_transparency.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/ic_web_programming.svg b/template/public/assets/icons/ic_web_programming.svg new file mode 100644 index 0000000..c6a2203 --- /dev/null +++ b/template/public/assets/icons/ic_web_programming.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/platforms/ic_figma.svg b/template/public/assets/icons/platforms/ic_figma.svg new file mode 100644 index 0000000..91ce016 --- /dev/null +++ b/template/public/assets/icons/platforms/ic_figma.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/template/public/assets/icons/platforms/ic_js.svg b/template/public/assets/icons/platforms/ic_js.svg new file mode 100644 index 0000000..21b0c98 --- /dev/null +++ b/template/public/assets/icons/platforms/ic_js.svg @@ -0,0 +1,4 @@ + + + + diff --git a/template/public/assets/icons/platforms/ic_nextjs.svg b/template/public/assets/icons/platforms/ic_nextjs.svg new file mode 100644 index 0000000..1e038ce --- /dev/null +++ b/template/public/assets/icons/platforms/ic_nextjs.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/icons/platforms/ic_python.svg b/template/public/assets/icons/platforms/ic_python.svg new file mode 100644 index 0000000..8d95bb2 --- /dev/null +++ b/template/public/assets/icons/platforms/ic_python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/platforms/ic_ts.svg b/template/public/assets/icons/platforms/ic_ts.svg new file mode 100644 index 0000000..8d1bcd2 --- /dev/null +++ b/template/public/assets/icons/platforms/ic_ts.svg @@ -0,0 +1,4 @@ + + + + diff --git a/template/public/assets/icons/platforms/ic_vite.svg b/template/public/assets/icons/platforms/ic_vite.svg new file mode 100644 index 0000000..f8bf102 --- /dev/null +++ b/template/public/assets/icons/platforms/ic_vite.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/template/public/assets/icons/pricing/ic_plan_basic01.svg b/template/public/assets/icons/pricing/ic_plan_basic01.svg new file mode 100644 index 0000000..f180e5e --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_basic01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_basic02.svg b/template/public/assets/icons/pricing/ic_plan_basic02.svg new file mode 100644 index 0000000..d1d3950 --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_basic02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_basic03.svg b/template/public/assets/icons/pricing/ic_plan_basic03.svg new file mode 100644 index 0000000..01e5d80 --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_basic03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_premium01.svg b/template/public/assets/icons/pricing/ic_plan_premium01.svg new file mode 100644 index 0000000..8429690 --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_premium01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_premium02.svg b/template/public/assets/icons/pricing/ic_plan_premium02.svg new file mode 100644 index 0000000..53d8d96 --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_premium02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_premium03.svg b/template/public/assets/icons/pricing/ic_plan_premium03.svg new file mode 100644 index 0000000..b675d03 --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_premium03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_starter01.svg b/template/public/assets/icons/pricing/ic_plan_starter01.svg new file mode 100644 index 0000000..5b439b8 --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_starter01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_starter02.svg b/template/public/assets/icons/pricing/ic_plan_starter02.svg new file mode 100644 index 0000000..0516c8c --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_starter02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/pricing/ic_plan_starter03.svg b/template/public/assets/icons/pricing/ic_plan_starter03.svg new file mode 100644 index 0000000..9de060c --- /dev/null +++ b/template/public/assets/icons/pricing/ic_plan_starter03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/service/ic_service_analysis.svg b/template/public/assets/icons/service/ic_service_analysis.svg new file mode 100644 index 0000000..83b2e59 --- /dev/null +++ b/template/public/assets/icons/service/ic_service_analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/service/ic_service_bullhorn.svg b/template/public/assets/icons/service/ic_service_bullhorn.svg new file mode 100644 index 0000000..16bd08d --- /dev/null +++ b/template/public/assets/icons/service/ic_service_bullhorn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/service/ic_service_mail.svg b/template/public/assets/icons/service/ic_service_mail.svg new file mode 100644 index 0000000..8ba7d4c --- /dev/null +++ b/template/public/assets/icons/service/ic_service_mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/service/ic_service_seo.svg b/template/public/assets/icons/service/ic_service_seo.svg new file mode 100644 index 0000000..4df8d8b --- /dev/null +++ b/template/public/assets/icons/service/ic_service_seo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/travel/ic_travel_booking.svg b/template/public/assets/icons/travel/ic_travel_booking.svg new file mode 100644 index 0000000..42fe621 --- /dev/null +++ b/template/public/assets/icons/travel/ic_travel_booking.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/travel/ic_travel_site_visitors.svg b/template/public/assets/icons/travel/ic_travel_site_visitors.svg new file mode 100644 index 0000000..3e58d35 --- /dev/null +++ b/template/public/assets/icons/travel/ic_travel_site_visitors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/travel/ic_travel_tickets.svg b/template/public/assets/icons/travel/ic_travel_tickets.svg new file mode 100644 index 0000000..2d06bd8 --- /dev/null +++ b/template/public/assets/icons/travel/ic_travel_tickets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/icons/travel/ic_travel_verified_hotels.svg b/template/public/assets/icons/travel/ic_travel_verified_hotels.svg new file mode 100644 index 0000000..73aef51 --- /dev/null +++ b/template/public/assets/icons/travel/ic_travel_verified_hotels.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_404.svg b/template/public/assets/illustrations/illustration_404.svg new file mode 100644 index 0000000..ac27886 --- /dev/null +++ b/template/public/assets/illustrations/illustration_404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_500.svg b/template/public/assets/illustrations/illustration_500.svg new file mode 100644 index 0000000..3434a91 --- /dev/null +++ b/template/public/assets/illustrations/illustration_500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_benefits.svg b/template/public/assets/illustrations/illustration_benefits.svg new file mode 100644 index 0000000..0447799 --- /dev/null +++ b/template/public/assets/illustrations/illustration_benefits.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_comingsoon.svg b/template/public/assets/illustrations/illustration_comingsoon.svg new file mode 100644 index 0000000..d607f8e --- /dev/null +++ b/template/public/assets/illustrations/illustration_comingsoon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_courses_contact.svg b/template/public/assets/illustrations/illustration_courses_contact.svg new file mode 100644 index 0000000..8a681ae --- /dev/null +++ b/template/public/assets/illustrations/illustration_courses_contact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_courses_hero.svg b/template/public/assets/illustrations/illustration_courses_hero.svg new file mode 100644 index 0000000..bc2947e --- /dev/null +++ b/template/public/assets/illustrations/illustration_courses_hero.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_faqs.svg b/template/public/assets/illustrations/illustration_faqs.svg new file mode 100644 index 0000000..06dce57 --- /dev/null +++ b/template/public/assets/illustrations/illustration_faqs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_login.svg b/template/public/assets/illustrations/illustration_login.svg new file mode 100644 index 0000000..073c9fe --- /dev/null +++ b/template/public/assets/illustrations/illustration_login.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_maintenance.svg b/template/public/assets/illustrations/illustration_maintenance.svg new file mode 100644 index 0000000..722a48e --- /dev/null +++ b/template/public/assets/illustrations/illustration_maintenance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_map.svg b/template/public/assets/illustrations/illustration_map.svg new file mode 100644 index 0000000..ee6e2f0 --- /dev/null +++ b/template/public/assets/illustrations/illustration_map.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_marketing_contact.svg b/template/public/assets/illustrations/illustration_marketing_contact.svg new file mode 100644 index 0000000..dba7f08 --- /dev/null +++ b/template/public/assets/illustrations/illustration_marketing_contact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_marketing_market.svg b/template/public/assets/illustrations/illustration_marketing_market.svg new file mode 100644 index 0000000..5ad0fdb --- /dev/null +++ b/template/public/assets/illustrations/illustration_marketing_market.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_newsletter.svg b/template/public/assets/illustrations/illustration_newsletter.svg new file mode 100644 index 0000000..a929bf3 --- /dev/null +++ b/template/public/assets/illustrations/illustration_newsletter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_recruitment.svg b/template/public/assets/illustrations/illustration_recruitment.svg new file mode 100644 index 0000000..f11d5bb --- /dev/null +++ b/template/public/assets/illustrations/illustration_recruitment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_services.svg b/template/public/assets/illustrations/illustration_services.svg new file mode 100644 index 0000000..a9b7c77 --- /dev/null +++ b/template/public/assets/illustrations/illustration_services.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_teams.svg b/template/public/assets/illustrations/illustration_teams.svg new file mode 100644 index 0000000..66ea182 --- /dev/null +++ b/template/public/assets/illustrations/illustration_teams.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_travel_contact.svg b/template/public/assets/illustrations/illustration_travel_contact.svg new file mode 100644 index 0000000..9e0ff33 --- /dev/null +++ b/template/public/assets/illustrations/illustration_travel_contact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/illustrations/illustration_vision.svg b/template/public/assets/illustrations/illustration_vision.svg new file mode 100644 index 0000000..f057c99 --- /dev/null +++ b/template/public/assets/illustrations/illustration_vision.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/images/avatar/avatar_1.jpg b/template/public/assets/images/avatar/avatar_1.jpg new file mode 100644 index 0000000..455cc65 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_1.jpg differ diff --git a/template/public/assets/images/avatar/avatar_10.jpg b/template/public/assets/images/avatar/avatar_10.jpg new file mode 100644 index 0000000..a7ec399 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_10.jpg differ diff --git a/template/public/assets/images/avatar/avatar_11.jpg b/template/public/assets/images/avatar/avatar_11.jpg new file mode 100644 index 0000000..d7708bc Binary files /dev/null and b/template/public/assets/images/avatar/avatar_11.jpg differ diff --git a/template/public/assets/images/avatar/avatar_12.jpg b/template/public/assets/images/avatar/avatar_12.jpg new file mode 100644 index 0000000..1e4e9ee Binary files /dev/null and b/template/public/assets/images/avatar/avatar_12.jpg differ diff --git a/template/public/assets/images/avatar/avatar_13.jpg b/template/public/assets/images/avatar/avatar_13.jpg new file mode 100644 index 0000000..54a1823 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_13.jpg differ diff --git a/template/public/assets/images/avatar/avatar_14.jpg b/template/public/assets/images/avatar/avatar_14.jpg new file mode 100644 index 0000000..996ffab Binary files /dev/null and b/template/public/assets/images/avatar/avatar_14.jpg differ diff --git a/template/public/assets/images/avatar/avatar_15.jpg b/template/public/assets/images/avatar/avatar_15.jpg new file mode 100644 index 0000000..5928bb7 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_15.jpg differ diff --git a/template/public/assets/images/avatar/avatar_16.jpg b/template/public/assets/images/avatar/avatar_16.jpg new file mode 100644 index 0000000..f1aa32a Binary files /dev/null and b/template/public/assets/images/avatar/avatar_16.jpg differ diff --git a/template/public/assets/images/avatar/avatar_17.jpg b/template/public/assets/images/avatar/avatar_17.jpg new file mode 100644 index 0000000..d7312cc Binary files /dev/null and b/template/public/assets/images/avatar/avatar_17.jpg differ diff --git a/template/public/assets/images/avatar/avatar_18.jpg b/template/public/assets/images/avatar/avatar_18.jpg new file mode 100644 index 0000000..b14e336 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_18.jpg differ diff --git a/template/public/assets/images/avatar/avatar_19.jpg b/template/public/assets/images/avatar/avatar_19.jpg new file mode 100644 index 0000000..53be9bb Binary files /dev/null and b/template/public/assets/images/avatar/avatar_19.jpg differ diff --git a/template/public/assets/images/avatar/avatar_2.jpg b/template/public/assets/images/avatar/avatar_2.jpg new file mode 100644 index 0000000..0ffd3e5 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_2.jpg differ diff --git a/template/public/assets/images/avatar/avatar_20.jpg b/template/public/assets/images/avatar/avatar_20.jpg new file mode 100644 index 0000000..b0df0ea Binary files /dev/null and b/template/public/assets/images/avatar/avatar_20.jpg differ diff --git a/template/public/assets/images/avatar/avatar_21.jpg b/template/public/assets/images/avatar/avatar_21.jpg new file mode 100644 index 0000000..0014e07 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_21.jpg differ diff --git a/template/public/assets/images/avatar/avatar_22.jpg b/template/public/assets/images/avatar/avatar_22.jpg new file mode 100644 index 0000000..b5398cf Binary files /dev/null and b/template/public/assets/images/avatar/avatar_22.jpg differ diff --git a/template/public/assets/images/avatar/avatar_23.jpg b/template/public/assets/images/avatar/avatar_23.jpg new file mode 100644 index 0000000..045c963 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_23.jpg differ diff --git a/template/public/assets/images/avatar/avatar_24.jpg b/template/public/assets/images/avatar/avatar_24.jpg new file mode 100644 index 0000000..0c347bb Binary files /dev/null and b/template/public/assets/images/avatar/avatar_24.jpg differ diff --git a/template/public/assets/images/avatar/avatar_3.jpg b/template/public/assets/images/avatar/avatar_3.jpg new file mode 100644 index 0000000..2cb8cef Binary files /dev/null and b/template/public/assets/images/avatar/avatar_3.jpg differ diff --git a/template/public/assets/images/avatar/avatar_4.jpg b/template/public/assets/images/avatar/avatar_4.jpg new file mode 100644 index 0000000..c8cb22b Binary files /dev/null and b/template/public/assets/images/avatar/avatar_4.jpg differ diff --git a/template/public/assets/images/avatar/avatar_5.jpg b/template/public/assets/images/avatar/avatar_5.jpg new file mode 100644 index 0000000..6929500 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_5.jpg differ diff --git a/template/public/assets/images/avatar/avatar_6.jpg b/template/public/assets/images/avatar/avatar_6.jpg new file mode 100644 index 0000000..0956d99 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_6.jpg differ diff --git a/template/public/assets/images/avatar/avatar_7.jpg b/template/public/assets/images/avatar/avatar_7.jpg new file mode 100644 index 0000000..5d6cac2 Binary files /dev/null and b/template/public/assets/images/avatar/avatar_7.jpg differ diff --git a/template/public/assets/images/avatar/avatar_8.jpg b/template/public/assets/images/avatar/avatar_8.jpg new file mode 100644 index 0000000..59e410a Binary files /dev/null and b/template/public/assets/images/avatar/avatar_8.jpg differ diff --git a/template/public/assets/images/avatar/avatar_9.jpg b/template/public/assets/images/avatar/avatar_9.jpg new file mode 100644 index 0000000..56fa42a Binary files /dev/null and b/template/public/assets/images/avatar/avatar_9.jpg differ diff --git a/template/public/assets/images/avatar/avatar_default.jpg b/template/public/assets/images/avatar/avatar_default.jpg new file mode 100644 index 0000000..83fcb9e Binary files /dev/null and b/template/public/assets/images/avatar/avatar_default.jpg differ diff --git a/template/public/assets/images/career/career_1.jpg b/template/public/assets/images/career/career_1.jpg new file mode 100644 index 0000000..4326579 Binary files /dev/null and b/template/public/assets/images/career/career_1.jpg differ diff --git a/template/public/assets/images/career/career_10.jpg b/template/public/assets/images/career/career_10.jpg new file mode 100644 index 0000000..428f2d5 Binary files /dev/null and b/template/public/assets/images/career/career_10.jpg differ diff --git a/template/public/assets/images/career/career_11.jpg b/template/public/assets/images/career/career_11.jpg new file mode 100644 index 0000000..ddf4009 Binary files /dev/null and b/template/public/assets/images/career/career_11.jpg differ diff --git a/template/public/assets/images/career/career_12.jpg b/template/public/assets/images/career/career_12.jpg new file mode 100644 index 0000000..06ac619 Binary files /dev/null and b/template/public/assets/images/career/career_12.jpg differ diff --git a/template/public/assets/images/career/career_2.jpg b/template/public/assets/images/career/career_2.jpg new file mode 100644 index 0000000..9a05097 Binary files /dev/null and b/template/public/assets/images/career/career_2.jpg differ diff --git a/template/public/assets/images/career/career_3.jpg b/template/public/assets/images/career/career_3.jpg new file mode 100644 index 0000000..b5a73da Binary files /dev/null and b/template/public/assets/images/career/career_3.jpg differ diff --git a/template/public/assets/images/career/career_4.jpg b/template/public/assets/images/career/career_4.jpg new file mode 100644 index 0000000..c010f3e Binary files /dev/null and b/template/public/assets/images/career/career_4.jpg differ diff --git a/template/public/assets/images/career/career_5.jpg b/template/public/assets/images/career/career_5.jpg new file mode 100644 index 0000000..13fdd5b Binary files /dev/null and b/template/public/assets/images/career/career_5.jpg differ diff --git a/template/public/assets/images/career/career_6.jpg b/template/public/assets/images/career/career_6.jpg new file mode 100644 index 0000000..64ed6f4 Binary files /dev/null and b/template/public/assets/images/career/career_6.jpg differ diff --git a/template/public/assets/images/career/career_7.jpg b/template/public/assets/images/career/career_7.jpg new file mode 100644 index 0000000..b4cb297 Binary files /dev/null and b/template/public/assets/images/career/career_7.jpg differ diff --git a/template/public/assets/images/career/career_8.jpg b/template/public/assets/images/career/career_8.jpg new file mode 100644 index 0000000..06fa37f Binary files /dev/null and b/template/public/assets/images/career/career_8.jpg differ diff --git a/template/public/assets/images/career/career_9.jpg b/template/public/assets/images/career/career_9.jpg new file mode 100644 index 0000000..e1b9e2b Binary files /dev/null and b/template/public/assets/images/career/career_9.jpg differ diff --git a/template/public/assets/images/career/career_about_team.jpg b/template/public/assets/images/career/career_about_team.jpg new file mode 100644 index 0000000..126ee2e Binary files /dev/null and b/template/public/assets/images/career/career_about_team.jpg differ diff --git a/template/public/assets/images/career/career_download_app.png b/template/public/assets/images/career/career_download_app.png new file mode 100644 index 0000000..c1fffae Binary files /dev/null and b/template/public/assets/images/career/career_download_app.png differ diff --git a/template/public/assets/images/career/career_newsletter.jpg b/template/public/assets/images/career/career_newsletter.jpg new file mode 100644 index 0000000..a29c94d Binary files /dev/null and b/template/public/assets/images/career/career_newsletter.jpg differ diff --git a/template/public/assets/images/career/career_post_01.jpg b/template/public/assets/images/career/career_post_01.jpg new file mode 100644 index 0000000..bbe39dc Binary files /dev/null and b/template/public/assets/images/career/career_post_01.jpg differ diff --git a/template/public/assets/images/career/career_post_02.jpg b/template/public/assets/images/career/career_post_02.jpg new file mode 100644 index 0000000..ca8940e Binary files /dev/null and b/template/public/assets/images/career/career_post_02.jpg differ diff --git a/template/public/assets/images/career/career_post_hero.jpg b/template/public/assets/images/career/career_post_hero.jpg new file mode 100644 index 0000000..749bcc7 Binary files /dev/null and b/template/public/assets/images/career/career_post_hero.jpg differ diff --git a/template/public/assets/images/company/company_1.png b/template/public/assets/images/company/company_1.png new file mode 100644 index 0000000..72c1e00 Binary files /dev/null and b/template/public/assets/images/company/company_1.png differ diff --git a/template/public/assets/images/company/company_10.png b/template/public/assets/images/company/company_10.png new file mode 100644 index 0000000..e79a41e Binary files /dev/null and b/template/public/assets/images/company/company_10.png differ diff --git a/template/public/assets/images/company/company_11.png b/template/public/assets/images/company/company_11.png new file mode 100644 index 0000000..1d6593a Binary files /dev/null and b/template/public/assets/images/company/company_11.png differ diff --git a/template/public/assets/images/company/company_12.png b/template/public/assets/images/company/company_12.png new file mode 100644 index 0000000..be48cd2 Binary files /dev/null and b/template/public/assets/images/company/company_12.png differ diff --git a/template/public/assets/images/company/company_2.png b/template/public/assets/images/company/company_2.png new file mode 100644 index 0000000..e57e90c Binary files /dev/null and b/template/public/assets/images/company/company_2.png differ diff --git a/template/public/assets/images/company/company_3.png b/template/public/assets/images/company/company_3.png new file mode 100644 index 0000000..6109402 Binary files /dev/null and b/template/public/assets/images/company/company_3.png differ diff --git a/template/public/assets/images/company/company_4.png b/template/public/assets/images/company/company_4.png new file mode 100644 index 0000000..4a3113a Binary files /dev/null and b/template/public/assets/images/company/company_4.png differ diff --git a/template/public/assets/images/company/company_5.png b/template/public/assets/images/company/company_5.png new file mode 100644 index 0000000..65f395d Binary files /dev/null and b/template/public/assets/images/company/company_5.png differ diff --git a/template/public/assets/images/company/company_6.png b/template/public/assets/images/company/company_6.png new file mode 100644 index 0000000..f8b7518 Binary files /dev/null and b/template/public/assets/images/company/company_6.png differ diff --git a/template/public/assets/images/company/company_7.png b/template/public/assets/images/company/company_7.png new file mode 100644 index 0000000..591e32e Binary files /dev/null and b/template/public/assets/images/company/company_7.png differ diff --git a/template/public/assets/images/company/company_8.png b/template/public/assets/images/company/company_8.png new file mode 100644 index 0000000..b5033d0 Binary files /dev/null and b/template/public/assets/images/company/company_8.png differ diff --git a/template/public/assets/images/company/company_9.png b/template/public/assets/images/company/company_9.png new file mode 100644 index 0000000..a7c4326 Binary files /dev/null and b/template/public/assets/images/company/company_9.png differ diff --git a/template/public/assets/images/course/course_1.jpg b/template/public/assets/images/course/course_1.jpg new file mode 100644 index 0000000..5a7e626 Binary files /dev/null and b/template/public/assets/images/course/course_1.jpg differ diff --git a/template/public/assets/images/course/course_10.jpg b/template/public/assets/images/course/course_10.jpg new file mode 100644 index 0000000..5cc1e4e Binary files /dev/null and b/template/public/assets/images/course/course_10.jpg differ diff --git a/template/public/assets/images/course/course_11.jpg b/template/public/assets/images/course/course_11.jpg new file mode 100644 index 0000000..f241a4e Binary files /dev/null and b/template/public/assets/images/course/course_11.jpg differ diff --git a/template/public/assets/images/course/course_12.jpg b/template/public/assets/images/course/course_12.jpg new file mode 100644 index 0000000..d9b64c3 Binary files /dev/null and b/template/public/assets/images/course/course_12.jpg differ diff --git a/template/public/assets/images/course/course_2.jpg b/template/public/assets/images/course/course_2.jpg new file mode 100644 index 0000000..322610d Binary files /dev/null and b/template/public/assets/images/course/course_2.jpg differ diff --git a/template/public/assets/images/course/course_3.jpg b/template/public/assets/images/course/course_3.jpg new file mode 100644 index 0000000..693155e Binary files /dev/null and b/template/public/assets/images/course/course_3.jpg differ diff --git a/template/public/assets/images/course/course_4.jpg b/template/public/assets/images/course/course_4.jpg new file mode 100644 index 0000000..bdb6a26 Binary files /dev/null and b/template/public/assets/images/course/course_4.jpg differ diff --git a/template/public/assets/images/course/course_5.jpg b/template/public/assets/images/course/course_5.jpg new file mode 100644 index 0000000..f035d8d Binary files /dev/null and b/template/public/assets/images/course/course_5.jpg differ diff --git a/template/public/assets/images/course/course_6.jpg b/template/public/assets/images/course/course_6.jpg new file mode 100644 index 0000000..cb012a3 Binary files /dev/null and b/template/public/assets/images/course/course_6.jpg differ diff --git a/template/public/assets/images/course/course_7.jpg b/template/public/assets/images/course/course_7.jpg new file mode 100644 index 0000000..87a405c Binary files /dev/null and b/template/public/assets/images/course/course_7.jpg differ diff --git a/template/public/assets/images/course/course_8.jpg b/template/public/assets/images/course/course_8.jpg new file mode 100644 index 0000000..0239f55 Binary files /dev/null and b/template/public/assets/images/course/course_8.jpg differ diff --git a/template/public/assets/images/course/course_9.jpg b/template/public/assets/images/course/course_9.jpg new file mode 100644 index 0000000..853d953 Binary files /dev/null and b/template/public/assets/images/course/course_9.jpg differ diff --git a/template/public/assets/images/course/course_about.jpg b/template/public/assets/images/course/course_about.jpg new file mode 100644 index 0000000..f58d0aa Binary files /dev/null and b/template/public/assets/images/course/course_about.jpg differ diff --git a/template/public/assets/images/course/course_download_app.png b/template/public/assets/images/course/course_download_app.png new file mode 100644 index 0000000..7cbc36d Binary files /dev/null and b/template/public/assets/images/course/course_download_app.png differ diff --git a/template/public/assets/images/course/course_post_01.jpg b/template/public/assets/images/course/course_post_01.jpg new file mode 100644 index 0000000..78171d0 Binary files /dev/null and b/template/public/assets/images/course/course_post_01.jpg differ diff --git a/template/public/assets/images/course/course_post_02.jpg b/template/public/assets/images/course/course_post_02.jpg new file mode 100644 index 0000000..2a6d661 Binary files /dev/null and b/template/public/assets/images/course/course_post_02.jpg differ diff --git a/template/public/assets/images/course/course_post_hero.jpg b/template/public/assets/images/course/course_post_hero.jpg new file mode 100644 index 0000000..4f02649 Binary files /dev/null and b/template/public/assets/images/course/course_post_hero.jpg differ diff --git a/template/public/assets/images/course/course_teacher_hero.png b/template/public/assets/images/course/course_teacher_hero.png new file mode 100644 index 0000000..a77ec10 Binary files /dev/null and b/template/public/assets/images/course/course_teacher_hero.png differ diff --git a/template/public/assets/images/cover/cover_1.jpg b/template/public/assets/images/cover/cover_1.jpg new file mode 100644 index 0000000..768b45c Binary files /dev/null and b/template/public/assets/images/cover/cover_1.jpg differ diff --git a/template/public/assets/images/cover/cover_10.jpg b/template/public/assets/images/cover/cover_10.jpg new file mode 100644 index 0000000..77b2c47 Binary files /dev/null and b/template/public/assets/images/cover/cover_10.jpg differ diff --git a/template/public/assets/images/cover/cover_11.jpg b/template/public/assets/images/cover/cover_11.jpg new file mode 100644 index 0000000..4279cab Binary files /dev/null and b/template/public/assets/images/cover/cover_11.jpg differ diff --git a/template/public/assets/images/cover/cover_12.jpg b/template/public/assets/images/cover/cover_12.jpg new file mode 100644 index 0000000..3bd7329 Binary files /dev/null and b/template/public/assets/images/cover/cover_12.jpg differ diff --git a/template/public/assets/images/cover/cover_13.jpg b/template/public/assets/images/cover/cover_13.jpg new file mode 100644 index 0000000..73217e2 Binary files /dev/null and b/template/public/assets/images/cover/cover_13.jpg differ diff --git a/template/public/assets/images/cover/cover_14.jpg b/template/public/assets/images/cover/cover_14.jpg new file mode 100644 index 0000000..866373b Binary files /dev/null and b/template/public/assets/images/cover/cover_14.jpg differ diff --git a/template/public/assets/images/cover/cover_15.jpg b/template/public/assets/images/cover/cover_15.jpg new file mode 100644 index 0000000..121be9a Binary files /dev/null and b/template/public/assets/images/cover/cover_15.jpg differ diff --git a/template/public/assets/images/cover/cover_16.jpg b/template/public/assets/images/cover/cover_16.jpg new file mode 100644 index 0000000..bbb2e16 Binary files /dev/null and b/template/public/assets/images/cover/cover_16.jpg differ diff --git a/template/public/assets/images/cover/cover_17.jpg b/template/public/assets/images/cover/cover_17.jpg new file mode 100644 index 0000000..3566e3c Binary files /dev/null and b/template/public/assets/images/cover/cover_17.jpg differ diff --git a/template/public/assets/images/cover/cover_18.jpg b/template/public/assets/images/cover/cover_18.jpg new file mode 100644 index 0000000..71cfc54 Binary files /dev/null and b/template/public/assets/images/cover/cover_18.jpg differ diff --git a/template/public/assets/images/cover/cover_19.jpg b/template/public/assets/images/cover/cover_19.jpg new file mode 100644 index 0000000..f4b62be Binary files /dev/null and b/template/public/assets/images/cover/cover_19.jpg differ diff --git a/template/public/assets/images/cover/cover_2.jpg b/template/public/assets/images/cover/cover_2.jpg new file mode 100644 index 0000000..37c637f Binary files /dev/null and b/template/public/assets/images/cover/cover_2.jpg differ diff --git a/template/public/assets/images/cover/cover_20.jpg b/template/public/assets/images/cover/cover_20.jpg new file mode 100644 index 0000000..a5ee5d8 Binary files /dev/null and b/template/public/assets/images/cover/cover_20.jpg differ diff --git a/template/public/assets/images/cover/cover_21.jpg b/template/public/assets/images/cover/cover_21.jpg new file mode 100644 index 0000000..6eaaeda Binary files /dev/null and b/template/public/assets/images/cover/cover_21.jpg differ diff --git a/template/public/assets/images/cover/cover_22.jpg b/template/public/assets/images/cover/cover_22.jpg new file mode 100644 index 0000000..786e649 Binary files /dev/null and b/template/public/assets/images/cover/cover_22.jpg differ diff --git a/template/public/assets/images/cover/cover_23.jpg b/template/public/assets/images/cover/cover_23.jpg new file mode 100644 index 0000000..ec6572d Binary files /dev/null and b/template/public/assets/images/cover/cover_23.jpg differ diff --git a/template/public/assets/images/cover/cover_24.jpg b/template/public/assets/images/cover/cover_24.jpg new file mode 100644 index 0000000..f0347c0 Binary files /dev/null and b/template/public/assets/images/cover/cover_24.jpg differ diff --git a/template/public/assets/images/cover/cover_3.jpg b/template/public/assets/images/cover/cover_3.jpg new file mode 100644 index 0000000..93be1a4 Binary files /dev/null and b/template/public/assets/images/cover/cover_3.jpg differ diff --git a/template/public/assets/images/cover/cover_4.jpg b/template/public/assets/images/cover/cover_4.jpg new file mode 100644 index 0000000..774ed16 Binary files /dev/null and b/template/public/assets/images/cover/cover_4.jpg differ diff --git a/template/public/assets/images/cover/cover_5.jpg b/template/public/assets/images/cover/cover_5.jpg new file mode 100644 index 0000000..1657d6c Binary files /dev/null and b/template/public/assets/images/cover/cover_5.jpg differ diff --git a/template/public/assets/images/cover/cover_6.jpg b/template/public/assets/images/cover/cover_6.jpg new file mode 100644 index 0000000..29d2345 Binary files /dev/null and b/template/public/assets/images/cover/cover_6.jpg differ diff --git a/template/public/assets/images/cover/cover_7.jpg b/template/public/assets/images/cover/cover_7.jpg new file mode 100644 index 0000000..4bedf71 Binary files /dev/null and b/template/public/assets/images/cover/cover_7.jpg differ diff --git a/template/public/assets/images/cover/cover_8.jpg b/template/public/assets/images/cover/cover_8.jpg new file mode 100644 index 0000000..31d53bc Binary files /dev/null and b/template/public/assets/images/cover/cover_8.jpg differ diff --git a/template/public/assets/images/cover/cover_9.jpg b/template/public/assets/images/cover/cover_9.jpg new file mode 100644 index 0000000..444276b Binary files /dev/null and b/template/public/assets/images/cover/cover_9.jpg differ diff --git a/template/public/assets/images/home/advertisement.jpg b/template/public/assets/images/home/advertisement.jpg new file mode 100644 index 0000000..3d2807d Binary files /dev/null and b/template/public/assets/images/home/advertisement.jpg differ diff --git a/template/public/assets/images/home/for_designer.jpg b/template/public/assets/images/home/for_designer.jpg new file mode 100644 index 0000000..931c8ee Binary files /dev/null and b/template/public/assets/images/home/for_designer.jpg differ diff --git a/template/public/assets/images/home/home_hero.png b/template/public/assets/images/home/home_hero.png new file mode 100644 index 0000000..869d6dc Binary files /dev/null and b/template/public/assets/images/home/home_hero.png differ diff --git a/template/public/assets/images/home/minimal_dashboard.png b/template/public/assets/images/home/minimal_dashboard.png new file mode 100644 index 0000000..deed9c6 Binary files /dev/null and b/template/public/assets/images/home/minimal_dashboard.png differ diff --git a/template/public/assets/images/home/new_start.png b/template/public/assets/images/home/new_start.png new file mode 100644 index 0000000..ae558f1 Binary files /dev/null and b/template/public/assets/images/home/new_start.png differ diff --git a/template/public/assets/images/marketing/marketing_1.jpg b/template/public/assets/images/marketing/marketing_1.jpg new file mode 100644 index 0000000..b4ab11c Binary files /dev/null and b/template/public/assets/images/marketing/marketing_1.jpg differ diff --git a/template/public/assets/images/marketing/marketing_10.jpg b/template/public/assets/images/marketing/marketing_10.jpg new file mode 100644 index 0000000..d14a48e Binary files /dev/null and b/template/public/assets/images/marketing/marketing_10.jpg differ diff --git a/template/public/assets/images/marketing/marketing_11.jpg b/template/public/assets/images/marketing/marketing_11.jpg new file mode 100644 index 0000000..fa4dea0 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_11.jpg differ diff --git a/template/public/assets/images/marketing/marketing_12.jpg b/template/public/assets/images/marketing/marketing_12.jpg new file mode 100644 index 0000000..5b61756 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_12.jpg differ diff --git a/template/public/assets/images/marketing/marketing_2.jpg b/template/public/assets/images/marketing/marketing_2.jpg new file mode 100644 index 0000000..77fddb9 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_2.jpg differ diff --git a/template/public/assets/images/marketing/marketing_3.jpg b/template/public/assets/images/marketing/marketing_3.jpg new file mode 100644 index 0000000..883372f Binary files /dev/null and b/template/public/assets/images/marketing/marketing_3.jpg differ diff --git a/template/public/assets/images/marketing/marketing_4.jpg b/template/public/assets/images/marketing/marketing_4.jpg new file mode 100644 index 0000000..a4487cf Binary files /dev/null and b/template/public/assets/images/marketing/marketing_4.jpg differ diff --git a/template/public/assets/images/marketing/marketing_5.jpg b/template/public/assets/images/marketing/marketing_5.jpg new file mode 100644 index 0000000..c717e37 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_5.jpg differ diff --git a/template/public/assets/images/marketing/marketing_6.jpg b/template/public/assets/images/marketing/marketing_6.jpg new file mode 100644 index 0000000..4f4bdc0 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_6.jpg differ diff --git a/template/public/assets/images/marketing/marketing_7.jpg b/template/public/assets/images/marketing/marketing_7.jpg new file mode 100644 index 0000000..9f637a3 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_7.jpg differ diff --git a/template/public/assets/images/marketing/marketing_8.jpg b/template/public/assets/images/marketing/marketing_8.jpg new file mode 100644 index 0000000..0cbd21d Binary files /dev/null and b/template/public/assets/images/marketing/marketing_8.jpg differ diff --git a/template/public/assets/images/marketing/marketing_9.jpg b/template/public/assets/images/marketing/marketing_9.jpg new file mode 100644 index 0000000..8301a18 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_9.jpg differ diff --git a/template/public/assets/images/marketing/marketing_get_free_seo.jpg b/template/public/assets/images/marketing/marketing_get_free_seo.jpg new file mode 100644 index 0000000..f6f6f40 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_get_free_seo.jpg differ diff --git a/template/public/assets/images/marketing/marketing_post_01.jpg b/template/public/assets/images/marketing/marketing_post_01.jpg new file mode 100644 index 0000000..5de7fc3 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_post_01.jpg differ diff --git a/template/public/assets/images/marketing/marketing_post_02.jpg b/template/public/assets/images/marketing/marketing_post_02.jpg new file mode 100644 index 0000000..1ab453d Binary files /dev/null and b/template/public/assets/images/marketing/marketing_post_02.jpg differ diff --git a/template/public/assets/images/marketing/marketing_post_hero.jpg b/template/public/assets/images/marketing/marketing_post_hero.jpg new file mode 100644 index 0000000..45625c9 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_post_hero.jpg differ diff --git a/template/public/assets/images/marketing/marketing_services_hero.jpg b/template/public/assets/images/marketing/marketing_services_hero.jpg new file mode 100644 index 0000000..3e12dd0 Binary files /dev/null and b/template/public/assets/images/marketing/marketing_services_hero.jpg differ diff --git a/template/public/assets/images/menu/menu_career.jpg b/template/public/assets/images/menu/menu_career.jpg new file mode 100644 index 0000000..2e35716 Binary files /dev/null and b/template/public/assets/images/menu/menu_career.jpg differ diff --git a/template/public/assets/images/menu/menu_ecommerce.jpg b/template/public/assets/images/menu/menu_ecommerce.jpg new file mode 100644 index 0000000..10feeaf Binary files /dev/null and b/template/public/assets/images/menu/menu_ecommerce.jpg differ diff --git a/template/public/assets/images/menu/menu_elearning.jpg b/template/public/assets/images/menu/menu_elearning.jpg new file mode 100644 index 0000000..1c6a760 Binary files /dev/null and b/template/public/assets/images/menu/menu_elearning.jpg differ diff --git a/template/public/assets/images/menu/menu_marketing.jpg b/template/public/assets/images/menu/menu_marketing.jpg new file mode 100644 index 0000000..46709d1 Binary files /dev/null and b/template/public/assets/images/menu/menu_marketing.jpg differ diff --git a/template/public/assets/images/menu/menu_travel.jpg b/template/public/assets/images/menu/menu_travel.jpg new file mode 100644 index 0000000..249764e Binary files /dev/null and b/template/public/assets/images/menu/menu_travel.jpg differ diff --git a/template/public/assets/images/portrait/portrait_1.jpg b/template/public/assets/images/portrait/portrait_1.jpg new file mode 100644 index 0000000..e6388d0 Binary files /dev/null and b/template/public/assets/images/portrait/portrait_1.jpg differ diff --git a/template/public/assets/images/portrait/portrait_2.jpg b/template/public/assets/images/portrait/portrait_2.jpg new file mode 100644 index 0000000..36c8410 Binary files /dev/null and b/template/public/assets/images/portrait/portrait_2.jpg differ diff --git a/template/public/assets/images/portrait/portrait_3.jpg b/template/public/assets/images/portrait/portrait_3.jpg new file mode 100644 index 0000000..af6b2ad Binary files /dev/null and b/template/public/assets/images/portrait/portrait_3.jpg differ diff --git a/template/public/assets/images/portrait/portrait_4.jpg b/template/public/assets/images/portrait/portrait_4.jpg new file mode 100644 index 0000000..2718adf Binary files /dev/null and b/template/public/assets/images/portrait/portrait_4.jpg differ diff --git a/template/public/assets/images/portrait/portrait_5.jpg b/template/public/assets/images/portrait/portrait_5.jpg new file mode 100644 index 0000000..6548d10 Binary files /dev/null and b/template/public/assets/images/portrait/portrait_5.jpg differ diff --git a/template/public/assets/images/portrait/portrait_6.jpg b/template/public/assets/images/portrait/portrait_6.jpg new file mode 100644 index 0000000..f15b85b Binary files /dev/null and b/template/public/assets/images/portrait/portrait_6.jpg differ diff --git a/template/public/assets/images/portrait/portrait_7.jpg b/template/public/assets/images/portrait/portrait_7.jpg new file mode 100644 index 0000000..af2ddc7 Binary files /dev/null and b/template/public/assets/images/portrait/portrait_7.jpg differ diff --git a/template/public/assets/images/portrait/portrait_8.jpg b/template/public/assets/images/portrait/portrait_8.jpg new file mode 100644 index 0000000..b3b31da Binary files /dev/null and b/template/public/assets/images/portrait/portrait_8.jpg differ diff --git a/template/public/assets/images/travel/travel_1.jpg b/template/public/assets/images/travel/travel_1.jpg new file mode 100644 index 0000000..58bf2b5 Binary files /dev/null and b/template/public/assets/images/travel/travel_1.jpg differ diff --git a/template/public/assets/images/travel/travel_10.jpg b/template/public/assets/images/travel/travel_10.jpg new file mode 100644 index 0000000..c502466 Binary files /dev/null and b/template/public/assets/images/travel/travel_10.jpg differ diff --git a/template/public/assets/images/travel/travel_11.jpg b/template/public/assets/images/travel/travel_11.jpg new file mode 100644 index 0000000..3ebb9bf Binary files /dev/null and b/template/public/assets/images/travel/travel_11.jpg differ diff --git a/template/public/assets/images/travel/travel_12.jpg b/template/public/assets/images/travel/travel_12.jpg new file mode 100644 index 0000000..7880947 Binary files /dev/null and b/template/public/assets/images/travel/travel_12.jpg differ diff --git a/template/public/assets/images/travel/travel_13.jpg b/template/public/assets/images/travel/travel_13.jpg new file mode 100644 index 0000000..59c6ae5 Binary files /dev/null and b/template/public/assets/images/travel/travel_13.jpg differ diff --git a/template/public/assets/images/travel/travel_14.jpg b/template/public/assets/images/travel/travel_14.jpg new file mode 100644 index 0000000..880d643 Binary files /dev/null and b/template/public/assets/images/travel/travel_14.jpg differ diff --git a/template/public/assets/images/travel/travel_15.jpg b/template/public/assets/images/travel/travel_15.jpg new file mode 100644 index 0000000..8b40486 Binary files /dev/null and b/template/public/assets/images/travel/travel_15.jpg differ diff --git a/template/public/assets/images/travel/travel_16.jpg b/template/public/assets/images/travel/travel_16.jpg new file mode 100644 index 0000000..3a354d0 Binary files /dev/null and b/template/public/assets/images/travel/travel_16.jpg differ diff --git a/template/public/assets/images/travel/travel_2.jpg b/template/public/assets/images/travel/travel_2.jpg new file mode 100644 index 0000000..23e8a0f Binary files /dev/null and b/template/public/assets/images/travel/travel_2.jpg differ diff --git a/template/public/assets/images/travel/travel_3.jpg b/template/public/assets/images/travel/travel_3.jpg new file mode 100644 index 0000000..9a93382 Binary files /dev/null and b/template/public/assets/images/travel/travel_3.jpg differ diff --git a/template/public/assets/images/travel/travel_4.jpg b/template/public/assets/images/travel/travel_4.jpg new file mode 100644 index 0000000..423524e Binary files /dev/null and b/template/public/assets/images/travel/travel_4.jpg differ diff --git a/template/public/assets/images/travel/travel_5.jpg b/template/public/assets/images/travel/travel_5.jpg new file mode 100644 index 0000000..9145573 Binary files /dev/null and b/template/public/assets/images/travel/travel_5.jpg differ diff --git a/template/public/assets/images/travel/travel_6.jpg b/template/public/assets/images/travel/travel_6.jpg new file mode 100644 index 0000000..9e494d0 Binary files /dev/null and b/template/public/assets/images/travel/travel_6.jpg differ diff --git a/template/public/assets/images/travel/travel_7.jpg b/template/public/assets/images/travel/travel_7.jpg new file mode 100644 index 0000000..bc6de92 Binary files /dev/null and b/template/public/assets/images/travel/travel_7.jpg differ diff --git a/template/public/assets/images/travel/travel_8.jpg b/template/public/assets/images/travel/travel_8.jpg new file mode 100644 index 0000000..0628798 Binary files /dev/null and b/template/public/assets/images/travel/travel_8.jpg differ diff --git a/template/public/assets/images/travel/travel_9.jpg b/template/public/assets/images/travel/travel_9.jpg new file mode 100644 index 0000000..0ed9269 Binary files /dev/null and b/template/public/assets/images/travel/travel_9.jpg differ diff --git a/template/public/assets/images/travel/travel_newsletter.jpg b/template/public/assets/images/travel/travel_newsletter.jpg new file mode 100644 index 0000000..afbfe26 Binary files /dev/null and b/template/public/assets/images/travel/travel_newsletter.jpg differ diff --git a/template/public/assets/images/travel/travel_post_01.jpg b/template/public/assets/images/travel/travel_post_01.jpg new file mode 100644 index 0000000..6b87a0e Binary files /dev/null and b/template/public/assets/images/travel/travel_post_01.jpg differ diff --git a/template/public/assets/images/travel/travel_post_02.jpg b/template/public/assets/images/travel/travel_post_02.jpg new file mode 100644 index 0000000..6fd1fa2 Binary files /dev/null and b/template/public/assets/images/travel/travel_post_02.jpg differ diff --git a/template/public/assets/images/travel/travel_post_03.jpg b/template/public/assets/images/travel/travel_post_03.jpg new file mode 100644 index 0000000..faeb1a1 Binary files /dev/null and b/template/public/assets/images/travel/travel_post_03.jpg differ diff --git a/template/public/assets/images/travel/travel_post_04.jpg b/template/public/assets/images/travel/travel_post_04.jpg new file mode 100644 index 0000000..7dd51ee Binary files /dev/null and b/template/public/assets/images/travel/travel_post_04.jpg differ diff --git a/template/public/assets/images/travel/travel_post_hero.jpg b/template/public/assets/images/travel/travel_post_hero.jpg new file mode 100644 index 0000000..dfe7301 Binary files /dev/null and b/template/public/assets/images/travel/travel_post_hero.jpg differ diff --git a/template/public/assets/images/travel/travel_testimonial.png b/template/public/assets/images/travel/travel_testimonial.png new file mode 100644 index 0000000..bbd9d67 Binary files /dev/null and b/template/public/assets/images/travel/travel_testimonial.png differ diff --git a/template/public/assets/images/z_product/product_1.png b/template/public/assets/images/z_product/product_1.png new file mode 100644 index 0000000..376e364 Binary files /dev/null and b/template/public/assets/images/z_product/product_1.png differ diff --git a/template/public/assets/images/z_product/product_10.png b/template/public/assets/images/z_product/product_10.png new file mode 100644 index 0000000..711e088 Binary files /dev/null and b/template/public/assets/images/z_product/product_10.png differ diff --git a/template/public/assets/images/z_product/product_11.png b/template/public/assets/images/z_product/product_11.png new file mode 100644 index 0000000..7a22412 Binary files /dev/null and b/template/public/assets/images/z_product/product_11.png differ diff --git a/template/public/assets/images/z_product/product_12.png b/template/public/assets/images/z_product/product_12.png new file mode 100644 index 0000000..3aa3127 Binary files /dev/null and b/template/public/assets/images/z_product/product_12.png differ diff --git a/template/public/assets/images/z_product/product_13.png b/template/public/assets/images/z_product/product_13.png new file mode 100644 index 0000000..c874b07 Binary files /dev/null and b/template/public/assets/images/z_product/product_13.png differ diff --git a/template/public/assets/images/z_product/product_14.png b/template/public/assets/images/z_product/product_14.png new file mode 100644 index 0000000..a61cbd6 Binary files /dev/null and b/template/public/assets/images/z_product/product_14.png differ diff --git a/template/public/assets/images/z_product/product_15.png b/template/public/assets/images/z_product/product_15.png new file mode 100644 index 0000000..2671408 Binary files /dev/null and b/template/public/assets/images/z_product/product_15.png differ diff --git a/template/public/assets/images/z_product/product_16.png b/template/public/assets/images/z_product/product_16.png new file mode 100644 index 0000000..6e32409 Binary files /dev/null and b/template/public/assets/images/z_product/product_16.png differ diff --git a/template/public/assets/images/z_product/product_17.png b/template/public/assets/images/z_product/product_17.png new file mode 100644 index 0000000..e301e57 Binary files /dev/null and b/template/public/assets/images/z_product/product_17.png differ diff --git a/template/public/assets/images/z_product/product_18.png b/template/public/assets/images/z_product/product_18.png new file mode 100644 index 0000000..0da0752 Binary files /dev/null and b/template/public/assets/images/z_product/product_18.png differ diff --git a/template/public/assets/images/z_product/product_19.png b/template/public/assets/images/z_product/product_19.png new file mode 100644 index 0000000..023bb54 Binary files /dev/null and b/template/public/assets/images/z_product/product_19.png differ diff --git a/template/public/assets/images/z_product/product_2.png b/template/public/assets/images/z_product/product_2.png new file mode 100644 index 0000000..ee17068 Binary files /dev/null and b/template/public/assets/images/z_product/product_2.png differ diff --git a/template/public/assets/images/z_product/product_20.png b/template/public/assets/images/z_product/product_20.png new file mode 100644 index 0000000..9dde472 Binary files /dev/null and b/template/public/assets/images/z_product/product_20.png differ diff --git a/template/public/assets/images/z_product/product_21.png b/template/public/assets/images/z_product/product_21.png new file mode 100644 index 0000000..e6576f2 Binary files /dev/null and b/template/public/assets/images/z_product/product_21.png differ diff --git a/template/public/assets/images/z_product/product_22.png b/template/public/assets/images/z_product/product_22.png new file mode 100644 index 0000000..51bdfa1 Binary files /dev/null and b/template/public/assets/images/z_product/product_22.png differ diff --git a/template/public/assets/images/z_product/product_23.png b/template/public/assets/images/z_product/product_23.png new file mode 100644 index 0000000..e62ebc0 Binary files /dev/null and b/template/public/assets/images/z_product/product_23.png differ diff --git a/template/public/assets/images/z_product/product_24.png b/template/public/assets/images/z_product/product_24.png new file mode 100644 index 0000000..4d02903 Binary files /dev/null and b/template/public/assets/images/z_product/product_24.png differ diff --git a/template/public/assets/images/z_product/product_3.png b/template/public/assets/images/z_product/product_3.png new file mode 100644 index 0000000..fb8ab13 Binary files /dev/null and b/template/public/assets/images/z_product/product_3.png differ diff --git a/template/public/assets/images/z_product/product_4.png b/template/public/assets/images/z_product/product_4.png new file mode 100644 index 0000000..411ee94 Binary files /dev/null and b/template/public/assets/images/z_product/product_4.png differ diff --git a/template/public/assets/images/z_product/product_5.png b/template/public/assets/images/z_product/product_5.png new file mode 100644 index 0000000..534d204 Binary files /dev/null and b/template/public/assets/images/z_product/product_5.png differ diff --git a/template/public/assets/images/z_product/product_6.png b/template/public/assets/images/z_product/product_6.png new file mode 100644 index 0000000..0cc7dbe Binary files /dev/null and b/template/public/assets/images/z_product/product_6.png differ diff --git a/template/public/assets/images/z_product/product_7.png b/template/public/assets/images/z_product/product_7.png new file mode 100644 index 0000000..f571f99 Binary files /dev/null and b/template/public/assets/images/z_product/product_7.png differ diff --git a/template/public/assets/images/z_product/product_8.png b/template/public/assets/images/z_product/product_8.png new file mode 100644 index 0000000..ac1b003 Binary files /dev/null and b/template/public/assets/images/z_product/product_8.png differ diff --git a/template/public/assets/images/z_product/product_9.png b/template/public/assets/images/z_product/product_9.png new file mode 100644 index 0000000..70e0c26 Binary files /dev/null and b/template/public/assets/images/z_product/product_9.png differ diff --git a/template/public/assets/logo/airbnb.svg b/template/public/assets/logo/airbnb.svg new file mode 100644 index 0000000..f58a5dd --- /dev/null +++ b/template/public/assets/logo/airbnb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/airbnb_original.svg b/template/public/assets/logo/airbnb_original.svg new file mode 100644 index 0000000..ceec763 --- /dev/null +++ b/template/public/assets/logo/airbnb_original.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/logo/dropbox.svg b/template/public/assets/logo/dropbox.svg new file mode 100644 index 0000000..f34dfb1 --- /dev/null +++ b/template/public/assets/logo/dropbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/dropbox_original.svg b/template/public/assets/logo/dropbox_original.svg new file mode 100644 index 0000000..603e8b0 --- /dev/null +++ b/template/public/assets/logo/dropbox_original.svg @@ -0,0 +1,4 @@ + + + + diff --git a/template/public/assets/logo/facebook.svg b/template/public/assets/logo/facebook.svg new file mode 100644 index 0000000..02f63c2 --- /dev/null +++ b/template/public/assets/logo/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/facebook_original.svg b/template/public/assets/logo/facebook_original.svg new file mode 100644 index 0000000..3544ab5 --- /dev/null +++ b/template/public/assets/logo/facebook_original.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/logo/google.svg b/template/public/assets/logo/google.svg new file mode 100644 index 0000000..0219c7c --- /dev/null +++ b/template/public/assets/logo/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/google_original.svg b/template/public/assets/logo/google_original.svg new file mode 100644 index 0000000..366dfae --- /dev/null +++ b/template/public/assets/logo/google_original.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/template/public/assets/logo/heroku.svg b/template/public/assets/logo/heroku.svg new file mode 100644 index 0000000..50c03ce --- /dev/null +++ b/template/public/assets/logo/heroku.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/heroku_original.svg b/template/public/assets/logo/heroku_original.svg new file mode 100644 index 0000000..cdc57e6 --- /dev/null +++ b/template/public/assets/logo/heroku_original.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/logo/lenovo.svg b/template/public/assets/logo/lenovo.svg new file mode 100644 index 0000000..9132e57 --- /dev/null +++ b/template/public/assets/logo/lenovo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/lenovo_original.svg b/template/public/assets/logo/lenovo_original.svg new file mode 100644 index 0000000..4292072 --- /dev/null +++ b/template/public/assets/logo/lenovo_original.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/logo/microsoft.svg b/template/public/assets/logo/microsoft.svg new file mode 100644 index 0000000..67e599a --- /dev/null +++ b/template/public/assets/logo/microsoft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/microsoft_original.svg b/template/public/assets/logo/microsoft_original.svg new file mode 100644 index 0000000..34ffe28 --- /dev/null +++ b/template/public/assets/logo/microsoft_original.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/template/public/assets/logo/netflix.svg b/template/public/assets/logo/netflix.svg new file mode 100644 index 0000000..4292234 --- /dev/null +++ b/template/public/assets/logo/netflix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/netflix_original.svg b/template/public/assets/logo/netflix_original.svg new file mode 100644 index 0000000..ade4931 --- /dev/null +++ b/template/public/assets/logo/netflix_original.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/logo/slack.svg b/template/public/assets/logo/slack.svg new file mode 100644 index 0000000..913439e --- /dev/null +++ b/template/public/assets/logo/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/slack_original.svg b/template/public/assets/logo/slack_original.svg new file mode 100644 index 0000000..5896c7e --- /dev/null +++ b/template/public/assets/logo/slack_original.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/template/public/assets/logo/spotify.svg b/template/public/assets/logo/spotify.svg new file mode 100644 index 0000000..0a506bb --- /dev/null +++ b/template/public/assets/logo/spotify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/spotify_original.svg b/template/public/assets/logo/spotify_original.svg new file mode 100644 index 0000000..d1e176a --- /dev/null +++ b/template/public/assets/logo/spotify_original.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/logo/tripadvisor.svg b/template/public/assets/logo/tripadvisor.svg new file mode 100644 index 0000000..c9b8b49 --- /dev/null +++ b/template/public/assets/logo/tripadvisor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/tripadvisor_original.svg b/template/public/assets/logo/tripadvisor_original.svg new file mode 100644 index 0000000..29f59a1 --- /dev/null +++ b/template/public/assets/logo/tripadvisor_original.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/template/public/assets/logo/vimeo.svg b/template/public/assets/logo/vimeo.svg new file mode 100644 index 0000000..4967b56 --- /dev/null +++ b/template/public/assets/logo/vimeo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/logo/vimeo_original.svg b/template/public/assets/logo/vimeo_original.svg new file mode 100644 index 0000000..e19e15e --- /dev/null +++ b/template/public/assets/logo/vimeo_original.svg @@ -0,0 +1,3 @@ + + + diff --git a/template/public/assets/placeholder.svg b/template/public/assets/placeholder.svg new file mode 100644 index 0000000..011a73d --- /dev/null +++ b/template/public/assets/placeholder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/public/assets/red-blur.png b/template/public/assets/red-blur.png new file mode 100644 index 0000000..a0df012 Binary files /dev/null and b/template/public/assets/red-blur.png differ diff --git a/template/public/assets/transparent.png b/template/public/assets/transparent.png new file mode 100644 index 0000000..c953550 Binary files /dev/null and b/template/public/assets/transparent.png differ diff --git a/template/public/favicon/android-chrome-192x192.png b/template/public/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..2aeb86d Binary files /dev/null and b/template/public/favicon/android-chrome-192x192.png differ diff --git a/template/public/favicon/android-chrome-512x512.png b/template/public/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..0d42275 Binary files /dev/null and b/template/public/favicon/android-chrome-512x512.png differ diff --git a/template/public/favicon/apple-touch-icon.png b/template/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000..15fd808 Binary files /dev/null and b/template/public/favicon/apple-touch-icon.png differ diff --git a/template/public/favicon/favicon-16x16.png b/template/public/favicon/favicon-16x16.png new file mode 100644 index 0000000..a3fe160 Binary files /dev/null and b/template/public/favicon/favicon-16x16.png differ diff --git a/template/public/favicon/favicon-32x32.png b/template/public/favicon/favicon-32x32.png new file mode 100644 index 0000000..a31de4a Binary files /dev/null and b/template/public/favicon/favicon-32x32.png differ diff --git a/template/public/favicon/favicon.ico b/template/public/favicon/favicon.ico new file mode 100644 index 0000000..fef06be Binary files /dev/null and b/template/public/favicon/favicon.ico differ diff --git a/template/public/manifest.json b/template/public/manifest.json new file mode 100644 index 0000000..7e8821c --- /dev/null +++ b/template/public/manifest.json @@ -0,0 +1,20 @@ +{ + "name": "Zone UI", + "short_name": "Zone UI", + "display": "standalone", + "start_url": "/", + "theme_color": "#000000", + "background_color": "#ffffff", + "icons": [ + { + "src": "favicon/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "favicon/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/template/public/robots.txt b/template/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/template/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/template/src/_mock/_blog.js b/template/src/_mock/_blog.js new file mode 100644 index 0000000..037a004 --- /dev/null +++ b/template/src/_mock/_blog.js @@ -0,0 +1,104 @@ +import { _mock } from './_mock'; +import { _tags } from './assets'; + +// ---------------------------------------------------------------------- + +const content = (name) => ` +

Pellentesque posuere. Phasellus a est. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc.

+
+ +

Pellentesque posuere. Phasellus a est. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Phasellus viverra nulla ut metus varius laoreet. Praesent egestas tristique nibh. Donec posuere vulputate arcu. Quisque rutrum.

+
+ +

Donec posuere vulputate arcu. Quisque rutrum. Curabitur vestibulum aliquam leo. Nam commodo suscipit quam. Vestibulum ullamcorper mauris at ligula.

+
+ +

Pellentesque posuere. Phasellus a est. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Phasellus viverra nulla ut metus varius laoreet. Praesent egestas tristique nibh.

+ +
+
+
+

alt marketing

+
+
+
+ +

Curabitur suscipit suscipit tellus

+
+ +

Donec posuere vulputate arcu. Quisque rutrum. Curabitur vestibulum aliquam leo. Nam commodo suscipit quam. Vestibulum ullamcorper mauris at ligula.

+
+ +

Nullam accumsan lorem in

+
+ +

Donec posuere vulputate arcu. Quisque rutrum. Curabitur vestibulum aliquam leo. Nam commodo suscipit quam. Vestibulum ullamcorper mauris at ligula.

+
+ +

Donec posuere vulputate arcu. Quisque rutrum. Curabitur vestibulum aliquam leo.

+ +
+
+
+

alt marketing

+
+
+
+ +

Donec posuere vulputate arcu. Quisque rutrum. Curabitur vestibulum aliquam leo. Nam commodo suscipit quam. Vestibulum ullamcorper mauris at ligula.

+
+ +

Pellentesque posuere. Phasellus a est. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Phasellus viverra nulla ut metus varius laoreet. Praesent egestas tristique nibh.

+
+ +

Donec posuere vulputate arcu. Quisque rutrum. Curabitur vestibulum aliquam leo. Nam commodo suscipit quam. Vestibulum ullamcorper mauris at ligula.

+`; + +const base = (index) => ({ + id: _mock.id(index), + title: _mock.postTitle(index), + description: _mock.description(index), + category: 'Marketing', + favorited: _mock.boolean(index), + createdAt: _mock.time(index), + duration: '8 minutes read', + tags: _tags.slice(index + 1, index + 2), + author: { + name: _mock.fullName(index), + role: _mock.role(index), + avatarUrl: _mock.image.avatar(index), + quotes: 'Member since Mar 15, 2021', + about: + 'Integer tincidunt. Nullam dictum felis eu pede mollis pretium. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem.', + }, +}); + +// ---------------------------------------------------------------------- + +export const _marketingPosts = [...Array(12)].map((_, index) => ({ + ...base(index), + content: content('marketing'), + coverUrl: _mock.image.marketing(index), + heroUrl: `/assets/images/marketing/marketing_post_hero.jpg`, +})); + +export const _travelPosts = [...Array(12)].map((_, index) => ({ + ...base(index), + content: content('travel'), + coverUrl: _mock.image.travel(index), + heroUrl: `/assets/images/travel/travel_post_hero.jpg`, +})); + +export const _careerPosts = [...Array(12)].map((_, index) => ({ + ...base(index), + content: content('career'), + coverUrl: _mock.image.career(index), + heroUrl: `/assets/images/career/career_post_hero.jpg`, +})); + +export const _coursePosts = [...Array(12)].map((_, index) => ({ + ...base(index), + content: content('course'), + coverUrl: _mock.image.course(index), + heroUrl: `/assets/images/course/course_post_hero.jpg`, +})); diff --git a/template/src/_mock/_caseStudies.js b/template/src/_mock/_caseStudies.js new file mode 100644 index 0000000..b1a937e --- /dev/null +++ b/template/src/_mock/_caseStudies.js @@ -0,0 +1,77 @@ +import { _mock } from './_mock'; +import { _tags } from './assets'; + +// ---------------------------------------------------------------------- + +const TITLE = [ + 'Bank of America', + 'Technology Nixon', + 'Turn Key Smart', + 'Digital Shose', + 'Action Car', + 'The Zone UI', + 'Minimal UI', + 'Network Firefox', +]; + +const CONTENT = ` +

Project Brief

+
+

Nullam tincidunt adipiscing enim. Mauris sollicitudin fermentum libero. Pellentesque auctor neque nec urna. Sed fringilla mauris sit amet nibh. Phasellus viverra nulla ut metus varius laoreet.

+ +
+
+ +

How We Work

+
+

Nullam tincidunt adipiscing enim. Mauris sollicitudin fermentum libero. Pellentesque auctor neque nec urna. Sed fringilla mauris sit amet nibh. Phasellus viverra nulla ut metus varius laoreet.

+
+ + +
+
+

Results

+
+

Nullam tincidunt adipiscing enim. Mauris sollicitudin fermentum libero. Pellentesque auctor neque nec urna. Sed fringilla mauris sit amet nibh. Phasellus viverra nulla ut metus varius laoreet.

+ +`; + +export const _caseStudies = TITLE.map((_, index) => { + const galleryImgs = [ + _mock.image.marketing(0), + _mock.image.marketing(1), + _mock.image.marketing(2), + _mock.image.marketing(3), + _mock.image.marketing(4), + _mock.image.marketing(5), + ]; + + return { + id: _mock.id(index), + content: CONTENT, + title: TITLE[index], + category: _tags[index], + createdAt: _mock.time(index), + website: 'https://example.com/', + description: _mock.description(index), + heroUrl: '/assets/images/marketing/marketing_post_hero.jpg', + coverUrl: `/assets/images/marketing/marketing_${index + 1}.jpg`, + how_we_work: + 'Nullam tincidunt adipiscing enim. Mauris sollicitudin fermentum libero. Pellentesque auctor neque nec urna. Sed fringi', + results: + 'Nullam tincidunt adipiscing enim. Mauris sollicitudin fermentum libero. Pellentesque auctor neque nec urna. Sed fringi', + galleryImgs, + }; +}); diff --git a/template/src/_mock/_courses.js b/template/src/_mock/_courses.js new file mode 100644 index 0000000..ad1742d --- /dev/null +++ b/template/src/_mock/_courses.js @@ -0,0 +1,81 @@ +import { _mock } from './_mock'; +import { _tags } from './assets'; + +// ---------------------------------------------------------------------- + +const TEACHERS = [...Array(5)].map((_, index) => ({ + id: _mock.id(index), + role: _mock.role(index), + name: _mock.fullName(index), + avatarUrl: _mock.image.avatar(index), + totalCourses: 48, + totalReviews: 3458, + totalStudents: 18000, + ratingNumber: _mock.number.rating(index), +})); + +const LESSONS = [...Array(9)].map((_, index) => ({ + id: _mock.id(index), + duration: 60 - index, + title: `Lesson ${index + 1}`, + videoPath: _mock.video(index), + description: _mock.sentence(index), + unLocked: [0, 1, 2].includes(index), +})); + +export const _courses = [...Array(12)].map((_, index) => { + const languages = ['Russian', 'Spanish', 'English']; + + const skills = _tags.slice(0, 5); + + const level = + (index % 2 && 'Intermediate') || + (index % 4 && 'Expert') || + (index % 5 && 'All Levels') || + 'Beginner'; + + const learnList = [ + 'A fermentum in morbi pretium aliquam adipiscing donec tempus.', + 'Vulputate placerat amet pulvinar lorem nisl.', + 'Consequat feugiat habitant gravida quisque elit bibendum id adipiscing sed.', + 'Etiam duis lobortis in fames ultrices commodo nibh.', + 'Fusce neque. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit.', + 'Curabitur a felis in nunc fringilla tristique. Praesent congue erat at massa.', + ]; + + return { + id: _mock.id(index), + level, + skills, + languages, + learnList, + resources: 12, + totalHours: 100, + lessons: LESSONS, + totalQuizzes: 100, + totalReviews: 3458, + teachers: TEACHERS, + totalStudents: 180000, + createdAt: new Date(), + category: _tags[index], + slug: _mock.courseTitle(index), + bestSeller: index === 2 || false, + coverUrl: _mock.image.course(index), + ratingNumber: _mock.number.rating(index), + description: _mock.description(index), + price: (index % 2 && 159.99) || 269.99, + priceSale: (index === 2 && 89.99) || (index === 5 && 69.99) || 0, + shareLinks: { + facebook: `facebook/user-name`, + instagram: `instagram/user-name`, + linkedin: `linkedin/user-name`, + twitter: `twitter/user-name`, + }, + }; +}); + +export const _coursesByCategories = [...Array(9)].map((_, index) => ({ + id: _mock.id(index), + name: _tags[index], + totalStudents: _mock.number.nativeM(index), +})); diff --git a/template/src/_mock/_jobs.js b/template/src/_mock/_jobs.js new file mode 100644 index 0000000..8231002 --- /dev/null +++ b/template/src/_mock/_jobs.js @@ -0,0 +1,145 @@ +import { add } from 'date-fns'; + +import { countries } from 'src/assets/data'; + +import { _mock } from './_mock'; +import { _tags } from './assets'; + +// ---------------------------------------------------------------------- + +const CONTENT = ` +
Job Description
+
+

Occaecati est et illo quibusdam accusamus qui. Incidunt aut et molestiae ut facere aut. Est quidem iusto praesentium excepturi harum nihil tenetur facilis. Ut omnis voluptates nihil accusantium doloribus eaque debitis.

+ +
+
+ +
Key Responsibilities
+
+ + +
+
+ +
Why You'll Love Working Here
+
+ +`; + +export const JOB_BENEFIT_OPTIONS = [ + { value: 'Free parking', label: 'Free parking' }, + { value: 'Bonus commission', label: 'Bonus commission' }, + { value: 'Travel', label: 'Travel' }, + { value: 'Device support', label: 'Device support' }, + { value: 'Health care', label: 'Health care' }, + { value: 'Training', label: 'Training' }, + { value: 'Health Insurance', label: 'Health Insurance' }, + { value: 'Retirement Plans', label: 'Retirement Plans' }, + { value: 'Paid Time Off', label: 'Paid Time Off' }, + { value: 'Flexible Work Schedule', label: 'Flexible Work Schedule' }, +]; + +export const _jobs = [...Array(12)].map((_, index) => { + const benefits = JOB_BENEFIT_OPTIONS.slice(0, 3).map((option) => option.label); + + const type = (index % 2 && 'part time') || (index % 4 && 'freelance') || 'full time'; + + const level = (index % 2 && 'manager') || (index % 4 && 'intern/student') || 'No experience'; + + const location = countries.map((option) => option.label)[index + 1]; + + const languages = ['Russian', 'Spanish', 'English']; + + const skills = _tags.slice(0, 5); + + const company = { + name: _mock.companyName(index), + logo: _mock.image.company(index), + }; + + const locationMap = [ + { + address: _mock.fullAddress(index), + phoneNumber: _mock.phoneNumber(index), + email: _mock.email(index), + latlng: [33, 65], + }, + ]; + + return { + id: _mock.id(index), + type, + level, + skills, + company, + benefits, + location, + languages, + locationMap, + content: CONTENT, + createdAt: new Date(), + experience: index + 1, + category: _tags[index], + slug: _mock.jobTitle(index), + urgent: [1, 3].includes(index), + favorited: [2, 4].includes(index), + totalViews: _mock.number.nativeL(index), + deadline: add(new Date(), { months: index }), + salary: (index % 3 && 12000) || 'competitive', + shareLinks: { + facebook: `facebook/user-name`, + instagram: `instagram/user-name`, + linkedin: `linkedin/user-name`, + twitter: `twitter/user-name`, + }, + }; +}); + +export const _jobsByCompanies = [...Array(12)].map((_, index) => ({ + id: _mock.id(index), + name: _mock.companyName(index), + logo: _mock.image.company(index), + totalJobs: 101 + index, +})); + +const ICONS = [ + '/assets/icons/ic_money.svg', + '/assets/icons/ic_marketing_bullhorn.svg', + '/assets/icons/ic_creativity.svg', + '/assets/icons/ic_web_programming.svg', + '/assets/icons/ic_chip.svg', + '/assets/icons/ic_customer_service.svg', + '/assets/icons/ic_stethoscope.svg', + '/assets/icons/ic_banking.svg', +]; + +export const _jobsByCategories = [...Array(8)].map((_, index) => ({ + id: _mock.id(index), + icon: ICONS[index], + name: _mock.jobTitle(index), + totalJobs: _mock.number.nativeM(index), +})); + +export const _jobsByCountries = [...Array(12)].map((_, index) => ({ + id: _mock.id(index), + coverUrl: _mock.image.travel(index), + totalJobs: _mock.number.nativeM(index), + location: countries.map((option) => option.label)[index + 1], +})); diff --git a/template/src/_mock/_members.js b/template/src/_mock/_members.js new file mode 100644 index 0000000..e801906 --- /dev/null +++ b/template/src/_mock/_members.js @@ -0,0 +1,16 @@ +import { _mock } from './_mock'; + +// ---------------------------------------------------------------------- + +export const _members = [...Array(8)].map((_, index) => ({ + id: _mock.id(index), + role: _mock.role(index), + name: _mock.fullName(index), + photo: `/assets/images/portrait/portrait_${index + 1}.jpg`, + socialLinks: { + facebook: `facebook/${_mock.fullName(index)}`, + instagram: `instagram/${_mock.fullName(index)}`, + linkedin: `linkedin/${_mock.fullName(index)}`, + twitter: `twitter/${_mock.fullName(index)}`, + }, +})); diff --git a/template/src/_mock/_mock.js b/template/src/_mock/_mock.js new file mode 100644 index 0000000..da29f23 --- /dev/null +++ b/template/src/_mock/_mock.js @@ -0,0 +1,83 @@ +import { sub } from 'date-fns'; + +import { + _id, + _ages, + _roles, + _emails, + _prices, + _nativeL, + _nativeM, + _nativeS, + _ratings, + _booleans, + _percents, + _taskNames, + _jobTitles, + _tourNames, + _fullNames, + _lastNames, + _sentences, + _firstNames, + _postTitles, + _courseTitle, + _fullAddress, + _phoneNumbers, + _descriptions, + _productNames, + _companyNames, +} from './assets'; + +// ---------------------------------------------------------------------- + +export const _mock = { + id: (index) => _id[index], + time: (index) => sub(new Date(), { days: index, hours: index }), + boolean: (index) => _booleans[index], + role: (index) => _roles[index], + // Text + courseTitle: (index) => _courseTitle[index], + taskNames: (index) => _taskNames[index], + postTitle: (index) => _postTitles[index], + jobTitle: (index) => _jobTitles[index], + tourName: (index) => _tourNames[index], + productName: (index) => _productNames[index], + sentence: (index) => _sentences[index], + description: (index) => _descriptions[index], + // Contact + email: (index) => _emails[index], + phoneNumber: (index) => _phoneNumbers[index], + fullAddress: (index) => _fullAddress[index], + // Name + firstName: (index) => _firstNames[index], + lastName: (index) => _lastNames[index], + fullName: (index) => _fullNames[index], + companyName: (index) => _companyNames[index], + // Number + number: { + percent: (index) => _percents[index], + rating: (index) => _ratings[index], + age: (index) => _ages[index], + price: (index) => _prices[index], + nativeS: (index) => _nativeS[index], + nativeM: (index) => _nativeM[index], + nativeL: (index) => _nativeL[index], + }, + // Image + image: { + cover: (index) => `/assets/images/cover/cover_${index + 1}.jpg`, + avatar: (index) => `/assets/images/avatar/avatar_${index + 1}.jpg`, + travel: (index) => `/assets/images/travel/travel_${index + 1}.jpg`, + company: (index) => `/assets/images/company/company_${index + 1}.png`, + product: (index) => `/assets/images/z_product/product_${index + 1}.png`, + portrait: (index) => `/assets/images/portrait/portrait_${index + 1}.jpg`, + career: (index) => `/assets/images/career/career_${index + 1}.jpg`, + marketing: (index) => `/assets/images/marketing/marketing_${index + 1}.jpg`, + course: (index) => `/assets/images/course/course_${index + 1}.jpg`, + }, + video: (index) => + [ + `https://www.dropbox.com/s/odzycivuo9cy5rg/video_01.mp4?dl=0`, + `https://www.dropbox.com/s/7cx04n8rr4w5rbg/video_02.mp4?dl=0`, + ][index], +}; diff --git a/template/src/_mock/_others.js b/template/src/_mock/_others.js new file mode 100644 index 0000000..b5b0853 --- /dev/null +++ b/template/src/_mock/_others.js @@ -0,0 +1,133 @@ +import { _mock } from './_mock'; + +// ---------------------------------------------------------------------- + +export const _categories = [ + { label: 'Marketing', path: '' }, + { label: 'Community', path: '' }, + { label: 'Tutorials', path: '' }, + { label: 'Business', path: '' }, + { label: 'Management', path: '' }, +]; + +// ---------------------------------------------------------------------- + +export const _testimonials = [...Array(8)].map((_, index) => ({ + id: _mock.id(index), + name: _mock.fullName(index), + role: _mock.role(index), + avatarUrl: _mock.image.avatar(index), + createdAt: _mock.time(index), + ratingNumber: 5, + review: + 'Amazing experience i love it a lot. Thanks to the team that dreams come true, great! I appreciate there attitude and approach.', +})); + +// ---------------------------------------------------------------------- + +export const _socials = [ + { + value: 'facebook', + label: 'FaceBook', + icon: 'carbon:logo-facebook', + color: '#1877F2', + }, + { + value: 'instagram', + label: 'Instagram', + icon: 'carbon:logo-instagram', + color: '#E02D69', + }, + { + value: 'linkedin', + label: 'Linkedin', + icon: 'carbon:logo-linkedin', + color: '#007EBB', + }, + { + value: 'twitter', + label: 'Twitter', + icon: 'carbon:logo-twitter', + color: '#00AAEC', + }, +]; + +// ---------------------------------------------------------------------- + +const LAT_LONG = [ + [33, 65], + [-12.5, 18.5], + [20.96, 26.27], +]; + +export const _offices = ['Jordan', 'Canada', 'Portugal'].map((office, index) => ({ + id: _mock.id(index), + country: office, + address: _mock.fullAddress(index), + phoneNumber: _mock.phoneNumber(index), + email: _mock.email(index), + photo: _mock.image.travel(index + 4), + latlng: LAT_LONG[index], +})); + +// ---------------------------------------------------------------------- + +const BRANDS_NAME = [ + 'airbnb', + 'dropbox', + 'facebook', + 'google', + 'heroku', + 'lenovo', + 'microsoft', + 'netflix', + 'slack', + 'spotify', + 'tripadvisor', + 'vimeo', +]; + +export const _brands = BRANDS_NAME.map((brand, index) => ({ + id: _mock.id(index), + name: brand, + image: `/assets/logo/${brand}.svg`, +})); + +export const _brandsColor = BRANDS_NAME.map((brand, index) => ({ + id: _mock.id(index), + name: brand, + image: `/assets/logo/${brand}_original.svg`, +})); + +// ---------------------------------------------------------------------- + +export const _faqs = [ + 'Sed augue ipsum, egestas nec, vestibulum et', + 'alesuada adipiscing, dui vestibulum suscipit nulla quis orci.', + 'Ut varius tincidunt libero', + 'In ut quam vitae odio lacinia tincidunt.', + 'Fusce vel dui Morbi nec metus.', +].map((question, index) => ({ + id: _mock.id(index), + question, + answer: + 'Amazing experience i love it a lot. Thanks to the team that dreams come true, great! I appreciate there attitude and approach.', +})); + +export const _faqsSupport = [ + `[Covid] Seasonal Shopping Guide`, + 'I Want To Check Where My Order Is Delivered', + '[Shipping Information] How To Contact The Shipping Unit/Look Up Shipping Information/Delivery Exchange?', + '[Seller] Start Selling With Shopee', + 'Why Is My Account Locked/Limited?', + 'Free Shipping Code User Guide (Freeship Code)', + 'How To Buy / Order On Shopee App', + `Why I Didn't Receive the Verification Code (OTP)?`, + `Frequently Asked Questions About Product Reviews / Comments`, + `How to Login Shopee Account When Forgot/Lost Password`, +].map((question, index) => ({ + id: _mock.id(index), + question, + answer: + 'Amazing experience i love it a lot. Thanks to the team that dreams come true, great! I appreciate there attitude and approach.', +})); diff --git a/template/src/_mock/_pricing.js b/template/src/_mock/_pricing.js new file mode 100644 index 0000000..afe3c23 --- /dev/null +++ b/template/src/_mock/_pricing.js @@ -0,0 +1,207 @@ +// ---------------------------------------------------------------------- + +export const _pricingHome = [ + { + license: 'Standard', + price: '59', + icons: ['/assets/icons/platforms/ic_js.svg'], + commons: ['One end products', '12 months updates', '6 months of support'], + options: [ + { title: 'JavaScript version', disabled: false }, + { title: 'TypeScript version', disabled: true }, + { title: 'Design resources', disabled: true }, + { title: 'Commercial applications', disabled: true }, + ], + }, + { + license: 'Plus', + price: '99', + icons: [ + '/assets/icons/platforms/ic_js.svg', + '/assets/icons/platforms/ic_ts.svg', + '/assets/icons/platforms/ic_figma.svg', + ], + commons: ['One end products', '12 months updates', '6 months of support'], + options: [ + { title: 'JavaScript version', disabled: false }, + { title: 'TypeScript version', disabled: false }, + { title: 'Design resources', disabled: false }, + { title: 'Commercial applications', disabled: true }, + ], + }, + { + license: 'Extended', + price: '249', + icons: [ + '/assets/icons/platforms/ic_js.svg', + '/assets/icons/platforms/ic_ts.svg', + '/assets/icons/platforms/ic_figma.svg', + ], + commons: ['One end products', '12 months updates', '6 months of support'], + options: [ + { title: 'JavaScript version', disabled: false }, + { title: 'TypeScript version', disabled: false }, + { title: 'Design resources', disabled: false }, + { title: 'Commercial applications', disabled: false }, + ], + }, +]; + +export const _pricingMarketing = [ + { + license: 'Basic', + price: '29', + icon: '/assets/icons/pricing/ic_plan_basic03.svg', + caption: 'Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien', + options: ['Auto update mode', 'Online operator 24/7', 'International posting'], + }, + { + license: 'Starter', + price: '59', + icon: '/assets/icons/pricing/ic_plan_starter03.svg', + caption: 'Sed lectus. Sed consequat, leo eget bibendum sodales', + options: [ + 'Auto update mode', + 'Online operator 24/7', + 'Unique newsletters', + 'International posting', + ], + }, + { + license: 'Premium', + price: '99', + icon: '/assets/icons/pricing/ic_plan_premium03.svg', + caption: 'Maecenas nec odio et ante tincidunt tempus.', + options: [ + 'Auto update mode', + 'Online operator 24/7', + 'Unique newsletters', + 'International posting', + '20 Design templates', + ], + }, +]; + +export const _pricing01 = [ + { + license: 'Basic', + price: 'Free', + icon: '/assets/icons/pricing/ic_plan_basic01.svg', + options: [ + { title: '3 prototypes', disabled: false }, + { title: '3 boards', disabled: false }, + { title: 'Up to 5 team members', disabled: true }, + { title: 'Advanced security', disabled: true }, + { title: 'Permissions & workflows', disabled: true }, + ], + }, + { + license: 'Starter', + price: '4.99', + icon: '/assets/icons/pricing/ic_plan_starter01.svg', + options: [ + { title: '3 prototypes', disabled: false }, + { title: '3 boards', disabled: false }, + { title: 'Up to 5 team members', disabled: false }, + { title: 'Advanced security', disabled: true }, + { title: 'Permissions & workflows', disabled: true }, + ], + }, + { + license: 'Premium', + price: '9.99', + icon: '/assets/icons/pricing/ic_plan_premium01.svg', + options: [ + { title: '3 prototypes', disabled: false }, + { title: '3 boards', disabled: false }, + { title: 'Up to 5 team members', disabled: false }, + { title: 'Advanced security', disabled: false }, + { title: 'Permissions & workflows', disabled: false }, + ], + }, +]; + +export const _pricing02 = [ + { + license: 'Start', + caption: 'Next 3 months', + price: 'Free', + icon: '/assets/icons/pricing/ic_plan_basic02.svg', + options: [ + { title: '3 prototypes', tootip: '3 prototypes', disabled: false }, + { title: '3 boards', tootip: '3 boards', disabled: false }, + { + title: 'Up to 5 team members', + tootip: 'Up to 5 team members', + disabled: true, + }, + { + title: 'Advanced security', + tootip: 'Advanced security', + disabled: true, + }, + { + title: 'Permissions & workflows', + tootip: 'Permissions & workflows', + disabled: true, + }, + { title: 'Long feature one', tootip: 'Long feature one', disabled: true }, + ], + }, + { + license: 'Pro', + caption: 'Charging $456 per/y', + price: '4.99', + icon: '/assets/icons/pricing/ic_plan_starter02.svg', + options: [ + { title: '3 prototypes', tootip: '3 prototypes', disabled: false }, + { title: '3 boards', tootip: '3 boards', disabled: false }, + { + title: 'Up to 5 team members', + tootip: 'Up to 5 team members', + disabled: false, + }, + { + title: 'Advanced security', + tootip: 'Advanced security', + disabled: true, + }, + { + title: 'Permissions & workflows', + tootip: 'Permissions & workflows', + disabled: true, + }, + { title: 'Long feature one', tootip: 'Long feature one', disabled: true }, + ], + }, + { + license: 'Business', + caption: 'Charging $696 per/y', + price: '9.99', + icon: '/assets/icons/pricing/ic_plan_premium02.svg', + options: [ + { title: '3 prototypes', tootip: '3 prototypes', disabled: false }, + { title: '3 boards', tootip: '3 boards', disabled: false }, + { + title: 'Up to 5 team members', + tootip: 'Up to 5 team members', + disabled: false, + }, + { + title: 'Advanced security', + tootip: 'Advanced security', + disabled: false, + }, + { + title: 'Permissions & workflows', + tootip: 'Permissions & workflows', + disabled: false, + }, + { + title: 'Long feature one', + tootip: 'Long feature one', + disabled: false, + }, + ], + }, +]; diff --git a/template/src/_mock/_products.js b/template/src/_mock/_products.js new file mode 100644 index 0000000..eb8d75b --- /dev/null +++ b/template/src/_mock/_products.js @@ -0,0 +1,145 @@ +import { _mock } from './_mock'; + +// ---------------------------------------------------------------------- + +const NAME = [ + 'Apple iPhone', + 'Samsung Galaxy', + 'Nike Air Max', + 'Adidas Ultraboost', + 'Sony PlayStation', + 'Microsoft Surface', + 'Tesla Model S', + 'Amazon Echo', + 'Google Pixel', + 'Bose QuietComfort', + 'Canon EOS', + 'HP Spectre', + 'LG OLED', + 'Rolex Submariner', + 'Chanel No.5', + 'Louis Vuitton Speedy', + 'Gucci Ace', + 'Ray-Ban Aviator', + 'Herschel Little America', + 'Le Creuset Dutch Oven', + 'Yeti Tumbler', + 'Patagonia Nano Puff', + 'Lululemon Align Leggings', + 'Allbirds Wool Runners', +]; + +const CATEGORIES = [ + 'Electronics', + 'Fashion and Apparel', + 'Home and Garden', + 'Beauty and Personal Care', + 'Health and Wellness', + 'Toys and Games', + 'Sports and Outdoors', + 'Baby and Kids', + 'Automotive and Industrial', + 'Pet Supplies', + 'Food and Beverage', + 'Office and School Supplies', + 'Jewelry and Accessories', + 'Arts and Crafts', + 'Books and Media', + 'Travel and Luggage', + 'Gifts and Flowers', + 'Musical Instruments', + 'Party Supplies', + 'Business and Industrial Supplies', + 'Tools and Hardware', + 'Electronics Accessories', + 'Furniture and Decor', + 'Computer and Software', +]; + +const DESCRIPTION = ` +

Aenean viverra rhoncus pede. Etiam feugiat lorem non metus. Quisque malesuada placerat nisl.

+ +
+ +
+ +

Living in today’s metropolitan world of cellular phones, mobile computers and other high-tech gadgets is not just hectic but very impersonal. We make money and then invest our time and effort in making more money..

+`; + +// ---------------------------------------------------------------------- + +export const _productsTable = [...Array(12)].map((_, index) => ({ + id: _mock.id(index), + orderId: `#011120${index + 1}`, + item: NAME[index], + deliveryDate: _mock.time(index), + price: _mock.number.price(index), + status: ['Completed', 'To Process', 'Cancelled', 'Return'][index] || 'Completed', +})); + +export const _productsCarousel = [...Array(4)].map((_, index) => ({ + id: _mock.id(index), + title: _mock.productName(index), + caption: _mock.description(index), + coverUrl: _mock.image.product(index), + label: 'Opening Sale Discount 50%', +})); + +export const _productsCompare = [ + 'Apple iPhone 12 Pro', + 'Apple iPhone 13 Pro', + 'Apple iPhone 14 Pro', +].map((name, index) => ({ + id: _mock.id(index), + name, + price: _mock.number.price(index), + coverUrl: _mock.image.product(4), + ratingNumber: _mock.number.rating(index), + details: (index === 0 && [ + 'Super Retina XDR (OLED)', + 'Up to 29 hours video playback', + 'A14 Bionic', + 'True Tone', + 'IP68', + '2017', + ]) || ['Super Retina XDR (OLED)', '', 'A14 Bionic', '', 'IP68', '2017'], +})); + +export const _products = [...Array(24)].map((_, index) => ({ + id: _mock.id(index), + stock: 100, + name: NAME[index], + description: DESCRIPTION, + category: CATEGORIES[index], + price: _mock.number.price(index), + sold: _mock.number.nativeM(index), + caption: _mock.description(index), + coverUrl: _mock.image.product(index), + ratingNumber: _mock.number.rating(index), + totalReviews: _mock.number.nativeL(index), + label: ['sale', 'new', 'sale', 'sale'][index] || '', + priceSale: + [ + _mock.number.price(1), + _mock.number.price(2), + _mock.number.price(3), + _mock.number.price(4), + _mock.number.price(5), + ][index] || 0, + images: [ + _mock.image.product(1), + _mock.image.product(2), + _mock.image.product(3), + _mock.image.product(4), + _mock.image.product(5), + _mock.image.product(6), + _mock.image.product(7), + _mock.image.product(8), + ], +})); diff --git a/template/src/_mock/_reviews.js b/template/src/_mock/_reviews.js new file mode 100644 index 0000000..040c5ce --- /dev/null +++ b/template/src/_mock/_reviews.js @@ -0,0 +1,89 @@ +import { _mock } from './_mock'; + +// ---------------------------------------------------------------------- + +const users = [...Array(12)].map((_, index) => ({ + id: _mock.id(index), + name: _mock.fullName(index), + avatarUrl: _mock.image.avatar(index), +})); + +export const _reviews = [ + { + id: _mock.id(0), + name: users[0].name, + avatarUrl: users[0].avatarUrl, + message: _mock.sentence(1), + createdAt: _mock.time(1), + users: [users[0], users[1], users[2]], + rating: 3.5, + helpful: 32, + replyComment: [ + { + id: _mock.id(1), + userId: users[1].id, + message: _mock.sentence(2), + createdAt: _mock.time(2), + }, + { + id: _mock.id(2), + userId: users[0].id, + message: _mock.sentence(3), + tagUser: users[1].name, + createdAt: _mock.time(3), + }, + { + id: _mock.id(3), + userId: users[2].id, + message: _mock.sentence(4), + createdAt: _mock.time(4), + }, + ], + }, + { + id: _mock.id(4), + name: users[4].name, + avatarUrl: users[4].avatarUrl, + message: _mock.sentence(5), + createdAt: _mock.time(5), + users: [users[5], users[6], users[7]], + rating: 4.5, + helpful: 0, + replyComment: [ + { + id: _mock.id(5), + userId: users[6].id, + message: _mock.sentence(7), + createdAt: _mock.time(7), + }, + { + id: _mock.id(6), + userId: users[7].id, + message: _mock.sentence(8), + createdAt: _mock.time(8), + }, + ], + }, + { + id: _mock.id(7), + name: users[8].name, + avatarUrl: users[8].avatarUrl, + message: _mock.sentence(9), + createdAt: _mock.time(9), + rating: 4.5, + helpful: 10, + users: [], + replyComment: [], + }, + { + id: _mock.id(8), + name: users[9].name, + avatarUrl: users[9].avatarUrl, + message: _mock.sentence(10), + createdAt: _mock.time(10), + rating: 5, + helpful: 0, + users: [], + replyComment: [], + }, +]; diff --git a/template/src/_mock/_tours.js b/template/src/_mock/_tours.js new file mode 100644 index 0000000..7250342 --- /dev/null +++ b/template/src/_mock/_tours.js @@ -0,0 +1,107 @@ +import { add } from 'date-fns'; + +import { countries } from 'src/assets/data'; + +import { _mock } from './_mock'; +import { _tags } from './assets'; + +// ---------------------------------------------------------------------- + +export const TOUR_SERVICE_OPTIONS = [ + { value: 'Audio guide', label: 'Audio guide' }, + { value: 'Food and drinks', label: 'Food and drinks' }, + { value: 'Lunch', label: 'Lunch' }, + { value: 'Private tour', label: 'Private tour' }, + { value: 'Special activities', label: 'Special activities' }, + { value: 'Entrance fees', label: 'Entrance fees' }, + { value: 'Gratuities', label: 'Gratuities' }, + { value: 'Pick-up and drop off', label: 'Pick-up and drop off' }, + { value: 'Professional guide', label: 'Professional guide' }, + { + value: 'Transport by air-conditioned', + label: 'Transport by air-conditioned', + }, +]; + +export const _tours = [...Array(12)].map((_, index) => { + const location = countries.map((option) => option.label)[index + 1]; + + const gallery = [...Array(6)].map((__, itemIndex) => _mock.image.travel(itemIndex + 2)); + + const highlights = [...Array(6)].map((__, itemIndex) => _mock.sentence(itemIndex)); + + const heroUrl = [ + '/assets/images/travel/travel_post_hero.jpg', + '/assets/images/travel/travel_post_01.jpg', + '/assets/images/travel/travel_post_02.jpg', + '/assets/images/travel/travel_post_03.jpg', + '/assets/images/travel/travel_post_04.jpg', + ][index]; + + const program = [...Array(3)].map((__, itemIndex) => ({ + label: `Day ${itemIndex + 1}`, + text: _mock.description(itemIndex), + })); + + const services = (index % 2 && ['Audio guide', 'Food and drinks']) || + (index % 3 && ['Lunch', 'Private tour']) || + (index % 4 && ['Special activities', 'Entrance fees']) || [ + 'Gratuities', + 'Pick-up and drop off', + 'Professional guide', + 'Transport by air-conditioned', + ]; + + const tourGuide = { + verified: true, + role: _mock.role(index), + name: _mock.fullName(index), + avatarUrl: _mock.image.avatar(index), + quotes: 'Member since Mar 15, 2021', + phoneNumber: _mock.phoneNumber(index), + ratingNumber: _mock.number.rating(index), + totalReviews: _mock.number.nativeL(index), + about: + 'Integer tincidunt. Nullam dictum felis eu pede mollis pretium. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem.', + shareLinks: { + facebook: `facebook/user-name`, + instagram: `instagram/user-name`, + linkedin: `linkedin/user-name`, + twitter: `twitter/user-name`, + }, + }; + + return { + id: _mock.id(index), + heroUrl, + gallery, + program, + location, + services, + tourGuide, + highlights, + continent: location, + tags: _tags.slice(0, 5), + slug: _mock.tourName(index), + duration: '3 days 2 nights', + createdAt: _mock.time(index), + favorited: _mock.boolean(index), + price: _mock.number.price(index), + languages: ['Russian', 'Spanish'], + coverUrl: _mock.image.travel(index), + description: _mock.description(index), + ratingNumber: _mock.number.rating(index), + totalReviews: _mock.number.nativeL(index), + priceSale: (index === 2 && 89.99) || (index === 5 && 69.99) || 0, + available: { + start: add(new Date(), { months: 2 }), + end: add(new Date(), { months: 4 }), + }, + shareLinks: { + facebook: `facebook/user-name`, + instagram: `instagram/user-name`, + linkedin: `linkedin/user-name`, + twitter: `twitter/user-name`, + }, + }; +}); diff --git a/template/src/_mock/assets.js b/template/src/_mock/assets.js new file mode 100644 index 0000000..a826a26 --- /dev/null +++ b/template/src/_mock/assets.js @@ -0,0 +1,546 @@ +// ---------------------------------------------------------------------- + +export const _id = [...Array(40)].map( + (_, index) => `e99f09a7-dd88-49d5-b1c8-1daf80c2d7b${index + 1}` +); + +export const _courseTitle = [ + 'Design Masterclass Course', + 'Fitness For Beginners (2020)', + 'The Secrets To Teaching Online', + 'Learn How To Create A Course Online And Level Up Your Career', + 'Create A Course Online Masterclass', + 'Learn How To Create A Course Online And Level Up Your Career', + '2021 Complete Python Bootcamp From Zero to Hero in Python', + 'Machine Learning A-Z™: Hands-On Python & R In Data Science', + 'The Complete Digital Marketing Course - 12 Courses in 1', + 'SEO beginners : how I get 1,000 visitors a day with SEO', + 'Mega Digital Marketing Course A-Z: 12 Courses in 1 + Updates', + 'Copywriting: Fundamentals For Beginners', + 'Modern Copywriting: Writing copy that sells in 2021', + 'Copywriting secrets - How to write copy that sells', + 'Instagram Marketing 2021: Complete Guide To Instagram Growth', + 'Python for Finance and Algorithmic Trading with QuantConnect', +]; + +export const _fullAddress = [ + '19034 Verna Unions Apt. 164 - Honolulu, RI / 87535', + '1147 Rohan Drive Suite 819 - Burlington, VT / 82021', + '18605 Thompson Circle Apt. 086 - Idaho Falls, WV / 50337', + '110 Lamar Station Apt. 730 - Hagerstown, OK / 49808', + '36901 Elmer Spurs Apt. 762 - Miramar, DE / 92836', + '2089 Runolfsson Harbors Suite 886 - Chapel Hill, TX / 32827', + '279 Karolann Ports Apt. 774 - Prescott Valley, WV / 53905', + '96607 Claire Square Suite 591 - St. Louis Park, HI / 40802', + '9388 Auer Station Suite 573 - Honolulu, AK / 98024', + '47665 Adaline Squares Suite 510 - Blacksburg, NE / 53515', + '989 Vernice Flats Apt. 183 - Billings, NV / 04147', + '91020 Wehner Locks Apt. 673 - Albany, WY / 68763', + '585 Candelario Pass Suite 090 - Columbus, LA / 25376', + '80988 Renner Crest Apt. 000 - Fargo, VA / 24266', + '28307 Shayne Pike Suite 523 - North Las Vegas, AZ / 28550', + '205 Farrell Highway Suite 333 - Rock Hill, OK / 63421', + '253 Kara Motorway Suite 821 - Manchester, SD / 09331', + '13663 Kiara Oval Suite 606 - Missoula, AR / 44478', + '8110 Claire Port Apt. 703 - Anchorage, TN / 01753', + '4642 Demetris Lane Suite 407 - Edmond, AZ / 60888', + '74794 Asha Flat Suite 890 - Lancaster, OR / 13466', + '8135 Keeling Pines Apt. 326 - Alexandria, MA / 89442', + '441 Gibson Shores Suite 247 - Pasco, NM / 60678', + '4373 Emelia Valley Suite 596 - Columbia, NM / 42586', +]; + +// ---------------------------------------------------------------------- + +export const _booleans = [ + true, + true, + true, + false, + false, + true, + false, + false, + false, + false, + true, + true, + true, + false, + false, + false, + true, + false, + false, + false, + true, + false, + false, + true, +]; + +// ---------------------------------------------------------------------- + +export const _emails = [ + 'nannie_abernathy70@yahoo.com', + 'ashlynn_ohara62@gmail.com', + 'milo.farrell@hotmail.com', + 'violet.ratke86@yahoo.com', + 'letha_lubowitz24@yahoo.com', + 'aditya_greenfelder31@gmail.com', + 'lenna_bergnaum27@hotmail.com', + 'luella.ryan33@gmail.com', + 'joana.simonis84@gmail.com', + 'marjolaine_white94@gmail.com', + 'vergie_block82@hotmail.com', + 'vito.hudson@hotmail.com', + 'tyrel_greenholt@gmail.com', + 'dwight.block85@yahoo.com', + 'mireya13@hotmail.com', + 'dasia_jenkins@hotmail.com', + 'benny89@yahoo.com', + 'dawn.goyette@gmail.com', + 'zella_hickle4@yahoo.com', + 'avery43@hotmail.com', + 'olen_legros@gmail.com', + 'jimmie.gerhold73@hotmail.com', + 'genevieve.powlowski@hotmail.com', + 'louie.kuphal39@gmail.com', +]; + +// ---------------------------------------------------------------------- + +export const _fullNames = [ + 'Jayvion Simon', + 'Lucian Obrien', + 'Deja Brady', + 'Harrison Stein', + 'Reece Chung', + 'Lainey Davidson', + 'Cristopher Cardenas', + 'Melanie Noble', + 'Chase Day', + 'Shawn Manning', + 'Soren Durham', + 'Cortez Herring', + 'Brycen Jimenez', + 'Giana Brandt', + 'Aspen Schmitt', + 'Colten Aguilar', + 'Angelique Morse', + 'Selina Boyer', + 'Lawson Bass', + 'Ariana Lang', + 'Amiah Pruitt', + 'Harold Mcgrath', + 'Esperanza Mcintyre', + 'Mireya Conner', +]; + +export const _firstNames = [ + 'Mossie', + 'David', + 'Ebba', + 'Chester', + 'Eula', + 'Jaren', + 'Boyd', + 'Brady', + 'Aida', + 'Anastasia', + 'Gregoria', + 'Julianne', + 'Ila', + 'Elyssa', + 'Lucio', + 'Lewis', + 'Jacinthe', + 'Molly', + 'Brown', + 'Fritz', + 'Keon', + 'Ella', + 'Ken', + 'Whitney', +]; + +export const _lastNames = [ + 'Carroll', + 'Simonis', + 'Yost', + 'Hand', + 'Emmerich', + 'Wilderman', + 'Howell', + 'Sporer', + 'Boehm', + 'Morar', + 'Koch', + 'Reynolds', + 'Padberg', + 'Watsica', + 'Upton', + 'Yundt', + 'Pfeffer', + 'Parker', + 'Zulauf', + 'Treutel', + 'McDermott', + 'McDermott', + 'Cruickshank', + 'Parisian', +]; + +// ---------------------------------------------------------------------- + +export const _prices = [ + 83.74, 97.14, 68.71, 85.21, 52.17, 25.18, 43.84, 60.98, 98.42, 53.37, 72.75, 56.61, 64.55, 77.32, + 60.62, 79.81, 93.68, 47.44, 76.24, 92.87, 72.91, 20.54, 94.25, 37.51, +]; + +export const _ratings = [ + 4.2, 3.7, 4.5, 3.5, 0.5, 3.0, 2.5, 2.8, 4.9, 3.6, 2.5, 1.7, 3.9, 2.8, 4.1, 4.5, 2.2, 3.2, 0.6, + 1.3, 3.8, 3.8, 3.8, 2.0, +]; + +export const _ages = [ + 30, 26, 59, 47, 29, 46, 18, 56, 39, 19, 45, 18, 46, 56, 38, 41, 44, 48, 32, 45, 42, 60, 33, 57, +]; + +export const _percents = [ + 10.1, 13.6, 28.2, 42.1, 37.2, 18.5, 40.1, 94.8, 91.4, 53.0, 25.4, 62.9, 86.6, 62.4, 35.4, 17.6, + 52.0, 6.8, 95.3, 26.6, 69.9, 92.1, 46.2, 85.6, +]; + +export const _nativeS = [ + 11, 10, 7, 10, 12, 5, 10, 1, 8, 8, 10, 11, 12, 8, 4, 11, 8, 9, 4, 9, 2, 6, 3, 7, +]; + +export const _nativeM = [ + 497, 763, 684, 451, 433, 463, 951, 194, 425, 435, 807, 521, 538, 839, 394, 269, 453, 821, 364, + 849, 804, 776, 263, 239, +]; + +export const _nativeL = [ + 9911, 1947, 9124, 6984, 8488, 2034, 3364, 8401, 8996, 5271, 8478, 1139, 8061, 3035, 6733, 3952, + 2405, 3127, 6843, 4672, 6995, 6053, 5192, 9686, +]; + +// ---------------------------------------------------------------------- + +export const _phoneNumbers = [ + '365-374-4961', + '904-966-2836', + '399-757-9909', + '692-767-2903', + '990-588-5716', + '955-439-2578', + '226-924-4058', + '552-917-1454', + '285-840-9338', + '306-269-2446', + '883-373-6253', + '476-509-8866', + '201-465-1954', + '538-295-9408', + '531-492-6028', + '981-699-7588', + '500-268-4826', + '205-952-3828', + '222-255-5190', + '408-439-8033', + '272-940-8266', + '812-685-8057', + '353-801-5212', + '606-285-8928', +]; + +// ---------------------------------------------------------------------- + +export const _roles = [ + 'HR Manager', + 'Data Analyst', + 'Legal Counsel', + 'UX/UI Designer', + 'Project Manager', + 'Account Manager', + 'Registered Nurse', + 'Business Analyst', + 'Creative Director', + 'Financial Planner', + 'Event Coordinator', + 'Marketing Director', + 'Software Developer', + 'Research Scientist', + 'Content Strategist', + 'Operations Manager', + 'Sales Representative', + 'Supply Chain Analyst', + 'Operations Coordinator', + 'Customer Service Associate', + 'Quality Assurance Specialist', + 'CEO', + 'CFO', + 'CTO', +]; + +// ---------------------------------------------------------------------- + +export const _postTitles = [ + '10 Essential Tips for Healthy Living', + 'The Ultimate Guide to Productivity Hacks', + 'Exploring the Hidden Gems of [Destination]', + 'How to Master the Art of Public Speaking', + 'The Future of Artificial Intelligence: Trends and Insights', + 'Delicious Recipes for a Vegan Diet', + "A Beginner's Guide to Investing in Stocks", + 'The Impact of Social Media on Society', + '10 Must-Visit Destinations for Adventure Travelers', + 'The Benefits of Mindfulness Meditation', + 'The Importance of Mental Health Awareness', + 'Building a Strong Personal Brand: Tips and Strategies', + '10 Effective Strategies for Digital Marketing Success', + 'Unveiling the Secrets of Successful Entrepreneurs', + 'The Rise of Remote Work and its Impact on the Workforce', + 'The Art of Landscape Photography: Techniques and Inspiration', + 'Understanding Blockchain Technology and its Potential Applications', + 'How to Create Engaging Content for Social Media', + 'The Role of Artificial Intelligence in Healthcare', + '10 Home Organization Hacks for a Clutter-Free Space', + 'Exploring the History and Culture of [City/Region]', + 'The Power of Positive Thinking: Transform Your Mindset', + 'The Influence of Music on Mood and Emotions', + 'Travel Photography Tips: Capturing Memories Around the World', +]; + +// ---------------------------------------------------------------------- + +export const _productNames = [ + 'Nike Air Force 1 NDESTRUKT', + 'Foundations Matte Flip Flop', + 'Nike Air Zoom Pegasus 37 A.I.R. Chaz Bear', + 'Arizona Soft Footbed Sandal', + 'Boston Soft Footbed Sandal', + 'Zoom Freak 2', + 'Gazelle Vintage low-top sneakers', + 'Jordan Delta', + 'Air Jordan XXXV PF', + 'Rod Laver low-top sneakers', + 'Kyrie 7 EP Sisterhood', + 'Pharrell Williams Human Race NMD sneakers', + 'Nike Blazer Low 77 Vintage', + 'ASMC Winter Boot Cold.Rdy', + 'ZX 8000 Lego sneakers', + 'Ultraboost 21 sneakers', + '2750 Cotu Classic Sneaker', + 'ZX 9000 A-ZX Series sneakers', + 'Madrid Big Buckle Sandal', + 'Chuck 70 Hi Sneaker', + 'Relaxed Adjustable Strap Slingback Sandal', + 'Superturf Adventure X Atmos', + 'Chuck Taylor All Star Lift Sneaker', + 'Run Star Hike Platform Sneaker', +]; + +// ---------------------------------------------------------------------- + +export const _tourNames = [ + 'Adventure Seekers Expedition', + 'Historic Heritage Tour', + 'Culinary Delights Exploration', + "Nature's Wonders Escapade", + 'Cultural Immersion Journey', + 'Wildlife Safari Expedition', + "Urban Explorer's City Tour", + 'Coastal Paradise Getaway', + 'Wine Tasting Experience', + 'Spiritual Retreat Tour', + 'Outdoor Adventure Trek', + 'Photography Expedition', + 'Music and Arts Discovery Tour', + 'Wellness and Yoga Retreat', + 'Hidden Gems Discovery Tour', + 'Volcano and Geothermal Exploration', + "Foodie's Gastronomic Tour", + 'Hiking and Camping Adventure', + 'Architecture and Design Tour', + 'Coastal Cruise and Island Hopping', + 'Scenic Train Ride Experience', + 'Historical Landmarks Expedition', + 'Surfing and Beach Adventure', + 'Nightlife and Entertainment Tour', +]; + +// ---------------------------------------------------------------------- + +export const _jobTitles = [ + 'Software Engineer', + 'Marketing Manager', + 'Financial Analyst', + 'Graphic Designer', + 'Sales Representative', + 'Project Manager', + 'Data Scientist', + 'Human Resources Coordinator', + 'Accountant', + 'Customer Service Representative', + 'Nurse', + 'Product Manager', + 'Operations Manager', + 'Social Media Specialist', + 'Business Development Executive', + 'Content Writer', + 'Web Developer', + 'Electrical Engineer', + 'Research Scientist', + 'Legal Assistant', + 'Chef', + 'Financial Planner', + 'Architect', + 'Event Planner', +]; + +// ---------------------------------------------------------------------- + +export const _companyNames = [ + 'Lueilwitz and Sons', + 'Gleichner, Mueller and Tromp', + 'Nikolaus - Leuschke', + 'Hegmann, Kreiger and Bayer', + 'Grimes Inc', + 'Durgan - Murazik', + 'Altenwerth, Medhurst and Roberts', + 'Raynor Group', + 'Mraz, Donnelly and Collins', + 'Padberg - Bailey', + 'Heidenreich, Stokes and Parker', + 'Pagac and Sons', + 'Rempel, Hand and Herzog', + 'Dare - Treutel', + 'Kihn, Marquardt and Crist', + 'Nolan - Kunde', + 'Wuckert Inc', + 'Dibbert Inc', + 'Goyette and Sons', + 'Feest Group', + 'Bosco and Sons', + 'Bartell - Kovacek', + 'Schimmel - Raynor', + 'Tremblay LLC', +]; + +// ---------------------------------------------------------------------- + +export const _tags = [ + 'Technology', + 'Marketing', + 'Design', + 'Photography', + 'Art', + 'Fashion', + 'Food', + 'Travel', + 'Fitness', + 'Nature', + 'Business', + 'Music', + 'Health', + 'Books', + 'Sports', + 'Film', + 'Education', + 'Motivation', + 'Gaming', + 'Pets', + 'Cooking', + 'Finance', + 'Selfcare', + 'Writing', +]; + +// ---------------------------------------------------------------------- + +export const _taskNames = [ + 'Complete Project Proposal', + 'Conduct Market Research', + 'Design User Interface Mockups', + 'Develop Backend API', + 'Implement Authentication System', + 'Write Test Cases', + 'Perform Database Optimization', + 'Create Content Marketing Plan', + 'Update Website Copy', + 'Conduct A/B Testing', + 'Create Social Media Graphics', + 'Optimize Website Performance', + 'Review Competitor Websites', + 'Implement Payment Gateway Integration', + 'Conduct User Acceptance Testing', + 'Prepare Monthly Sales Report', + 'Enhance SEO Strategy', + 'Conduct Customer Satisfaction Survey', + 'Design Email Newsletter Template', + 'Monitor Server Logs for Errors', + 'Create Training Materials', + 'Plan and Execute Marketing Campaign', + 'Develop Mobile Application', + 'Coordinate Project Meetings', +]; + +// ---------------------------------------------------------------------- + +export const _sentences = [ + 'The sun slowly set over the horizon, painting the sky in vibrant hues of orange and pink.', + 'She eagerly opened the gift, her eyes sparkling with excitement.', + 'The old oak tree stood tall and majestic, its branches swaying gently in the breeze.', + 'The aroma of freshly brewed coffee filled the air, awakening my senses.', + 'The children giggled with joy as they ran through the sprinklers on a hot summer day.', + 'He carefully crafted a beautiful sculpture out of clay, his hands skillfully shaping the intricate details.', + 'The concert was a mesmerizing experience, with the music filling the venue and the crowd cheering in delight.', + 'The waves crashed against the shore, creating a soothing symphony of sound.', + 'The scent of blooming flowers wafted through the garden, creating a fragrant paradise.', + 'She gazed up at the night sky, marveling at the twinkling stars that dotted the darkness.', + 'The professor delivered a captivating lecture, engaging the students with thought-provoking ideas.', + 'The hiker trekked through the dense forest, guided by the soft glow of sunlight filtering through the trees.', + 'The delicate butterfly gracefully fluttered from flower to flower, sipping nectar with its slender proboscis.', + 'The aroma of freshly baked cookies filled the kitchen, tempting everyone with its irresistible scent.', + "The majestic waterfall cascaded down the rocks, creating a breathtaking display of nature's power.", + 'The actor delivered a powerful performance, moving the audience to tears with his emotional portrayal.', + 'The book transported me to a magical world, where imagination knew no bounds.', + 'The scent of rain filled the air as dark clouds gathered overhead, promising a refreshing downpour.', + 'The chef skillfully plated the dish, turning simple ingredients into a work of culinary art.', + 'The newborn baby let out a tiny cry, announcing its arrival to the world.', + 'The athlete sprinted across the finish line, arms raised in victory as the crowd erupted in applause.', + 'The ancient ruins stood as a testament to a civilization long gone, their grandeur still awe-inspiring.', + 'The artist dipped the brush into vibrant paint, bringing the canvas to life with bold strokes and vivid colors.', + 'The laughter of children echoed through the playground, filling the atmosphere with pure joy.', +]; + +// ---------------------------------------------------------------------- + +export const _descriptions = [ + `Occaecati est et illo quibusdam accusamus qui. Incidunt aut et molestiae ut facere aut. Est quidem iusto praesentium excepturi harum nihil tenetur facilis. Ut omnis voluptates nihil accusantium doloribus eaque debitis.`, + `Atque eaque ducimus minima distinctio velit. Laborum et veniam officiis. Delectus ex saepe hic id laboriosam officia. Odit nostrum qui illum saepe debitis ullam. Laudantium beatae modi fugit ut. Dolores consequatur beatae nihil voluptates rem maiores.`, + `Rerum eius velit dolores. Explicabo ad nemo quibusdam. Voluptatem eum suscipit et ipsum et consequatur aperiam quia. Rerum nulla sequi recusandae illum velit quia quas. Et error laborum maiores cupiditate occaecati.`, + `Et non omnis qui. Qui sunt deserunt dolorem aut velit cumque adipisci aut enim. Nihil quis quisquam nesciunt dicta nobis ab aperiam dolorem repellat. Voluptates non blanditiis. Error et tenetur iste soluta cupiditate ratione perspiciatis et. Quibusdam aliquid nam sunt et quisquam non esse.`, + `Nihil ea sunt facilis praesentium atque. Ab animi alias sequi molestias aut velit ea. Sed possimus eos. Et est aliquid est voluptatem.`, + `Non rerum modi. Accusamus voluptatem odit nihil in. Quidem et iusto numquam veniam culpa aperiam odio aut enim. Quae vel dolores. Pariatur est culpa veritatis aut dolorem.`, + `Est enim et sit non impedit aperiam cumque animi. Aut eius impedit saepe blanditiis. Totam molestias magnam minima fugiat.`, + `Unde a inventore et. Sed esse ut. Atque ducimus quibusdam fuga quas id qui fuga.`, + `Eaque natus adipisci soluta nostrum dolorem. Nesciunt ipsum molestias ut aliquid natus ut omnis qui fugiat. Dolor et rem. Ut neque voluptatem blanditiis quasi ullam deleniti.`, + `Nam et error exercitationem qui voluptate optio. Officia omnis qui accusantium ipsam qui. Quia sequi nulla perspiciatis optio vero omnis maxime omnis ipsum. Perspiciatis consequuntur asperiores veniam dolores.`, + `Perspiciatis nulla ut ut ut voluptates totam consectetur eligendi qui. Optio ut cum. Dolorum sapiente qui laborum. Impedit temporibus totam delectus nihil. Voluptatem corrupti rem.`, + `Distinctio omnis similique omnis eos. Repellat cumque rerum nisi. Reiciendis soluta non ut veniam temporibus. Accusantium et dolorem voluptas harum. Nemo eius voluptate dicta et hic nemo. Dolorem assumenda et beatae molestias sit quo mollitia quis consequatur.`, + `Sed ut mollitia tempore ipsam et illum doloribus ut. Occaecati ratione veritatis explicabo. Omnis nam omnis sunt placeat tempore accusantium placeat distinctio velit.`, + `Eum illo dicta et perspiciatis ut blanditiis eos sequi. Ea veritatis aut et voluptas aut. Laborum eos quia tempore a culpa.`, + `Aut quos quae dolores repudiandae similique perferendis perferendis earum laudantium. Facere placeat natus nobis. Eius vitae ullam dolorem.`, + `Vero dolorem et voluptatem fugit tempore a quam iure. Fuga consequatur corrupti sunt asperiores vitae. Libero totam repellendus animi debitis illum et sunt officia.`, + `Cupiditate illum officiis id molestiae. Numquam non molestiae aliquid et natus sed hic. Alias quia explicabo sed corrupti sint. Natus in et odio qui unde facilis quia. Est sit eius laboriosam aliquid non aperiam quia quo corporis.`, + `Et a ab. Optio aspernatur minus tempora amet vitae consectetur inventore cumque. Sed et omnis. Aspernatur a magnam.`, + `Ipsum omnis et. Quia ea et autem tempore consequuntur veniam dolorem officiis. Ipsa dicta et ut quidem quia doloremque. Sequi vitae doloremque temporibus. Deserunt incidunt id aperiam itaque natus. Earum sit eaque quas incidunt nihil.`, + `Quae consequatur reiciendis. Consequatur non optio. Eaque id placeat. Commodi quo officia aut repudiandae reiciendis tempore voluptatem et. Ut accusamus qui itaque maxime aliquam. Fugit ut animi molestiae porro maiores.`, + `Modi hic asperiores ab cumque quam est aut. Voluptas atque quos molestias. Ut excepturi distinctio ipsam aspernatur sit.`, + `Sunt totam facilis. Quam commodi voluptatem veniam. Tempora deleniti itaque fugit nihil voluptas.`, + `Ipsam aliquam velit nobis repellendus officiis aut deserunt id et. Nihil sunt aut dolores aut. Dolores est ipsa quia et laborum quidem laborum accusamus id. Facilis odit quod hic laudantium saepe omnis nisi in sint. Sed cupiditate possimus id.`, + `Magnam non eveniet optio optio ut aliquid atque. Velit libero aspernatur quis laborum consequatur laudantium. Tempora facere optio fugit accusantium ut. Omnis aspernatur reprehenderit autem esse ut ut enim voluptatibus.`, +]; diff --git a/template/src/_mock/index.js b/template/src/_mock/index.js new file mode 100644 index 0000000..e97fa82 --- /dev/null +++ b/template/src/_mock/index.js @@ -0,0 +1,15 @@ +export * from './assets'; +export * from './_mock'; + +// ---------------------------------------------------------------------- + +export * from './_jobs'; +export * from './_tours'; +export * from './_others'; +export * from './_reviews'; +export * from './_members'; +export * from './_pricing'; +export * from './_courses'; +export * from './_products'; +export * from './_blog'; +export * from './_caseStudies'; diff --git a/template/src/app.jsx b/template/src/app.jsx new file mode 100644 index 0000000..480c11e --- /dev/null +++ b/template/src/app.jsx @@ -0,0 +1,40 @@ +/* eslint-disable perfectionist/sort-imports */ +import 'src/global.css'; + +// ---------------------------------------------------------------------- + +import Router from 'src/routes/sections'; +import { useScrollToTop } from 'src/hooks/use-scroll-to-top'; + +import ThemeProvider from 'src/theme'; +import { LocalizationProvider } from 'src/locales'; + +import ProgressBar from 'src/components/progress-bar'; +import { MotionLazy } from 'src/components/animate/motion-lazy'; +import { SettingsDrawer, SettingsProvider } from 'src/components/settings'; + +// ---------------------------------------------------------------------- + +export default function App() { + useScrollToTop(); + + return ( + + + + + + + + + + + + ); +} diff --git a/template/src/assets/data/countries.js b/template/src/assets/data/countries.js new file mode 100644 index 0000000..7ae08cc --- /dev/null +++ b/template/src/assets/data/countries.js @@ -0,0 +1,425 @@ +export const countries = [ + { code: '', label: '', phone: '' }, + { code: 'AD', label: 'Andorra', phone: '376' }, + { + code: 'AE', + label: 'United Arab Emirates', + phone: '971', + }, + { code: 'AF', label: 'Afghanistan', phone: '93' }, + { + code: 'AG', + label: 'Antigua and Barbuda', + phone: '1-268', + }, + { code: 'AI', label: 'Anguilla', phone: '1-264' }, + { code: 'AL', label: 'Albania', phone: '355' }, + { code: 'AM', label: 'Armenia', phone: '374' }, + { code: 'AO', label: 'Angola', phone: '244' }, + { code: 'AQ', label: 'Antarctica', phone: '672' }, + { code: 'AR', label: 'Argentina', phone: '54' }, + { code: 'AS', label: 'American Samoa', phone: '1-684' }, + { code: 'AT', label: 'Austria', phone: '43' }, + { + code: 'AU', + label: 'Australia', + phone: '61', + suggested: true, + }, + { code: 'AW', label: 'Aruba', phone: '297' }, + { code: 'AX', label: 'Alland Islands', phone: '358' }, + { code: 'AZ', label: 'Azerbaijan', phone: '994' }, + { + code: 'BA', + label: 'Bosnia and Herzegovina', + phone: '387', + }, + { code: 'BB', label: 'Barbados', phone: '1-246' }, + { code: 'BD', label: 'Bangladesh', phone: '880' }, + { code: 'BE', label: 'Belgium', phone: '32' }, + { code: 'BF', label: 'Burkina Faso', phone: '226' }, + { code: 'BG', label: 'Bulgaria', phone: '359' }, + { code: 'BH', label: 'Bahrain', phone: '973' }, + { code: 'BI', label: 'Burundi', phone: '257' }, + { code: 'BJ', label: 'Benin', phone: '229' }, + { code: 'BL', label: 'Saint Barthelemy', phone: '590' }, + { code: 'BM', label: 'Bermuda', phone: '1-441' }, + { code: 'BN', label: 'Brunei Darussalam', phone: '673' }, + { code: 'BO', label: 'Bolivia', phone: '591' }, + { code: 'BR', label: 'Brazil', phone: '55' }, + { code: 'BS', label: 'Bahamas', phone: '1-242' }, + { code: 'BT', label: 'Bhutan', phone: '975' }, + { code: 'BV', label: 'Bouvet Island', phone: '47' }, + { code: 'BW', label: 'Botswana', phone: '267' }, + { code: 'BY', label: 'Belarus', phone: '375' }, + { code: 'BZ', label: 'Belize', phone: '501' }, + { + code: 'CA', + label: 'Canada', + phone: '1', + suggested: true, + }, + { + code: 'CC', + label: 'Cocos (Keeling) Islands', + phone: '61', + }, + { + code: 'CD', + label: 'Congo, Democratic Republic of the', + phone: '243', + }, + { + code: 'CF', + label: 'Central African Republic', + phone: '236', + }, + { + code: 'CG', + label: 'Congo, Republic of the', + phone: '242', + }, + { code: 'CH', label: 'Switzerland', phone: '41' }, + { code: 'CI', label: "Cote d'Ivoire", phone: '225' }, + { code: 'CK', label: 'Cook Islands', phone: '682' }, + { code: 'CL', label: 'Chile', phone: '56' }, + { code: 'CM', label: 'Cameroon', phone: '237' }, + { code: 'CN', label: 'China', phone: '86' }, + { code: 'CO', label: 'Colombia', phone: '57' }, + { code: 'CR', label: 'Costa Rica', phone: '506' }, + { code: 'CU', label: 'Cuba', phone: '53' }, + { code: 'CV', label: 'Cape Verde', phone: '238' }, + { code: 'CW', label: 'Curacao', phone: '599' }, + { code: 'CX', label: 'Christmas Island', phone: '61' }, + { code: 'CY', label: 'Cyprus', phone: '357' }, + { code: 'CZ', label: 'Czech Republic', phone: '420' }, + { + code: 'DE', + label: 'Germany', + phone: '49', + suggested: true, + }, + { code: 'DJ', label: 'Djibouti', phone: '253' }, + { code: 'DK', label: 'Denmark', phone: '45' }, + { code: 'DM', label: 'Dominica', phone: '1-767' }, + { + code: 'DO', + label: 'Dominican Republic', + phone: '1-809', + }, + { code: 'DZ', label: 'Algeria', phone: '213' }, + { code: 'EC', label: 'Ecuador', phone: '593' }, + { code: 'EE', label: 'Estonia', phone: '372' }, + { code: 'EG', label: 'Egypt', phone: '20' }, + { code: 'EH', label: 'Western Sahara', phone: '212' }, + { code: 'ER', label: 'Eritrea', phone: '291' }, + { code: 'ES', label: 'Spain', phone: '34' }, + { code: 'ET', label: 'Ethiopia', phone: '251' }, + { code: 'FI', label: 'Finland', phone: '358' }, + { code: 'FJ', label: 'Fiji', phone: '679' }, + { + code: 'FK', + label: 'Falkland Islands (Malvinas)', + phone: '500', + }, + { + code: 'FM', + label: 'Micronesia, Federated States of', + phone: '691', + }, + { code: 'FO', label: 'Faroe Islands', phone: '298' }, + { + code: 'FR', + label: 'France', + phone: '33', + suggested: true, + }, + { code: 'GA', label: 'Gabon', phone: '241' }, + { code: 'GB', label: 'United Kingdom', phone: '44' }, + { code: 'GD', label: 'Grenada', phone: '1-473' }, + { code: 'GE', label: 'Georgia', phone: '995' }, + { code: 'GF', label: 'French Guiana', phone: '594' }, + { code: 'GG', label: 'Guernsey', phone: '44' }, + { code: 'GH', label: 'Ghana', phone: '233' }, + { code: 'GI', label: 'Gibraltar', phone: '350' }, + { code: 'GL', label: 'Greenland', phone: '299' }, + { code: 'GM', label: 'Gambia', phone: '220' }, + { code: 'GN', label: 'Guinea', phone: '224' }, + { code: 'GP', label: 'Guadeloupe', phone: '590' }, + { code: 'GQ', label: 'Equatorial Guinea', phone: '240' }, + { code: 'GR', label: 'Greece', phone: '30' }, + { + code: 'GS', + label: 'South Georgia and the South Sandwich Islands', + phone: '500', + }, + { code: 'GT', label: 'Guatemala', phone: '502' }, + { code: 'GU', label: 'Guam', phone: '1-671' }, + { code: 'GW', label: 'Guinea-Bissau', phone: '245' }, + { code: 'GY', label: 'Guyana', phone: '592' }, + { code: 'HK', label: 'Hong Kong', phone: '852' }, + { + code: 'HM', + label: 'Heard Island and McDonald Islands', + phone: '672', + }, + { code: 'HN', label: 'Honduras', phone: '504' }, + { code: 'HR', label: 'Croatia', phone: '385' }, + { code: 'HT', label: 'Haiti', phone: '509' }, + { code: 'HU', label: 'Hungary', phone: '36' }, + { code: 'ID', label: 'Indonesia', phone: '62' }, + { code: 'IE', label: 'Ireland', phone: '353' }, + { code: 'IL', label: 'Israel', phone: '972' }, + { code: 'IM', label: 'Isle of Man', phone: '44' }, + { code: 'IN', label: 'India', phone: '91' }, + { + code: 'IO', + label: 'British Indian Ocean Territory', + phone: '246', + }, + { code: 'IQ', label: 'Iraq', phone: '964' }, + { + code: 'IR', + label: 'Iran, Islamic Republic of', + phone: '98', + }, + { code: 'IS', label: 'Iceland', phone: '354' }, + { code: 'IT', label: 'Italy', phone: '39' }, + { code: 'JE', label: 'Jersey', phone: '44' }, + { code: 'JM', label: 'Jamaica', phone: '1-876' }, + { code: 'JO', label: 'Jordan', phone: '962' }, + { + code: 'JP', + label: 'Japan', + phone: '81', + suggested: true, + }, + { code: 'KE', label: 'Kenya', phone: '254' }, + { code: 'KG', label: 'Kyrgyzstan', phone: '996' }, + { code: 'KH', label: 'Cambodia', phone: '855' }, + { code: 'KI', label: 'Kiribati', phone: '686' }, + { code: 'KM', label: 'Comoros', phone: '269' }, + { + code: 'KN', + label: 'Saint Kitts and Nevis', + phone: '1-869', + }, + { + code: 'KP', + label: "Korea, Democratic People's Republic of", + phone: '850', + }, + { code: 'KR', label: 'Korea, Republic of', phone: '82' }, + { code: 'KW', label: 'Kuwait', phone: '965' }, + { code: 'KY', label: 'Cayman Islands', phone: '1-345' }, + { code: 'KZ', label: 'Kazakhstan', phone: '7' }, + { + code: 'LA', + label: "Lao People's Democratic Republic", + phone: '856', + }, + { code: 'LB', label: 'Lebanon', phone: '961' }, + { code: 'LC', label: 'Saint Lucia', phone: '1-758' }, + { code: 'LI', label: 'Liechtenstein', phone: '423' }, + { code: 'LK', label: 'Sri Lanka', phone: '94' }, + { code: 'LR', label: 'Liberia', phone: '231' }, + { code: 'LS', label: 'Lesotho', phone: '266' }, + { code: 'LT', label: 'Lithuania', phone: '370' }, + { code: 'LU', label: 'Luxembourg', phone: '352' }, + { code: 'LV', label: 'Latvia', phone: '371' }, + { code: 'LY', label: 'Libya', phone: '218' }, + { code: 'MA', label: 'Morocco', phone: '212' }, + { code: 'MC', label: 'Monaco', phone: '377' }, + { + code: 'MD', + label: 'Moldova, Republic of', + phone: '373', + }, + { code: 'ME', label: 'Montenegro', phone: '382' }, + { + code: 'MF', + label: 'Saint Martin (French part)', + phone: '590', + }, + { code: 'MG', label: 'Madagascar', phone: '261' }, + { code: 'MH', label: 'Marshall Islands', phone: '692' }, + { + code: 'MK', + label: 'Macedonia, the Former Yugoslav Republic of', + phone: '389', + }, + { code: 'ML', label: 'Mali', phone: '223' }, + { code: 'MM', label: 'Myanmar', phone: '95' }, + { code: 'MN', label: 'Mongolia', phone: '976' }, + { code: 'MO', label: 'Macao', phone: '853' }, + { + code: 'MP', + label: 'Northern Mariana Islands', + phone: '1-670', + }, + { code: 'MQ', label: 'Martinique', phone: '596' }, + { code: 'MR', label: 'Mauritania', phone: '222' }, + { code: 'MS', label: 'Montserrat', phone: '1-664' }, + { code: 'MT', label: 'Malta', phone: '356' }, + { code: 'MU', label: 'Mauritius', phone: '230' }, + { code: 'MV', label: 'Maldives', phone: '960' }, + { code: 'MW', label: 'Malawi', phone: '265' }, + { code: 'MX', label: 'Mexico', phone: '52' }, + { code: 'MY', label: 'Malaysia', phone: '60' }, + { code: 'MZ', label: 'Mozambique', phone: '258' }, + { code: 'NA', label: 'Namibia', phone: '264' }, + { code: 'NC', label: 'New Caledonia', phone: '687' }, + { code: 'NE', label: 'Niger', phone: '227' }, + { code: 'NF', label: 'Norfolk Island', phone: '672' }, + { code: 'NG', label: 'Nigeria', phone: '234' }, + { code: 'NI', label: 'Nicaragua', phone: '505' }, + { code: 'NL', label: 'Netherlands', phone: '31' }, + { code: 'NO', label: 'Norway', phone: '47' }, + { code: 'NP', label: 'Nepal', phone: '977' }, + { code: 'NR', label: 'Nauru', phone: '674' }, + { code: 'NU', label: 'Niue', phone: '683' }, + { code: 'NZ', label: 'New Zealand', phone: '64' }, + { code: 'OM', label: 'Oman', phone: '968' }, + { code: 'PA', label: 'Panama', phone: '507' }, + { code: 'PE', label: 'Peru', phone: '51' }, + { code: 'PF', label: 'French Polynesia', phone: '689' }, + { code: 'PG', label: 'Papua New Guinea', phone: '675' }, + { code: 'PH', label: 'Philippines', phone: '63' }, + { code: 'PK', label: 'Pakistan', phone: '92' }, + { code: 'PL', label: 'Poland', phone: '48' }, + { + code: 'PM', + label: 'Saint Pierre and Miquelon', + phone: '508', + }, + { code: 'PN', label: 'Pitcairn', phone: '870' }, + { code: 'PR', label: 'Puerto Rico', phone: '1' }, + { + code: 'PS', + label: 'Palestine, State of', + phone: '970', + }, + { code: 'PT', label: 'Portugal', phone: '351' }, + { code: 'PW', label: 'Palau', phone: '680' }, + { code: 'PY', label: 'Paraguay', phone: '595' }, + { code: 'QA', label: 'Qatar', phone: '974' }, + { code: 'RE', label: 'Reunion', phone: '262' }, + { code: 'RO', label: 'Romania', phone: '40' }, + { code: 'RS', label: 'Serbia', phone: '381' }, + { code: 'RU', label: 'Russian Federation', phone: '7' }, + { code: 'RW', label: 'Rwanda', phone: '250' }, + { code: 'SA', label: 'Saudi Arabia', phone: '966' }, + { code: 'SB', label: 'Solomon Islands', phone: '677' }, + { code: 'SC', label: 'Seychelles', phone: '248' }, + { code: 'SD', label: 'Sudan', phone: '249' }, + { code: 'SE', label: 'Sweden', phone: '46' }, + { code: 'SG', label: 'Singapore', phone: '65' }, + { code: 'SH', label: 'Saint Helena', phone: '290' }, + { code: 'SI', label: 'Slovenia', phone: '386' }, + { + code: 'SJ', + label: 'Svalbard and Jan Mayen', + phone: '47', + }, + { code: 'SK', label: 'Slovakia', phone: '421' }, + { code: 'SL', label: 'Sierra Leone', phone: '232' }, + { code: 'SM', label: 'San Marino', phone: '378' }, + { code: 'SN', label: 'Senegal', phone: '221' }, + { code: 'SO', label: 'Somalia', phone: '252' }, + { code: 'SR', label: 'Suriname', phone: '597' }, + { code: 'SS', label: 'South Sudan', phone: '211' }, + { + code: 'ST', + label: 'Sao Tome and Principe', + phone: '239', + }, + { code: 'SV', label: 'El Salvador', phone: '503' }, + { + code: 'SX', + label: 'Sint Maarten (Dutch part)', + phone: '1-721', + }, + { + code: 'SY', + label: 'Syrian Arab Republic', + phone: '963', + }, + { code: 'SZ', label: 'Swaziland', phone: '268' }, + { + code: 'TC', + label: 'Turks and Caicos Islands', + phone: '1-649', + }, + { code: 'TD', label: 'Chad', phone: '235' }, + { + code: 'TF', + label: 'French Southern Territories', + phone: '262', + }, + { code: 'TG', label: 'Togo', phone: '228' }, + { code: 'TH', label: 'Thailand', phone: '66' }, + { code: 'TJ', label: 'Tajikistan', phone: '992' }, + { code: 'TK', label: 'Tokelau', phone: '690' }, + { code: 'TL', label: 'Timor-Leste', phone: '670' }, + { code: 'TM', label: 'Turkmenistan', phone: '993' }, + { code: 'TN', label: 'Tunisia', phone: '216' }, + { code: 'TO', label: 'Tonga', phone: '676' }, + { code: 'TR', label: 'Turkey', phone: '90' }, + { + code: 'TT', + label: 'Trinidad and Tobago', + phone: '1-868', + }, + { code: 'TV', label: 'Tuvalu', phone: '688' }, + { + code: 'TW', + label: 'Taiwan, Province of China', + phone: '886', + }, + { + code: 'TZ', + label: 'United Republic of Tanzania', + phone: '255', + }, + { code: 'UA', label: 'Ukraine', phone: '380' }, + { code: 'UG', label: 'Uganda', phone: '256' }, + { + code: 'US', + label: 'United States', + phone: '1', + suggested: true, + }, + { code: 'UY', label: 'Uruguay', phone: '598' }, + { code: 'UZ', label: 'Uzbekistan', phone: '998' }, + { + code: 'VA', + label: 'Holy See (Vatican City State)', + phone: '379', + }, + { + code: 'VC', + label: 'Saint Vincent and the Grenadines', + phone: '1-784', + }, + { code: 'VE', label: 'Venezuela', phone: '58' }, + { + code: 'VG', + label: 'British Virgin Islands', + phone: '1-284', + }, + { + code: 'VI', + label: 'US Virgin Islands', + phone: '1-340', + }, + { code: 'VN', label: 'Vietnam', phone: '84' }, + { code: 'VU', label: 'Vanuatu', phone: '678' }, + { code: 'WF', label: 'Wallis and Futuna', phone: '681' }, + { code: 'WS', label: 'Samoa', phone: '685' }, + { code: 'XK', label: 'Kosovo', phone: '383' }, + { code: 'YE', label: 'Yemen', phone: '967' }, + { code: 'YT', label: 'Mayotte', phone: '262' }, + { code: 'ZA', label: 'South Africa', phone: '27' }, + { code: 'ZM', label: 'Zambia', phone: '260' }, + { code: 'ZW', label: 'Zimbabwe', phone: '263' }, +]; diff --git a/template/src/assets/data/index.js b/template/src/assets/data/index.js new file mode 100644 index 0000000..8ab5434 --- /dev/null +++ b/template/src/assets/data/index.js @@ -0,0 +1 @@ +export * from './countries'; diff --git a/template/src/assets/illustrations/career-hero-illustration.jsx b/template/src/assets/illustrations/career-hero-illustration.jsx new file mode 100644 index 0000000..5209e2c --- /dev/null +++ b/template/src/assets/illustrations/career-hero-illustration.jsx @@ -0,0 +1,199 @@ +import { memo } from 'react'; +import { m } from 'framer-motion'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import { useTheme } from '@mui/material/styles'; + +import { useHoverParallax } from 'src/hooks/use-hover-parallax'; + +import Image from 'src/components/image'; +import SvgColor from 'src/components/svg-color'; + +import Icon from './pattern/icon'; +import Label from './pattern/label'; +import Character from './pattern/character'; +import Pattern02 from './pattern/pattern-02'; +import Pattern01 from './pattern/pattern-01'; + +// ---------------------------------------------------------------------- + +const stylesIcon = { + width: 40, + height: 40, + color: 'common.black', +}; + +// ---------------------------------------------------------------------- + +function CareerHeroIllustration({ sx, ...other }) { + const theme = useTheme(); + + const { offsetX, offsetY, onMouseMoveHandler, onMouseLeaveHandler } = useHoverParallax(); + + const BLUE = theme.palette.info.main; + + const GREEN = theme.palette.success.main; + + const YELLOW = theme.palette.warning.main; + + return ( + + <> + + {/* Accounting */} + + + + + + + + {/* Banking */} + + + + + + {/* Health Care */} + + + + + + {/* Software */} + + + + + + {/* Icon */} + + + } + /> + + + + {/* Icon */} + + + + } + /> + + + + {/* Icon */} + + + + } + /> + + + + + + + + ); +} + +CareerHeroIllustration.propTypes = { + sx: PropTypes.object, +}; + +export default memo(CareerHeroIllustration); diff --git a/template/src/assets/illustrations/elearning-hero-illustration.jsx b/template/src/assets/illustrations/elearning-hero-illustration.jsx new file mode 100644 index 0000000..963489f --- /dev/null +++ b/template/src/assets/illustrations/elearning-hero-illustration.jsx @@ -0,0 +1,188 @@ +import { memo } from 'react'; +import { m } from 'framer-motion'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Typography from '@mui/material/Typography'; +import { alpha, useTheme } from '@mui/material/styles'; + +import Image from 'src/components/image'; + +import Icon from './pattern/icon'; +import Label from './pattern/label'; +import Shape from './pattern/shape'; +import Pattern01 from './pattern/pattern-01'; +import Pattern02 from './pattern/pattern-02'; + +// ---------------------------------------------------------------------- + +const varUp = { + animate: { y: [-8, 8, -8], x: [-4, 4, -4] }, + transition: { duration: 8, repeat: Infinity }, +}; + +const varDown = { + animate: { y: [8, -8, 8], x: [4, -4, 4] }, + transition: { duration: 8, repeat: Infinity }, +}; + +const varLeft = { + animate: { x: [8, -8, 8], y: [4, -4, 4] }, + transition: { duration: 7, repeat: Infinity }, +}; + +const varRight = { + animate: { x: [8, -8, 8], y: [4, -4, 4] }, + transition: { duration: 7, repeat: Infinity }, +}; + +// ---------------------------------------------------------------------- + +function ElearningHeroIllustration({ sx, ...other }) { + const theme = useTheme(); + + const GREEN = theme.palette.success.main; + + const YELLOW = theme.palette.warning.main; + + const BLUE = '#355EC9'; + + const PURPLE = '#9B3AB1'; + + const styleIconContent = { + fontSize: 22, + color: 'common.black', + fontWeight: 'fontWeightBold', + }; + + return ( + + + teacher + + + + book icon + + + + pencil icon + + + + + + {/* Icon */} + + + Dw} + sx={{ transform: 'scale(1.2) rotate(15deg)' }} + /> + + + + Ai} + sx={{ transform: 'translateX(40px) scale(1.2) rotate(-15deg)' }} + /> + + + + Ae} + sx={{ transform: 'scale(1.2) translateY(20px) rotate(15deg)' }} + /> + + + + Ps} + sx={{ + transform: 'scale(1.2) translate(-135px, -75px) rotate(15deg)', + }} + /> + + + + + + + ); +} + +ElearningHeroIllustration.propTypes = { + sx: PropTypes.object, +}; + +export default memo(ElearningHeroIllustration); diff --git a/template/src/assets/illustrations/pattern/character.jsx b/template/src/assets/illustrations/pattern/character.jsx new file mode 100644 index 0000000..733f37d --- /dev/null +++ b/template/src/assets/illustrations/pattern/character.jsx @@ -0,0 +1,135 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import { useTheme } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +function Character({ front = false, ...other }) { + const theme = useTheme(); + + const PRIMARY_MAIN = theme.palette.primary.main; + + const PRIMARY_DARK = theme.palette.primary.dark; + + const PRIMARY_DARKER = theme.palette.primary.darker; + + const SECONDARY_MAIN = theme.palette.secondary.main; + + const SECONDARY_DARK = theme.palette.secondary.dark; + + const SECONDARY_DARKER = theme.palette.secondary.darker; + + return ( + + + {!front && ( + + )} + + + + + + + + + + + + + + + + + + ); +} + +Character.propTypes = { + front: PropTypes.bool, +}; + +export default memo(Character); diff --git a/template/src/assets/illustrations/pattern/circle.jsx b/template/src/assets/illustrations/pattern/circle.jsx new file mode 100644 index 0000000..c4d4025 --- /dev/null +++ b/template/src/assets/illustrations/pattern/circle.jsx @@ -0,0 +1,39 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; + +// ---------------------------------------------------------------------- + +function Circle({ children, hide = false, sx, ...other }) { + return ( + + {!hide && ( + + + + + + + + )} + + {children} + + ); +} + +Circle.propTypes = { + children: PropTypes.node, + hide: PropTypes.bool, + sx: PropTypes.object, +}; + +export default memo(Circle); diff --git a/template/src/assets/illustrations/pattern/dots.jsx b/template/src/assets/illustrations/pattern/dots.jsx new file mode 100644 index 0000000..7ecee0f --- /dev/null +++ b/template/src/assets/illustrations/pattern/dots.jsx @@ -0,0 +1,31 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; + +// ---------------------------------------------------------------------- + +function Dot({ size = 24, color = 'primary', sx }) { + return ( + + `linear-gradient(to bottom, ${theme.palette[color].light}, ${theme.palette[color].main})`, + boxShadow: (theme) => `inset 0px -2px 4px ${theme.palette[color].darker}`, + ...sx, + }} + /> + ); +} + +Dot.propTypes = { + color: PropTypes.string, + size: PropTypes.number, + sx: PropTypes.object, +}; +export default memo(Dot); diff --git a/template/src/assets/illustrations/pattern/icon.jsx b/template/src/assets/illustrations/pattern/icon.jsx new file mode 100644 index 0000000..143056d --- /dev/null +++ b/template/src/assets/illustrations/pattern/icon.jsx @@ -0,0 +1,93 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import { alpha, styled } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +const StyledContent = styled('div')(({ theme }) => ({ + width: 56, + height: 56, + borderRadius: theme.shape.borderRadius * 1.5, + position: 'relative', + display: 'flex', + overflow: 'hidden', + alignItems: 'center', + justifyContent: 'center', + clipPath: 'polygon(25% 0, 100% 0, 100% 100%, 0 100%, 0 25%)', + boxShadow: `inset 0px -4px 6px rgba(0, 0, 0, 0.48)`, +})); + +const StyledShape01 = styled('div')(() => ({ + top: -2, + left: -2, + width: 16, + zIndex: 9, + height: 16, + borderRadius: '5px', + position: 'absolute', + '&:before': { + top: 0, + left: 0, + width: 16, + height: 16, + content: '" "', + borderRadius: '5px', + position: 'absolute', + backgroundColor: 'rgba(255,255,255,0.4)', + }, +})); + +const StyledShape02 = styled('div')(({ theme }) => ({ + top: 2, + left: -10, + width: 18, + zIndex: 8, + height: 18, + opacity: 0.24, + position: 'absolute', + transform: 'rotate(45deg)', + backgroundColor: theme.palette.common.black, +})); + +// ---------------------------------------------------------------------- + +function Icon({ content, color, sx, ...other }) { + return ( + + `0px 24px 48px ${alpha(theme.palette.common.black, 0.4)}`, + }} + > + + + + {content} + + + + ); +} + +Icon.propTypes = { + color: PropTypes.string, + content: PropTypes.node, + sx: PropTypes.object, +}; + +export default memo(Icon); diff --git a/template/src/assets/illustrations/pattern/label.jsx b/template/src/assets/illustrations/pattern/label.jsx new file mode 100644 index 0000000..10380a7 --- /dev/null +++ b/template/src/assets/illustrations/pattern/label.jsx @@ -0,0 +1,43 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Stack from '@mui/material/Stack'; + +// ---------------------------------------------------------------------- + +function Label({ icon, text, sx, ...other }) { + return ( + + `0px 24px 48px rgba(0, 0, 0, 0.8), inset 0px -4px 10px ${theme.palette.grey[600]}`, + '& > div': { lineHeight: 0 }, + '& svg': { width: 44, height: 44 }, + ...sx, + }} + {...other} + > + {icon} + {text} + + ); +} + +Label.propTypes = { + icon: PropTypes.node, + sx: PropTypes.object, + text: PropTypes.string, +}; + +export default memo(Label); diff --git a/template/src/assets/illustrations/pattern/pattern-01.jsx b/template/src/assets/illustrations/pattern/pattern-01.jsx new file mode 100644 index 0000000..6fbef86 --- /dev/null +++ b/template/src/assets/illustrations/pattern/pattern-01.jsx @@ -0,0 +1,127 @@ +import { memo } from 'react'; +import { m } from 'framer-motion'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import { useTheme } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +const varUp = { + animate: { y: [-12, 12, -12] }, + transition: { duration: 8, repeat: Infinity }, +}; + +const varDown = { + animate: { y: [12, -12, 12] }, + transition: { duration: 8, repeat: Infinity }, +}; + +const varLeft = { + animate: { x: [10, -10, 10] }, + transition: { duration: 7, repeat: Infinity }, +}; + +const varRight = { + animate: { x: [10, -10, 10] }, + transition: { duration: 7, repeat: Infinity }, +}; + +// ---------------------------------------------------------------------- + +function Pattern01({ sx, ...other }) { + const theme = useTheme(); + + const PURPLE = '#DC8CFF'; + const BLUE = theme.palette.info.light; + const RED = theme.palette.error.light; + const CYAN = theme.palette.info.lighter; + const GREEN = theme.palette.success.light; + const ORANGE = theme.palette.warning.light; + + return ( + + + + + + + + + + + + + + + + ); +} + +Pattern01.propTypes = { + sx: PropTypes.object, +}; + +export default memo(Pattern01); diff --git a/template/src/assets/illustrations/pattern/pattern-02.jsx b/template/src/assets/illustrations/pattern/pattern-02.jsx new file mode 100644 index 0000000..775efe2 --- /dev/null +++ b/template/src/assets/illustrations/pattern/pattern-02.jsx @@ -0,0 +1,59 @@ +import { memo } from 'react'; +import { m } from 'framer-motion'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; + +import Dot from './dots'; +import Circle from './circle'; + +// ---------------------------------------------------------------------- + +const animateDown = (duration = 60) => ({ + animate: { rotate: [360, 0] }, + transition: { duration, repeat: Infinity, ease: 'linear' }, +}); + +const animateUp = (duration = 60) => ({ + animate: { rotate: [0, 360] }, + transition: { duration, repeat: Infinity, ease: 'linear' }, +}); + +function Pattern02({ sx, ...other }) { + return ( + + + + + + + + + + + + + + + + + + ); +} + +Pattern02.propTypes = { + sx: PropTypes.object, +}; + +export default memo(Pattern02); diff --git a/template/src/assets/illustrations/pattern/shape.jsx b/template/src/assets/illustrations/pattern/shape.jsx new file mode 100644 index 0000000..3de20c8 --- /dev/null +++ b/template/src/assets/illustrations/pattern/shape.jsx @@ -0,0 +1,63 @@ +import { memo } from 'react'; + +import Box from '@mui/material/Box'; +import { useTheme } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +function Shape({ ...other }) { + const theme = useTheme(); + + const PRIMARY_LIGHT = theme.palette.primary.light; + + const PRIMARY_MAIN = theme.palette.primary.main; + + const SECONDARY_LIGHT = theme.palette.secondary.light; + + const SECONDARY_MAIN = theme.palette.secondary.main; + + return ( + + + + + + + + + + + + + + + + + + + + + ); +} + +export default memo(Shape); diff --git a/template/src/components/animate/index.js b/template/src/components/animate/index.js new file mode 100644 index 0000000..a08ceb5 --- /dev/null +++ b/template/src/components/animate/index.js @@ -0,0 +1,6 @@ +// ---------------------------------------------------------------------- + +export * from './variants'; + +export { default as MotionViewport } from './motion-viewport'; +export { default as MotionContainer } from './motion-container'; diff --git a/template/src/components/animate/motion-container.jsx b/template/src/components/animate/motion-container.jsx new file mode 100644 index 0000000..b147acf --- /dev/null +++ b/template/src/components/animate/motion-container.jsx @@ -0,0 +1,43 @@ +import { m } from 'framer-motion'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; + +import { varContainer } from './variants'; + +// ---------------------------------------------------------------------- + +export default function MotionContainer({ animate, action = false, children, ...other }) { + if (action) { + return ( + + {children} + + ); + } + + return ( + + {children} + + ); +} + +MotionContainer.propTypes = { + action: PropTypes.bool, + animate: PropTypes.bool, + children: PropTypes.node, +}; diff --git a/template/src/components/animate/motion-lazy.jsx b/template/src/components/animate/motion-lazy.jsx new file mode 100644 index 0000000..954b022 --- /dev/null +++ b/template/src/components/animate/motion-lazy.jsx @@ -0,0 +1,16 @@ +import PropTypes from 'prop-types'; +import { m, domMax, LazyMotion } from 'framer-motion'; + +// ---------------------------------------------------------------------- + +export function MotionLazy({ children }) { + return ( + + {children} + + ); +} + +MotionLazy.propTypes = { + children: PropTypes.node, +}; diff --git a/template/src/components/animate/motion-viewport.jsx b/template/src/components/animate/motion-viewport.jsx new file mode 100644 index 0000000..c30d86f --- /dev/null +++ b/template/src/components/animate/motion-viewport.jsx @@ -0,0 +1,36 @@ +import { m } from 'framer-motion'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; + +import { useResponsive } from 'src/hooks/use-responsive'; + +import { varContainer } from './variants'; + +// ---------------------------------------------------------------------- + +export default function MotionViewport({ children, disableAnimatedMobile = true, ...other }) { + const smDown = useResponsive('down', 'sm'); + + if (smDown && disableAnimatedMobile) { + return {children}; + } + + return ( + + {children} + + ); +} + +MotionViewport.propTypes = { + children: PropTypes.node, + disableAnimatedMobile: PropTypes.bool, +}; diff --git a/template/src/components/animate/variants/actions.js b/template/src/components/animate/variants/actions.js new file mode 100644 index 0000000..e910044 --- /dev/null +++ b/template/src/components/animate/variants/actions.js @@ -0,0 +1,6 @@ +// ---------------------------------------------------------------------- + +export const varHover = (hover = 1.09, tap = 0.97) => ({ + hover: { scale: hover }, + tap: { scale: tap }, +}); diff --git a/template/src/components/animate/variants/background.js b/template/src/components/animate/variants/background.js new file mode 100644 index 0000000..c9a8822 --- /dev/null +++ b/template/src/components/animate/variants/background.js @@ -0,0 +1,103 @@ +// ---------------------------------------------------------------------- + +export const varBgColor = (props) => { + const colors = props?.colors || ['#19dcea', '#b22cff']; + const duration = props?.duration || 5; + const ease = props?.ease || 'linear'; + + return { + animate: { + background: colors, + transition: { duration, ease }, + }, + }; +}; + +// ---------------------------------------------------------------------- + +export const varBgKenburns = (props) => { + const duration = props?.duration || 5; + const ease = props?.ease || 'easeOut'; + + return { + top: { + animate: { + scale: [1, 1.25], + y: [0, -15], + transformOrigin: ['50% 16%', '50% top'], + transition: { duration, ease }, + }, + }, + bottom: { + animate: { + scale: [1, 1.25], + y: [0, 15], + transformOrigin: ['50% 84%', '50% bottom'], + transition: { duration, ease }, + }, + }, + left: { + animate: { + scale: [1, 1.25], + x: [0, 20], + y: [0, 15], + transformOrigin: ['16% 50%', '0% left'], + transition: { duration, ease }, + }, + }, + right: { + animate: { + scale: [1, 1.25], + x: [0, -20], + y: [0, -15], + transformOrigin: ['84% 50%', '0% right'], + transition: { duration, ease }, + }, + }, + }; +}; + +// ---------------------------------------------------------------------- + +export const varBgPan = (props) => { + const colors = props?.colors || ['#ee7752', '#e73c7e', '#23a6d5', '#23d5ab']; + const duration = props?.duration || 5; + const ease = props?.ease || 'linear'; + + const gradient = (deg) => `linear-gradient(${deg}deg, ${colors})`; + + return { + top: { + animate: { + backgroundImage: [gradient(0), gradient(0)], + backgroundPosition: ['center 99%', 'center 1%'], + backgroundSize: ['100% 600%', '100% 600%'], + transition: { duration, ease }, + }, + }, + right: { + animate: { + backgroundPosition: ['1% center', '99% center'], + backgroundImage: [gradient(270), gradient(270)], + backgroundSize: ['600% 100%', '600% 100%'], + transition: { duration, ease }, + }, + }, + bottom: { + animate: { + backgroundImage: [gradient(0), gradient(0)], + backgroundPosition: ['center 1%', 'center 99%'], + backgroundSize: ['100% 600%', '100% 600%'], + transition: { duration, ease }, + }, + }, + left: { + animate: { + backgroundPosition: ['99% center', '1% center'], + backgroundImage: [gradient(270), gradient(270)], + backgroundSize: ['600% 100%', '600% 100%'], + transition: { duration, ease }, + }, + }, + }; +}; diff --git a/template/src/components/animate/variants/bounce.js b/template/src/components/animate/variants/bounce.js new file mode 100644 index 0000000..c1f2efa --- /dev/null +++ b/template/src/components/animate/variants/bounce.js @@ -0,0 +1,111 @@ +import { varTranExit, varTranEnter } from './transition'; + +// ---------------------------------------------------------------------- + +export const varBounce = (props) => { + const durationIn = props?.durationIn; + const durationOut = props?.durationOut; + const easeIn = props?.easeIn; + const easeOut = props?.easeOut; + + return { + // IN + in: { + initial: {}, + animate: { + scale: [0.3, 1.1, 0.9, 1.03, 0.97, 1], + opacity: [0, 1, 1, 1, 1, 1], + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scale: [0.9, 1.1, 0.3], + opacity: [1, 1, 0], + }, + }, + inUp: { + initial: {}, + animate: { + y: [720, -24, 12, -4, 0], + scaleY: [4, 0.9, 0.95, 0.985, 1], + opacity: [0, 1, 1, 1, 1], + transition: { ...varTranEnter({ durationIn, easeIn }) }, + }, + exit: { + y: [12, -24, 720], + scaleY: [0.985, 0.9, 3], + opacity: [1, 1, 0], + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inDown: { + initial: {}, + animate: { + y: [-720, 24, -12, 4, 0], + scaleY: [4, 0.9, 0.95, 0.985, 1], + opacity: [0, 1, 1, 1, 1], + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + y: [-12, 24, -720], + scaleY: [0.985, 0.9, 3], + opacity: [1, 1, 0], + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inLeft: { + initial: {}, + animate: { + x: [-720, 24, -12, 4, 0], + scaleX: [3, 1, 0.98, 0.995, 1], + opacity: [0, 1, 1, 1, 1], + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + x: [0, 24, -720], + scaleX: [1, 0.9, 2], + opacity: [1, 1, 0], + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inRight: { + initial: {}, + animate: { + x: [720, -24, 12, -4, 0], + scaleX: [3, 1, 0.98, 0.995, 1], + opacity: [0, 1, 1, 1, 1], + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + x: [0, -24, 720], + scaleX: [1, 0.9, 2], + opacity: [1, 1, 0], + transition: varTranExit({ durationOut, easeOut }), + }, + }, + + // OUT + out: { + animate: { scale: [0.9, 1.1, 0.3], opacity: [1, 1, 0] }, + }, + outUp: { + animate: { + y: [-12, 24, -720], + scaleY: [0.985, 0.9, 3], + opacity: [1, 1, 0], + }, + }, + outDown: { + animate: { + y: [12, -24, 720], + scaleY: [0.985, 0.9, 3], + opacity: [1, 1, 0], + }, + }, + outLeft: { + animate: { x: [0, 24, -720], scaleX: [1, 0.9, 2], opacity: [1, 1, 0] }, + }, + outRight: { + animate: { x: [0, -24, 720], scaleX: [1, 0.9, 2], opacity: [1, 1, 0] }, + }, + }; +}; diff --git a/template/src/components/animate/variants/container.js b/template/src/components/animate/variants/container.js new file mode 100644 index 0000000..9edf946 --- /dev/null +++ b/template/src/components/animate/variants/container.js @@ -0,0 +1,22 @@ +// ---------------------------------------------------------------------- + +export const varContainer = (props) => { + const staggerIn = props?.staggerIn || 0.05; + const delayIn = props?.staggerIn || 0.05; + const staggerOut = props?.staggerIn || 0.05; + + return { + animate: { + transition: { + staggerChildren: staggerIn, + delayChildren: delayIn, + }, + }, + exit: { + transition: { + staggerChildren: staggerOut, + staggerDirection: -1, + }, + }, + }; +}; diff --git a/template/src/components/animate/variants/fade.js b/template/src/components/animate/variants/fade.js new file mode 100644 index 0000000..5edf310 --- /dev/null +++ b/template/src/components/animate/variants/fade.js @@ -0,0 +1,131 @@ +import { varTranExit, varTranEnter } from './transition'; + +// ---------------------------------------------------------------------- + +export const varFade = (props) => { + const distance = props?.distance || 120; + const durationIn = props?.durationIn; + const durationOut = props?.durationOut; + const easeIn = props?.easeIn; + const easeOut = props?.easeOut; + + return { + // IN + in: { + initial: { opacity: 0 }, + animate: { opacity: 1, transition: varTranEnter }, + exit: { opacity: 0, transition: varTranExit }, + }, + inUp: { + initial: { y: distance, opacity: 0 }, + animate: { + y: 0, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + y: distance, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inDown: { + initial: { y: -distance, opacity: 0 }, + animate: { + y: 0, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + y: -distance, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inLeft: { + initial: { x: -distance, opacity: 0 }, + animate: { + x: 0, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + x: -distance, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inRight: { + initial: { x: distance, opacity: 0 }, + animate: { + x: 0, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + x: distance, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + + // OUT + out: { + initial: { opacity: 1 }, + animate: { opacity: 0, transition: varTranEnter({ durationIn, easeIn }) }, + exit: { opacity: 1, transition: varTranExit({ durationOut, easeOut }) }, + }, + outUp: { + initial: { y: 0, opacity: 1 }, + animate: { + y: -distance, + opacity: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + y: 0, + opacity: 1, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + outDown: { + initial: { y: 0, opacity: 1 }, + animate: { + y: distance, + opacity: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + y: 0, + opacity: 1, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + outLeft: { + initial: { x: 0, opacity: 1 }, + animate: { + x: -distance, + opacity: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + x: 0, + opacity: 1, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + outRight: { + initial: { x: 0, opacity: 1 }, + animate: { + x: distance, + opacity: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + x: 0, + opacity: 1, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + }; +}; diff --git a/template/src/components/animate/variants/flip.js b/template/src/components/animate/variants/flip.js new file mode 100644 index 0000000..809a261 --- /dev/null +++ b/template/src/components/animate/variants/flip.js @@ -0,0 +1,58 @@ +import { varTranExit, varTranEnter } from './transition'; + +// ---------------------------------------------------------------------- + +export const varFlip = (props) => { + const durationIn = props?.durationIn; + const durationOut = props?.durationOut; + const easeIn = props?.easeIn; + const easeOut = props?.easeOut; + + return { + // IN + inX: { + initial: { rotateX: -180, opacity: 0 }, + animate: { + rotateX: 0, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + rotateX: -180, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inY: { + initial: { rotateY: -180, opacity: 0 }, + animate: { + rotateY: 0, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + rotateY: -180, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + + // OUT + outX: { + initial: { rotateX: 0, opacity: 1 }, + animate: { + rotateX: 70, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + outY: { + initial: { rotateY: 0, opacity: 1 }, + animate: { + rotateY: 70, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + }; +}; diff --git a/template/src/components/animate/variants/index.js b/template/src/components/animate/variants/index.js new file mode 100644 index 0000000..ed93345 --- /dev/null +++ b/template/src/components/animate/variants/index.js @@ -0,0 +1,12 @@ +export * from './path'; +export * from './fade'; +export * from './zoom'; +export * from './flip'; +export * from './slide'; +export * from './scale'; +export * from './bounce'; +export * from './rotate'; +export * from './actions'; +export * from './container'; +export * from './transition'; +export * from './background'; diff --git a/template/src/components/animate/variants/path.js b/template/src/components/animate/variants/path.js new file mode 100644 index 0000000..a4bee2c --- /dev/null +++ b/template/src/components/animate/variants/path.js @@ -0,0 +1,14 @@ +// ---------------------------------------------------------------------- + +export const TRANSITION = { + duration: 2, + ease: [0.43, 0.13, 0.23, 0.96], +}; + +export const varPath = { + animate: { + fillOpacity: [0, 0, 1], + pathLength: [1, 0.4, 0], + transition: TRANSITION, + }, +}; diff --git a/template/src/components/animate/variants/rotate.js b/template/src/components/animate/variants/rotate.js new file mode 100644 index 0000000..474b6b7 --- /dev/null +++ b/template/src/components/animate/variants/rotate.js @@ -0,0 +1,37 @@ +import { varTranExit, varTranEnter } from './transition'; + +// ---------------------------------------------------------------------- + +export const varRotate = (props) => { + const durationIn = props?.durationIn; + const durationOut = props?.durationOut; + const easeIn = props?.easeIn; + const easeOut = props?.easeOut; + + return { + // IN + in: { + initial: { opacity: 0, rotate: -360 }, + animate: { + opacity: 1, + rotate: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + opacity: 0, + rotate: -360, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + + // OUT + out: { + initial: { opacity: 1, rotate: 0 }, + animate: { + opacity: 0, + rotate: -360, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + }; +}; diff --git a/template/src/components/animate/variants/scale.js b/template/src/components/animate/variants/scale.js new file mode 100644 index 0000000..5037bfd --- /dev/null +++ b/template/src/components/animate/variants/scale.js @@ -0,0 +1,58 @@ +import { varTranExit, varTranEnter } from './transition'; + +// ---------------------------------------------------------------------- + +export const varScale = (props) => { + const durationIn = props?.durationIn; + const durationOut = props?.durationOut; + const easeIn = props?.easeIn; + const easeOut = props?.easeOut; + + return { + // IN + inX: { + initial: { scaleX: 0, opacity: 0 }, + animate: { + scaleX: 1, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scaleX: 0, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inY: { + initial: { scaleY: 0, opacity: 0 }, + animate: { + scaleY: 1, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scaleY: 0, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + + // OUT + outX: { + initial: { scaleX: 1, opacity: 1 }, + animate: { + scaleX: 0, + opacity: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + }, + outY: { + initial: { scaleY: 1, opacity: 1 }, + animate: { + scaleY: 0, + opacity: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + }, + }; +}; diff --git a/template/src/components/animate/variants/slide.js b/template/src/components/animate/variants/slide.js new file mode 100644 index 0000000..8482d09 --- /dev/null +++ b/template/src/components/animate/variants/slide.js @@ -0,0 +1,69 @@ +import { varTranExit, varTranEnter } from './transition'; + +// ---------------------------------------------------------------------- + +export const varSlide = (props) => { + const distance = props?.distance || 160; + const durationIn = props?.durationIn; + const durationOut = props?.durationOut; + const easeIn = props?.easeIn; + const easeOut = props?.easeOut; + + return { + // IN + inUp: { + initial: { y: distance }, + animate: { y: 0, transition: varTranEnter({ durationIn, easeIn }) }, + exit: { y: distance, transition: varTranExit({ durationOut, easeOut }) }, + }, + inDown: { + initial: { y: -distance }, + animate: { y: 0, transition: varTranEnter({ durationIn, easeIn }) }, + exit: { y: -distance, transition: varTranExit({ durationOut, easeOut }) }, + }, + inLeft: { + initial: { x: -distance }, + animate: { x: 0, transition: varTranEnter({ durationIn, easeIn }) }, + exit: { x: -distance, transition: varTranExit({ durationOut, easeOut }) }, + }, + inRight: { + initial: { x: distance }, + animate: { x: 0, transition: varTranEnter({ durationIn, easeIn }) }, + exit: { x: distance, transition: varTranExit({ durationOut, easeOut }) }, + }, + + // OUT + outUp: { + initial: { y: 0 }, + animate: { + y: -distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { y: 0, transition: varTranExit({ durationOut, easeOut }) }, + }, + outDown: { + initial: { y: 0 }, + animate: { + y: distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { y: 0, transition: varTranExit({ durationOut, easeOut }) }, + }, + outLeft: { + initial: { x: 0 }, + animate: { + x: -distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { x: 0, transition: varTranExit({ durationOut, easeOut }) }, + }, + outRight: { + initial: { x: 0 }, + animate: { + x: distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { x: 0, transition: varTranExit({ durationOut, easeOut }) }, + }, + }; +}; diff --git a/template/src/components/animate/variants/transition.js b/template/src/components/animate/variants/transition.js new file mode 100644 index 0000000..adf4dc2 --- /dev/null +++ b/template/src/components/animate/variants/transition.js @@ -0,0 +1,22 @@ +// ---------------------------------------------------------------------- + +export const varTranHover = (props) => { + const duration = props?.duration || 0.32; + const ease = props?.ease || [0.43, 0.13, 0.23, 0.96]; + + return { duration, ease }; +}; + +export const varTranEnter = (props) => { + const duration = props?.durationIn || 0.64; + const ease = props?.easeIn || [0.43, 0.13, 0.23, 0.96]; + + return { duration, ease }; +}; + +export const varTranExit = (props) => { + const duration = props?.durationOut || 0.48; + const ease = props?.easeOut || [0.43, 0.13, 0.23, 0.96]; + + return { duration, ease }; +}; diff --git a/template/src/components/animate/variants/zoom.js b/template/src/components/animate/variants/zoom.js new file mode 100644 index 0000000..b9fcbad --- /dev/null +++ b/template/src/components/animate/variants/zoom.js @@ -0,0 +1,134 @@ +import { varTranExit, varTranEnter } from './transition'; + +// ---------------------------------------------------------------------- + +export const varZoom = (props) => { + const distance = props?.distance || 720; + const durationIn = props?.durationIn; + const durationOut = props?.durationOut; + const easeIn = props?.easeIn; + const easeOut = props?.easeOut; + + return { + // IN + in: { + initial: { scale: 0, opacity: 0 }, + animate: { + scale: 1, + opacity: 1, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scale: 0, + opacity: 0, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inUp: { + initial: { scale: 0, opacity: 0, translateY: distance }, + animate: { + scale: 1, + opacity: 1, + translateY: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scale: 0, + opacity: 0, + translateY: distance, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inDown: { + initial: { scale: 0, opacity: 0, translateY: -distance }, + animate: { + scale: 1, + opacity: 1, + translateY: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scale: 0, + opacity: 0, + translateY: -distance, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inLeft: { + initial: { scale: 0, opacity: 0, translateX: -distance }, + animate: { + scale: 1, + opacity: 1, + translateX: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scale: 0, + opacity: 0, + translateX: -distance, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + inRight: { + initial: { scale: 0, opacity: 0, translateX: distance }, + animate: { + scale: 1, + opacity: 1, + translateX: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + exit: { + scale: 0, + opacity: 0, + translateX: distance, + transition: varTranExit({ durationOut, easeOut }), + }, + }, + + // OUT + out: { + initial: { scale: 1, opacity: 1 }, + animate: { + scale: 0, + opacity: 0, + transition: varTranEnter({ durationIn, easeIn }), + }, + }, + outUp: { + initial: { scale: 1, opacity: 1 }, + animate: { + scale: 0, + opacity: 0, + translateY: -distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + }, + outDown: { + initial: { scale: 1, opacity: 1 }, + animate: { + scale: 0, + opacity: 0, + translateY: distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + }, + outLeft: { + initial: { scale: 1, opacity: 1 }, + animate: { + scale: 0, + opacity: 0, + translateX: -distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + }, + outRight: { + initial: { scale: 1, opacity: 1 }, + animate: { + scale: 0, + opacity: 0, + translateX: distance, + transition: varTranEnter({ durationIn, easeIn }), + }, + }, + }; +}; diff --git a/template/src/components/carousel/arrow-icons.jsx b/template/src/components/carousel/arrow-icons.jsx new file mode 100644 index 0000000..b1b6bc2 --- /dev/null +++ b/template/src/components/carousel/arrow-icons.jsx @@ -0,0 +1,42 @@ +import PropTypes from 'prop-types'; + +import Iconify from '../iconify'; + +// ---------------------------------------------------------------------- + +export function LeftIcon({ icon = 'eva:arrow-ios-forward-fill', isRTL }) { + return ( + + ); +} + +LeftIcon.propTypes = { + icon: PropTypes.string, + isRTL: PropTypes.bool, +}; + +export function RightIcon({ icon = 'eva:arrow-ios-forward-fill', isRTL }) { + return ( + + ); +} + +RightIcon.propTypes = { + icon: PropTypes.string, + isRTL: PropTypes.bool, +}; diff --git a/template/src/components/carousel/carousel-arrow-index.jsx b/template/src/components/carousel/carousel-arrow-index.jsx new file mode 100644 index 0000000..c7a5b8f --- /dev/null +++ b/template/src/components/carousel/carousel-arrow-index.jsx @@ -0,0 +1,69 @@ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; +import { styled, useTheme } from '@mui/material/styles'; + +import { bgBlur } from 'src/theme/css'; + +import { LeftIcon, RightIcon } from './arrow-icons'; + +// ---------------------------------------------------------------------- + +const StyledRoot = styled(Box)(({ theme }) => ({ + ...bgBlur({ + opacity: 0.48, + color: theme.palette.grey[900], + }), + zIndex: 9, + display: 'inline-flex', + alignItems: 'center', + position: 'absolute', + bottom: theme.spacing(2), + right: theme.spacing(2), + padding: theme.spacing(0.25), + color: theme.palette.common.white, + borderRadius: theme.shape.borderRadius, +})); + +const StyledIconButton = styled(IconButton)({ + width: 28, + height: 28, + padding: 0, + opacity: 0.48, + '&:hover': { opacity: 1 }, +}); + +// ---------------------------------------------------------------------- + +export default function CarouselArrowIndex({ index, total, onNext, onPrev, icon, sx, ...other }) { + const theme = useTheme(); + + const isRTL = theme.direction === 'rtl'; + + return ( + + + + + + + {index + 1}/{total} + + + + + + + ); +} + +CarouselArrowIndex.propTypes = { + icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]), + index: PropTypes.number, + onNext: PropTypes.func, + onPrev: PropTypes.func, + sx: PropTypes.object, + total: PropTypes.number, +}; diff --git a/template/src/components/carousel/carousel-arrows.jsx b/template/src/components/carousel/carousel-arrows.jsx new file mode 100644 index 0000000..423600f --- /dev/null +++ b/template/src/components/carousel/carousel-arrows.jsx @@ -0,0 +1,127 @@ +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; +import IconButton from '@mui/material/IconButton'; +import { alpha, styled, useTheme } from '@mui/material/styles'; +// + +import { LeftIcon, RightIcon } from './arrow-icons'; + +// ---------------------------------------------------------------------- + +const StyledIconButton = styled(IconButton, { + shouldForwardProp: (prop) => prop !== 'filled' && prop !== 'hasChild' && prop !== 'shape', +})(({ filled, shape, hasChild, theme }) => ({ + color: 'inherit', + transition: theme.transitions.create('all', { + duration: theme.transitions.duration.shorter, + }), + ...(shape === 'rounded' && { + borderRadius: theme.shape.borderRadius * 1.5, + }), + ...(!filled && { + opacity: 0.48, + '&:hover': { + opacity: 1, + }, + }), + ...(filled && { + color: alpha(theme.palette.common.white, 0.8), + backgroundColor: alpha(theme.palette.grey[900], 0.48), + '&:hover': { + color: theme.palette.common.white, + backgroundColor: theme.palette.grey[900], + }, + }), + ...(hasChild && { + zIndex: 9, + top: '50%', + position: 'absolute', + marginTop: theme.spacing(-2.5), + }), +})); + +// ---------------------------------------------------------------------- + +export default function CarouselArrows({ + shape = 'circular', + filled = false, + icon, + onNext, + onPrev, + children, + leftButtonProps, + rightButtonProps, + sx, + ...other +}) { + const theme = useTheme(); + + const isRTL = theme.direction === 'rtl'; + + const hasChild = !!children; + + if (hasChild) { + return ( + + {onNext && ( + + + + )} + + {children} + + {onPrev && ( + + + + )} + + ); + } + + return ( + + + + + + + + + + ); +} + +CarouselArrows.propTypes = { + children: PropTypes.node, + filled: PropTypes.bool, + icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]), + leftButtonProps: PropTypes.object, + onNext: PropTypes.func, + onPrev: PropTypes.func, + rightButtonProps: PropTypes.object, + shape: PropTypes.oneOf(['circular', 'rounded']), + sx: PropTypes.object, +}; diff --git a/template/src/components/carousel/carousel-dots.jsx b/template/src/components/carousel/carousel-dots.jsx new file mode 100644 index 0000000..c6ec5db --- /dev/null +++ b/template/src/components/carousel/carousel-dots.jsx @@ -0,0 +1,85 @@ +/* eslint-disable react/jsx-no-useless-fragment */ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Stack from '@mui/material/Stack'; +import { styled } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +const StyledRoot = styled(Box, { + shouldForwardProp: (prop) => prop !== 'rounded', +})(({ rounded, theme }) => ({ + zIndex: 9, + margin: 0, + padding: 0, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: theme.palette.primary.main, + '& li': { + width: 18, + height: 18, + opacity: 0.32, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + cursor: 'pointer', + '&.slick-active': { + opacity: 1, + ...(rounded && { + '& span': { + width: 16, + borderRadius: 6, + }, + }), + }, + }, +})); + +const StyledDot = styled('span')(({ theme }) => ({ + width: 8, + height: 8, + borderRadius: '50%', + transition: theme.transitions.create(['width'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.short, + }), +})); + +// ---------------------------------------------------------------------- + +export default function CarouselDots(props) { + const rounded = props?.rounded || false; + + const sx = props?.sx; + + return { + appendDots: (dots) => ( + <> + + {dots} + + + ), + customPaging: () => ( + + + + ), + }; +} + +CarouselDots.propTypes = { + rounded: PropTypes.bool, + sx: PropTypes.object, +}; diff --git a/template/src/components/carousel/index.js b/template/src/components/carousel/index.js new file mode 100644 index 0000000..d20092a --- /dev/null +++ b/template/src/components/carousel/index.js @@ -0,0 +1,9 @@ +import Carousel from 'react-slick'; + +export { default as useCarousel } from './use-carousel'; +export { default as CarouselDots } from './carousel-dots'; +export { default as CarouselArrows } from './carousel-arrows'; + +export { default as CarouselArrowIndex } from './carousel-arrow-index'; + +export default Carousel; diff --git a/template/src/components/carousel/use-carousel.js b/template/src/components/carousel/use-carousel.js new file mode 100644 index 0000000..096fec3 --- /dev/null +++ b/template/src/components/carousel/use-carousel.js @@ -0,0 +1,65 @@ +import { useRef, useState, useCallback } from 'react'; + +import { useTheme } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +export default function useCarousel(props) { + const theme = useTheme(); + + const carouselRef = useRef(null); + + const [currentIndex, setCurrentIndex] = useState(props?.initialSlide || 0); + + const [nav, setNav] = useState(undefined); + + const rtl = theme.direction === 'rtl'; + + const carouselSettings = { + arrows: false, + dots: !!props?.customPaging, + rtl, + beforeChange: (current, next) => setCurrentIndex(next), + ...props, + fade: !!(props?.fade && !rtl), + }; + + const onSetNav = useCallback(() => { + if (carouselRef.current) { + setNav(carouselRef.current); + } + }, []); + + const onPrev = useCallback(() => { + if (carouselRef.current) { + carouselRef.current.slickPrev(); + } + }, []); + + const onNext = useCallback(() => { + if (carouselRef.current) { + carouselRef.current.slickNext(); + } + }, []); + + const onTogo = useCallback((index) => { + if (carouselRef.current) { + carouselRef.current.slickGoTo(index); + } + }, []); + + return { + nav, + carouselRef, + currentIndex, + carouselSettings, + // + onPrev, + onNext, + onTogo, + onSetNav, + // + setNav, + setCurrentIndex, + }; +} diff --git a/template/src/components/count-up/count-up.jsx b/template/src/components/count-up/count-up.jsx new file mode 100644 index 0000000..e6e96f2 --- /dev/null +++ b/template/src/components/count-up/count-up.jsx @@ -0,0 +1,24 @@ +import { useRef } from 'react'; +import PropTypes from 'prop-types'; +import ReactCountUp from 'react-countup'; +import { useInView } from 'framer-motion'; + +import Box from '@mui/material/Box'; + +// ---------------------------------------------------------------------- + +export default function CountUp({ sx, ...other }) { + const ref = useRef(null); + + const isInView = useInView(ref, { once: true }); + + return ( + + {isInView && } + + ); +} + +CountUp.propTypes = { + sx: PropTypes.object, +}; diff --git a/template/src/components/count-up/index.js b/template/src/components/count-up/index.js new file mode 100644 index 0000000..00f2671 --- /dev/null +++ b/template/src/components/count-up/index.js @@ -0,0 +1 @@ +export { default } from './count-up'; diff --git a/template/src/components/country-select/country-select.jsx b/template/src/components/country-select/country-select.jsx new file mode 100644 index 0000000..d1f15b5 --- /dev/null +++ b/template/src/components/country-select/country-select.jsx @@ -0,0 +1,137 @@ +import PropTypes from 'prop-types'; + +import Chip from '@mui/material/Chip'; +import TextField from '@mui/material/TextField'; +import Autocomplete from '@mui/material/Autocomplete'; +import InputAdornment from '@mui/material/InputAdornment'; +import { filledInputClasses } from '@mui/material/FilledInput'; + +import { countries } from 'src/assets/data'; + +import Iconify from 'src/components/iconify'; + +// ---------------------------------------------------------------------- + +export default function CountrySelect({ + label, + error, + helperText, + hiddenLabel, + placeholder, + ...other +}) { + const { multiple } = other; + + return ( + { + const country = getCountry(option); + + if (!country.label) { + return null; + } + + return ( +
  • + + {country.label} ({country.code}) +{country.phone} +
  • + ); + }} + renderInput={(params) => { + const country = getCountry(params.inputProps.value); + + const baseField = { + ...params, + label, + placeholder, + error: !!error, + helperText, + hiddenLabel, + inputProps: { + ...params.inputProps, + autoComplete: 'new-password', + }, + }; + + if (multiple) { + return ; + } + + return ( + + + + ), + }} + sx={{ + ...(!hiddenLabel && { + [`& .${filledInputClasses.root}`]: { + '& .component-iconify': { + mt: -2, + }, + }, + }), + }} + /> + ); + }} + renderTags={(selected, getTagProps) => + selected.map((option, index) => { + const country = getCountry(option); + + return ( + } + size="small" + variant="soft" + /> + ); + }) + } + {...other} + /> + ); +} + +CountrySelect.propTypes = { + error: PropTypes.bool, + label: PropTypes.string, + helperText: PropTypes.node, + hiddenLabel: PropTypes.bool, + placeholder: PropTypes.string, +}; + +// ---------------------------------------------------------------------- + +export function getCountry(inputValue) { + const option = countries.filter((country) => country.label === inputValue)[0]; + + return { + ...option, + }; +} diff --git a/template/src/components/country-select/index.js b/template/src/components/country-select/index.js new file mode 100644 index 0000000..b11067a --- /dev/null +++ b/template/src/components/country-select/index.js @@ -0,0 +1 @@ +export { default } from './country-select'; diff --git a/template/src/components/custom-breadcrumbs/custom-breadcrumbs.jsx b/template/src/components/custom-breadcrumbs/custom-breadcrumbs.jsx new file mode 100644 index 0000000..92ec173 --- /dev/null +++ b/template/src/components/custom-breadcrumbs/custom-breadcrumbs.jsx @@ -0,0 +1,97 @@ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import Breadcrumbs from '@mui/material/Breadcrumbs'; + +import LinkItem from './link-item'; + +// ---------------------------------------------------------------------- + +export default function CustomBreadcrumbs({ + links, + action, + heading, + moreLink, + activeLast, + sx, + ...other +}) { + const lastLink = links[links.length - 1].name; + + return ( + + + + {/* HEADING */} + {heading && ( + + {heading} + + )} + + {/* BREADCRUMBS */} + {!!links.length && ( + } {...other}> + {links.map((link) => ( + + ))} + + )} + + + {action && {action} } + + + {/* MORE LINK */} + {!!moreLink && ( + + {moreLink.map((href) => ( + + {href} + + ))} + + )} + + ); +} + +CustomBreadcrumbs.propTypes = { + action: PropTypes.node, + activeLast: PropTypes.bool, + heading: PropTypes.string, + links: PropTypes.array, + moreLink: PropTypes.array, + sx: PropTypes.object, +}; + +// ---------------------------------------------------------------------- + +function Separator() { + return ( + + ); +} diff --git a/template/src/components/custom-breadcrumbs/index.js b/template/src/components/custom-breadcrumbs/index.js new file mode 100644 index 0000000..aef6601 --- /dev/null +++ b/template/src/components/custom-breadcrumbs/index.js @@ -0,0 +1 @@ +export { default } from './custom-breadcrumbs'; diff --git a/template/src/components/custom-breadcrumbs/link-item.jsx b/template/src/components/custom-breadcrumbs/link-item.jsx new file mode 100644 index 0000000..c3516fa --- /dev/null +++ b/template/src/components/custom-breadcrumbs/link-item.jsx @@ -0,0 +1,62 @@ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; + +import { RouterLink } from 'src/routes/components'; + +// ---------------------------------------------------------------------- + +export default function BreadcrumbsLink({ link, activeLast, disabled }) { + const styles = { + typography: 'body2', + alignItems: 'center', + color: 'text.primary', + display: 'inline-flex', + ...(disabled && + !activeLast && { + cursor: 'default', + pointerEvents: 'none', + color: 'text.disabled', + }), + }; + + const renderContent = ( + <> + {link.icon && ( + + {link.icon} + + )} + + {link.name} + + ); + + if (link.href) { + return ( + + {renderContent} + + ); + } + + return {renderContent} ; +} + +BreadcrumbsLink.propTypes = { + activeLast: PropTypes.bool, + disabled: PropTypes.bool, + link: PropTypes.shape({ + href: PropTypes.string, + icon: PropTypes.node, + name: PropTypes.string, + }), +}; diff --git a/template/src/components/hook-form/form-provider.jsx b/template/src/components/hook-form/form-provider.jsx new file mode 100644 index 0000000..ec44751 --- /dev/null +++ b/template/src/components/hook-form/form-provider.jsx @@ -0,0 +1,18 @@ +import PropTypes from 'prop-types'; +import { FormProvider as Form } from 'react-hook-form'; + +// ---------------------------------------------------------------------- + +export default function FormProvider({ children, onSubmit, methods }) { + return ( +
    + {children}
    + + ); +} + +FormProvider.propTypes = { + children: PropTypes.node, + methods: PropTypes.object, + onSubmit: PropTypes.func, +}; diff --git a/template/src/components/hook-form/index.js b/template/src/components/hook-form/index.js new file mode 100644 index 0000000..245051e --- /dev/null +++ b/template/src/components/hook-form/index.js @@ -0,0 +1,10 @@ +export * from './rhf-select'; +export * from './rhf-checkbox'; + +export { default } from './form-provider'; +export { default as RHFCode } from './rhf-code'; +export { default as RHFSlider } from './rhf-slider'; +export { default as RHFSwitch } from './rhf-switch'; +export { default as RHFTextField } from './rhf-text-field'; +export { default as RHFRadioGroup } from './rhf-radio-group'; +export { default as RHFAutocomplete } from './rhf-autocomplete'; diff --git a/template/src/components/hook-form/rhf-autocomplete.jsx b/template/src/components/hook-form/rhf-autocomplete.jsx new file mode 100644 index 0000000..b7af8d3 --- /dev/null +++ b/template/src/components/hook-form/rhf-autocomplete.jsx @@ -0,0 +1,177 @@ +import PropTypes from 'prop-types'; +import { Controller, useFormContext } from 'react-hook-form'; + +import Chip from '@mui/material/Chip'; +import TextField from '@mui/material/TextField'; +import Autocomplete from '@mui/material/Autocomplete'; +import InputAdornment from '@mui/material/InputAdornment'; +import { filledInputClasses } from '@mui/material/FilledInput'; + +import { countries } from 'src/assets/data'; + +import Iconify from 'src/components/iconify'; + +// ---------------------------------------------------------------------- + +export default function RHFAutocomplete({ + name, + label, + type, + helperText, + hiddenLabel, + placeholder, + ...other +}) { + const { control, setValue } = useFormContext(); + + const { multiple } = other; + + return ( + { + if (type === 'country') { + return ( + setValue(name, newValue, { shouldValidate: true })} + renderOption={(props, option) => { + const country = getCountry(option); + + if (!country.label) { + return null; + } + + return ( +
  • + + {country.label} ({country.code}) +{country.phone} +
  • + ); + }} + renderInput={(params) => { + const country = getCountry(params.inputProps.value); + + const baseField = { + ...params, + label, + hiddenLabel, + placeholder, + error: !!error, + helperText: error ? error?.message : helperText, + inputProps: { + ...params.inputProps, + autoComplete: 'new-password', + }, + }; + + if (multiple) { + return ; + } + + return ( + + + + ), + }} + sx={{ + ...(!hiddenLabel && { + [`& .${filledInputClasses.root}`]: { + '& .component-iconify': { + mt: -2, + }, + }, + }), + }} + /> + ); + }} + renderTags={(selected, getTagProps) => + selected.map((option, index) => { + const country = getCountry(option); + + return ( + } + size="small" + variant="soft" + /> + ); + }) + } + {...other} + /> + ); + } + + return ( + setValue(name, newValue, { shouldValidate: true })} + renderInput={(params) => ( + + )} + {...other} + /> + ); + }} + /> + ); +} + +RHFAutocomplete.propTypes = { + name: PropTypes.string, + type: PropTypes.string, + label: PropTypes.string, + helperText: PropTypes.node, + hiddenLabel: PropTypes.bool, + placeholder: PropTypes.string, +}; + +// ---------------------------------------------------------------------- + +export function getCountry(inputValue) { + const option = countries.filter((country) => country.label === inputValue)[0]; + + return { + ...option, + }; +} diff --git a/template/src/components/hook-form/rhf-checkbox.jsx b/template/src/components/hook-form/rhf-checkbox.jsx new file mode 100644 index 0000000..03056ff --- /dev/null +++ b/template/src/components/hook-form/rhf-checkbox.jsx @@ -0,0 +1,113 @@ +import PropTypes from 'prop-types'; +import { Controller, useFormContext } from 'react-hook-form'; + +import Checkbox from '@mui/material/Checkbox'; +import FormGroup from '@mui/material/FormGroup'; +import FormLabel from '@mui/material/FormLabel'; +import FormControl from '@mui/material/FormControl'; +import FormHelperText from '@mui/material/FormHelperText'; +import FormControlLabel, { formControlLabelClasses } from '@mui/material/FormControlLabel'; + +// ---------------------------------------------------------------------- + +export function RHFCheckbox({ name, helperText, ...other }) { + const { control } = useFormContext(); + + return ( + ( +
    + } {...other} /> + + {(!!error || helperText) && ( + {error ? error?.message : helperText} + )} +
    + )} + /> + ); +} + +RHFCheckbox.propTypes = { + helperText: PropTypes.string, + name: PropTypes.string, +}; + +// ---------------------------------------------------------------------- + +export function RHFMultiCheckbox({ row, name, label, options, spacing, helperText, sx, ...other }) { + const { control } = useFormContext(); + + const getSelected = (selectedItems, item) => + selectedItems.includes(item) + ? selectedItems.filter((value) => value !== item) + : [...selectedItems, item]; + + return ( + ( + + {label && ( + + {label} + + )} + + + {options.map((option) => ( + field.onChange(getSelected(field.value, option.value))} + /> + } + label={option.label} + {...other} + /> + ))} + + + {(!!error || helperText) && ( + + {error ? error?.message : helperText} + + )} + + )} + /> + ); +} + +RHFMultiCheckbox.propTypes = { + helperText: PropTypes.string, + label: PropTypes.string, + name: PropTypes.string, + options: PropTypes.array, + row: PropTypes.bool, + spacing: PropTypes.number, + sx: PropTypes.object, +}; diff --git a/template/src/components/hook-form/rhf-code.jsx b/template/src/components/hook-form/rhf-code.jsx new file mode 100644 index 0000000..6a31430 --- /dev/null +++ b/template/src/components/hook-form/rhf-code.jsx @@ -0,0 +1,43 @@ +import PropTypes from 'prop-types'; +import { MuiOtpInput } from 'mui-one-time-password-input'; +import { Controller, useFormContext } from 'react-hook-form'; + +import FormHelperText from '@mui/material/FormHelperText'; + +// ---------------------------------------------------------------------- + +export default function RHFCode({ name, ...other }) { + const { control } = useFormContext(); + + return ( + ( +
    + + + {error && ( + + {error.message} + + )} +
    + )} + /> + ); +} + +RHFCode.propTypes = { + name: PropTypes.string, +}; diff --git a/template/src/components/hook-form/rhf-radio-group.jsx b/template/src/components/hook-form/rhf-radio-group.jsx new file mode 100644 index 0000000..7e661fd --- /dev/null +++ b/template/src/components/hook-form/rhf-radio-group.jsx @@ -0,0 +1,78 @@ +import PropTypes from 'prop-types'; +import { Controller, useFormContext } from 'react-hook-form'; + +import Radio from '@mui/material/Radio'; +import FormLabel from '@mui/material/FormLabel'; +import RadioGroup from '@mui/material/RadioGroup'; +import FormControl from '@mui/material/FormControl'; +import FormHelperText from '@mui/material/FormHelperText'; +import FormControlLabel from '@mui/material/FormControlLabel'; + +// ---------------------------------------------------------------------- + +export default function RHFRadioGroup({ + row, + name, + label, + options, + spacing, + helperText, + ...other +}) { + const { control } = useFormContext(); + + const labelledby = label ? `${name}-${label}` : ''; + + return ( + ( + + {label && ( + + {label} + + )} + + + {options.map((option) => ( + } + label={option.label} + sx={{ + '&:not(:last-of-type)': { + mb: spacing || 0, + }, + ...(row && { + mr: 0, + '&:not(:last-of-type)': { + mr: spacing || 2, + }, + }), + }} + /> + ))} + + + {(!!error || helperText) && ( + + {error ? error?.message : helperText} + + )} + + )} + /> + ); +} + +RHFRadioGroup.propTypes = { + helperText: PropTypes.string, + label: PropTypes.string, + name: PropTypes.string, + options: PropTypes.array, + row: PropTypes.bool, + spacing: PropTypes.number, +}; diff --git a/template/src/components/hook-form/rhf-select.jsx b/template/src/components/hook-form/rhf-select.jsx new file mode 100644 index 0000000..e2fbf00 --- /dev/null +++ b/template/src/components/hook-form/rhf-select.jsx @@ -0,0 +1,151 @@ +import PropTypes from 'prop-types'; +import { Controller, useFormContext } from 'react-hook-form'; + +import Box from '@mui/material/Box'; +import Chip from '@mui/material/Chip'; +import Select from '@mui/material/Select'; +import Checkbox from '@mui/material/Checkbox'; +import MenuItem from '@mui/material/MenuItem'; +import TextField from '@mui/material/TextField'; +import InputLabel from '@mui/material/InputLabel'; +import FormControl from '@mui/material/FormControl'; +import FormHelperText from '@mui/material/FormHelperText'; + +// ---------------------------------------------------------------------- + +export function RHFSelect({ + name, + native, + maxHeight = 220, + helperText, + children, + PaperPropsSx, + ...other +}) { + const { control } = useFormContext(); + + return ( + ( + + {children} + + )} + /> + ); +} + +RHFSelect.propTypes = { + PaperPropsSx: PropTypes.object, + children: PropTypes.node, + helperText: PropTypes.object, + maxHeight: PropTypes.number, + name: PropTypes.string, + native: PropTypes.bool, +}; + +// ---------------------------------------------------------------------- + +export function RHFMultiSelect({ + name, + chip, + label, + options, + checkbox, + placeholder, + helperText, + ...other +}) { + const { control } = useFormContext(); + + const renderValues = (selectedIds) => { + const selectedItems = options.filter((item) => selectedIds.includes(item.value)); + + if (!selectedItems.length && placeholder) { + return {placeholder}; + } + + if (chip) { + return ( + + {selectedItems.map((item) => ( + + ))} + + ); + } + + return selectedItems.map((item) => item.label).join(', '); + }; + + return ( + ( + + {label && {label} } + + + + {(!!error || helperText) && ( + {error ? error?.message : helperText} + )} + + )} + /> + ); +} + +RHFMultiSelect.propTypes = { + checkbox: PropTypes.bool, + chip: PropTypes.bool, + helperText: PropTypes.object, + label: PropTypes.string, + name: PropTypes.string, + options: PropTypes.array, + placeholder: PropTypes.string, +}; diff --git a/template/src/components/hook-form/rhf-slider.jsx b/template/src/components/hook-form/rhf-slider.jsx new file mode 100644 index 0000000..c3fe28e --- /dev/null +++ b/template/src/components/hook-form/rhf-slider.jsx @@ -0,0 +1,32 @@ +import PropTypes from 'prop-types'; +import { Controller, useFormContext } from 'react-hook-form'; + +import Slider from '@mui/material/Slider'; +import FormHelperText from '@mui/material/FormHelperText'; + +// ---------------------------------------------------------------------- + +export default function RHFSlider({ name, helperText, ...other }) { + const { control } = useFormContext(); + + return ( + ( + <> + + + {(!!error || helperText) && ( + {error ? error?.message : helperText} + )} + + )} + /> + ); +} + +RHFSlider.propTypes = { + helperText: PropTypes.string, + name: PropTypes.string, +}; diff --git a/template/src/components/hook-form/rhf-switch.jsx b/template/src/components/hook-form/rhf-switch.jsx new file mode 100644 index 0000000..ce9928e --- /dev/null +++ b/template/src/components/hook-form/rhf-switch.jsx @@ -0,0 +1,33 @@ +import PropTypes from 'prop-types'; +import { Controller, useFormContext } from 'react-hook-form'; + +import Switch from '@mui/material/Switch'; +import FormHelperText from '@mui/material/FormHelperText'; +import FormControlLabel from '@mui/material/FormControlLabel'; + +// ---------------------------------------------------------------------- + +export default function RHFSwitch({ name, helperText, ...other }) { + const { control } = useFormContext(); + + return ( + ( +
    + } {...other} /> + + {(!!error || helperText) && ( + {error ? error?.message : helperText} + )} +
    + )} + /> + ); +} + +RHFSwitch.propTypes = { + helperText: PropTypes.string, + name: PropTypes.string, +}; diff --git a/template/src/components/hook-form/rhf-text-field.jsx b/template/src/components/hook-form/rhf-text-field.jsx new file mode 100644 index 0000000..a43e399 --- /dev/null +++ b/template/src/components/hook-form/rhf-text-field.jsx @@ -0,0 +1,41 @@ +import PropTypes from 'prop-types'; +import { Controller, useFormContext } from 'react-hook-form'; + +import TextField from '@mui/material/TextField'; + +// ---------------------------------------------------------------------- + +export default function RHFTextField({ name, helperText, type, ...other }) { + const { control } = useFormContext(); + + return ( + ( + { + if (type === 'number') { + field.onChange(Number(event.target.value)); + } else { + field.onChange(event.target.value); + } + }} + error={!!error} + helperText={error ? error?.message : helperText} + {...other} + /> + )} + /> + ); +} + +RHFTextField.propTypes = { + helperText: PropTypes.object, + name: PropTypes.string, + type: PropTypes.string, +}; diff --git a/template/src/components/iconify/iconify.jsx b/template/src/components/iconify/iconify.jsx new file mode 100644 index 0000000..6d25190 --- /dev/null +++ b/template/src/components/iconify/iconify.jsx @@ -0,0 +1,27 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; +// icons +import { Icon } from '@iconify/react'; + +import Box from '@mui/material/Box'; + +// ---------------------------------------------------------------------- + +const Iconify = forwardRef(({ icon, width = 20, sx, ...other }, ref) => ( + +)); + +Iconify.propTypes = { + icon: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), + sx: PropTypes.object, + width: PropTypes.number, +}; + +export default Iconify; diff --git a/template/src/components/iconify/index.js b/template/src/components/iconify/index.js new file mode 100644 index 0000000..f3bf213 --- /dev/null +++ b/template/src/components/iconify/index.js @@ -0,0 +1 @@ +export { default } from './iconify'; diff --git a/template/src/components/image/image.jsx b/template/src/components/image/image.jsx new file mode 100644 index 0000000..dbded8d --- /dev/null +++ b/template/src/components/image/image.jsx @@ -0,0 +1,139 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; +import { LazyLoadImage } from 'react-lazy-load-image-component'; + +import Box from '@mui/material/Box'; +import { alpha, useTheme } from '@mui/material/styles'; + +import { getRatio } from './utils'; + +// ---------------------------------------------------------------------- + +const Image = forwardRef( + ( + { + ratio, + overlay, + disabledEffect = false, + alt, + src, + afterLoad, + delayTime, + threshold, + beforeLoad, + delayMethod, + placeholder, + wrapperProps, + scrollPosition, + effect = 'blur', + visibleByDefault, + wrapperClassName, + useIntersectionObserver, + sx, + ...other + }, + ref + ) => { + const theme = useTheme(); + + const overlayStyles = !!overlay && { + '&:before': { + content: "''", + top: 0, + left: 0, + width: 1, + height: 1, + zIndex: 1, + position: 'absolute', + background: overlay || alpha(theme.palette.grey[900], 0.48), + }, + }; + + const content = ( + + ); + + return ( + + {content} + + ); + } +); + +Image.propTypes = { + afterLoad: PropTypes.func, + alt: PropTypes.string, + beforeLoad: PropTypes.func, + delayMethod: PropTypes.string, + delayTime: PropTypes.number, + disabledEffect: PropTypes.bool, + effect: PropTypes.string, + overlay: PropTypes.string, + placeholder: PropTypes.element, + ratio: PropTypes.oneOf(['4/3', '3/4', '6/4', '4/6', '16/9', '9/16', '21/9', '9/21', '1/1']), + scrollPosition: PropTypes.object, + src: PropTypes.string, + sx: PropTypes.object, + threshold: PropTypes.number, + useIntersectionObserver: PropTypes.bool, + visibleByDefault: PropTypes.bool, + wrapperClassName: PropTypes.string, + wrapperProps: PropTypes.object, +}; + +export default Image; diff --git a/template/src/components/image/index.js b/template/src/components/image/index.js new file mode 100644 index 0000000..e566717 --- /dev/null +++ b/template/src/components/image/index.js @@ -0,0 +1 @@ +export { default } from './image'; diff --git a/template/src/components/image/utils.js b/template/src/components/image/utils.js new file mode 100644 index 0000000..61abac4 --- /dev/null +++ b/template/src/components/image/utils.js @@ -0,0 +1,15 @@ +// ---------------------------------------------------------------------- + +export function getRatio(ratio = '1/1') { + return { + '4/3': 'calc(100% / 4 * 3)', + '3/4': 'calc(100% / 3 * 4)', + '6/4': 'calc(100% / 6 * 4)', + '4/6': 'calc(100% / 4 * 6)', + '16/9': 'calc(100% / 16 * 9)', + '9/16': 'calc(100% / 9 * 16)', + '21/9': 'calc(100% / 21 * 9)', + '9/21': 'calc(100% / 9 * 21)', + '1/1': '100%', + }[ratio]; +} diff --git a/template/src/components/label/index.js b/template/src/components/label/index.js new file mode 100644 index 0000000..16a9e79 --- /dev/null +++ b/template/src/components/label/index.js @@ -0,0 +1 @@ +export { default } from './label'; diff --git a/template/src/components/label/label.jsx b/template/src/components/label/label.jsx new file mode 100644 index 0000000..ae2b36d --- /dev/null +++ b/template/src/components/label/label.jsx @@ -0,0 +1,61 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import { useTheme } from '@mui/material/styles'; + +import { StyledLabel } from './styles'; + +// ---------------------------------------------------------------------- + +const Label = forwardRef( + ({ children, color = 'default', variant = 'soft', startIcon, endIcon, sx, ...other }, ref) => { + const theme = useTheme(); + + const iconStyles = { + width: 16, + height: 16, + '& svg, img': { width: 1, height: 1, objectFit: 'cover' }, + }; + + return ( + + {startIcon && {startIcon} } + + {children} + + {endIcon && {endIcon} } + + ); + } +); + +Label.propTypes = { + children: PropTypes.node, + color: PropTypes.oneOf([ + 'default', + 'primary', + 'secondary', + 'info', + 'success', + 'warning', + 'error', + ]), + endIcon: PropTypes.object, + startIcon: PropTypes.object, + sx: PropTypes.object, + variant: PropTypes.oneOf(['filled', 'outlined', 'ghost', 'soft']), +}; + +export default Label; diff --git a/template/src/components/label/styles.js b/template/src/components/label/styles.js new file mode 100644 index 0000000..a2589de --- /dev/null +++ b/template/src/components/label/styles.js @@ -0,0 +1,77 @@ +import Box from '@mui/material/Box'; +import { alpha, styled } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +export const StyledLabel = styled(Box)(({ theme, ownerState }) => { + const lightMode = theme.palette.mode === 'light'; + + const filledVariant = ownerState.variant === 'filled'; + + const outlinedVariant = ownerState.variant === 'outlined'; + + const softVariant = ownerState.variant === 'soft'; + + const defaultStyle = { + ...(ownerState.color === 'default' && { + // FILLED + ...(filledVariant && { + color: lightMode ? theme.palette.common.white : theme.palette.grey[800], + backgroundColor: theme.palette.text.primary, + }), + // OUTLINED + ...(outlinedVariant && { + backgroundColor: 'transparent', + color: theme.palette.text.primary, + border: `2px solid ${theme.palette.text.primary}`, + }), + // SOFT + ...(softVariant && { + color: theme.palette.text.secondary, + backgroundColor: alpha(theme.palette.grey[500], 0.16), + }), + }), + }; + + const colorStyle = { + ...(ownerState.color !== 'default' && { + // FILLED + ...(filledVariant && { + color: theme.palette[ownerState.color].contrastText, + backgroundColor: theme.palette[ownerState.color].main, + }), + // OUTLINED + ...(outlinedVariant && { + backgroundColor: 'transparent', + color: theme.palette[ownerState.color].main, + border: `2px solid ${theme.palette[ownerState.color].main}`, + }), + // SOFT + ...(softVariant && { + color: theme.palette[ownerState.color][lightMode ? 'dark' : 'light'], + backgroundColor: alpha(theme.palette[ownerState.color].main, 0.16), + }), + }), + }; + + return { + height: 24, + minWidth: 24, + lineHeight: 0, + borderRadius: 6, + cursor: 'default', + alignItems: 'center', + whiteSpace: 'nowrap', + display: 'inline-flex', + justifyContent: 'center', + textTransform: 'capitalize', + padding: theme.spacing(0, 0.75), + fontSize: theme.typography.pxToRem(12), + fontWeight: theme.typography.fontWeightBold, + transition: theme.transitions.create('all', { + duration: theme.transitions.duration.shorter, + }), + ...defaultStyle, + ...colorStyle, + }; +}); diff --git a/template/src/components/lightbox/index.js b/template/src/components/lightbox/index.js new file mode 100644 index 0000000..e141b55 --- /dev/null +++ b/template/src/components/lightbox/index.js @@ -0,0 +1,5 @@ +export * from 'yet-another-react-lightbox'; + +export { default } from './lightbox'; + +export { default as useLightbox } from './use-light-box'; diff --git a/template/src/components/lightbox/lightbox.jsx b/template/src/components/lightbox/lightbox.jsx new file mode 100644 index 0000000..065aa4d --- /dev/null +++ b/template/src/components/lightbox/lightbox.jsx @@ -0,0 +1,152 @@ +import PropTypes from 'prop-types'; +import Zoom from 'yet-another-react-lightbox/plugins/zoom'; +import Video from 'yet-another-react-lightbox/plugins/video'; +import Captions from 'yet-another-react-lightbox/plugins/captions'; +import Slideshow from 'yet-another-react-lightbox/plugins/slideshow'; +import Fullscreen from 'yet-another-react-lightbox/plugins/fullscreen'; +import Thumbnails from 'yet-another-react-lightbox/plugins/thumbnails'; +import ReactLightbox, { useLightboxState } from 'yet-another-react-lightbox'; + +import Box from '@mui/material/Box'; + +import Iconify from '../iconify'; +import StyledLightbox from './styles'; + +// ---------------------------------------------------------------------- + +export default function Lightbox({ + slides, + disabledZoom, + disabledVideo, + disabledTotal, + disabledCaptions, + disabledSlideshow, + disabledThumbnails, + disabledFullscreen, + onGetCurrentIndex, + ...other +}) { + const totalItems = slides ? slides.length : 0; + + return ( + <> + + + { + if (onGetCurrentIndex) { + onGetCurrentIndex(index); + } + }, + }} + toolbar={{ + buttons: [ + , + 'close', + ], + }} + render={{ + iconClose: () => , + iconZoomIn: () => , + iconZoomOut: () => , + iconSlideshowPlay: () => , + iconSlideshowPause: () => , + iconPrev: () => , + iconNext: () => , + iconExitFullscreen: () => , + iconEnterFullscreen: () => , + }} + {...other} + /> + + ); +} + +Lightbox.propTypes = { + disabledCaptions: PropTypes.bool, + disabledFullscreen: PropTypes.bool, + disabledSlideshow: PropTypes.bool, + disabledThumbnails: PropTypes.bool, + disabledTotal: PropTypes.bool, + disabledVideo: PropTypes.bool, + disabledZoom: PropTypes.bool, + onGetCurrentIndex: PropTypes.func, + slides: PropTypes.array, +}; + +// ---------------------------------------------------------------------- + +export function getPlugins({ + disabledZoom, + disabledVideo, + disabledCaptions, + disabledSlideshow, + disabledThumbnails, + disabledFullscreen, +}) { + let plugins = [Captions, Fullscreen, Slideshow, Thumbnails, Video, Zoom]; + + if (disabledThumbnails) { + plugins = plugins.filter((plugin) => plugin !== Thumbnails); + } + if (disabledCaptions) { + plugins = plugins.filter((plugin) => plugin !== Captions); + } + if (disabledFullscreen) { + plugins = plugins.filter((plugin) => plugin !== Fullscreen); + } + if (disabledSlideshow) { + plugins = plugins.filter((plugin) => plugin !== Slideshow); + } + if (disabledZoom) { + plugins = plugins.filter((plugin) => plugin !== Zoom); + } + if (disabledVideo) { + plugins = plugins.filter((plugin) => plugin !== Video); + } + + return plugins; +} + +// ---------------------------------------------------------------------- + +export function DisplayTotal({ totalItems, disabledTotal }) { + const { currentIndex } = useLightboxState(); + + if (disabledTotal) { + return null; + } + + return ( + + {currentIndex + 1} / {totalItems} + + ); +} + +DisplayTotal.propTypes = { + disabledTotal: PropTypes.bool, + totalItems: PropTypes.number, +}; diff --git a/template/src/components/lightbox/styles.jsx b/template/src/components/lightbox/styles.jsx new file mode 100644 index 0000000..57199e2 --- /dev/null +++ b/template/src/components/lightbox/styles.jsx @@ -0,0 +1,52 @@ +import GlobalStyles from '@mui/material/GlobalStyles'; +import { alpha, useTheme } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +export default function StyledLightbox() { + const theme = useTheme(); + + const inputGlobalStyles = ( + + ); + + return inputGlobalStyles; +} diff --git a/template/src/components/lightbox/use-light-box.js b/template/src/components/lightbox/use-light-box.js new file mode 100644 index 0000000..15c9678 --- /dev/null +++ b/template/src/components/lightbox/use-light-box.js @@ -0,0 +1,30 @@ +import { useState, useCallback } from 'react'; + +// ---------------------------------------------------------------------- + +export default function useLightbox(slides) { + const [selected, setSelected] = useState(-1); + + const handleOpen = useCallback( + (slideUrl) => { + const slideIndex = slides.findIndex((slide) => + slide.type === 'video' ? slide.poster === slideUrl : slide.src === slideUrl + ); + + setSelected(slideIndex); + }, + [slides] + ); + + const handleClose = useCallback(() => { + setSelected(-1); + }, []); + + return { + selected, + open: selected >= 0, + onOpen: handleOpen, + onClose: handleClose, + setSelected, + }; +} diff --git a/template/src/components/loading-screen/index.js b/template/src/components/loading-screen/index.js new file mode 100644 index 0000000..480d3a5 --- /dev/null +++ b/template/src/components/loading-screen/index.js @@ -0,0 +1 @@ +export { default as SplashScreen } from './splash-screen'; diff --git a/template/src/components/loading-screen/splash-screen.jsx b/template/src/components/loading-screen/splash-screen.jsx new file mode 100644 index 0000000..b45644f --- /dev/null +++ b/template/src/components/loading-screen/splash-screen.jsx @@ -0,0 +1,61 @@ +import { m } from 'framer-motion'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import { useTheme } from '@mui/material/styles'; + +import { bgBlur } from 'src/theme/css'; + +import Logo from '../logo'; + +// ---------------------------------------------------------------------- + +export default function SplashScreen({ sx, ...other }) { + const theme = useTheme(); + + return ( + <> + + + + + + + + + ); +} + +SplashScreen.propTypes = { + sx: PropTypes.object, +}; diff --git a/template/src/components/logo/index.js b/template/src/components/logo/index.js new file mode 100644 index 0000000..f0d8afd --- /dev/null +++ b/template/src/components/logo/index.js @@ -0,0 +1 @@ +export { default } from './logo'; diff --git a/template/src/components/logo/logo.jsx b/template/src/components/logo/logo.jsx new file mode 100644 index 0000000..ded59d4 --- /dev/null +++ b/template/src/components/logo/logo.jsx @@ -0,0 +1,77 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import { useTheme } from '@mui/material/styles'; + +import { RouterLink } from 'src/routes/components'; + +// ---------------------------------------------------------------------- + +function Logo({ single = false, sx }) { + const theme = useTheme(); + + const PRIMARY_MAIN = theme.palette.primary.main; + + const singleLogo = ( + + + + + ); + + const fullLogo = ( + + + + + ); + + return ( + + + {single ? singleLogo : fullLogo} + + + ); +} + +Logo.propTypes = { + single: PropTypes.bool, + sx: PropTypes.object, +}; + +export default memo(Logo); diff --git a/template/src/components/map/index.js b/template/src/components/map/index.js new file mode 100644 index 0000000..db1ba19 --- /dev/null +++ b/template/src/components/map/index.js @@ -0,0 +1 @@ +export { default } from './map'; diff --git a/template/src/components/map/map-marker.jsx b/template/src/components/map/map-marker.jsx new file mode 100644 index 0000000..0aeb108 --- /dev/null +++ b/template/src/components/map/map-marker.jsx @@ -0,0 +1,36 @@ +/* eslint-disable unused-imports/no-unused-vars */ +import PropTypes from 'prop-types'; +import { useCallback } from 'react'; + +import Box from '@mui/material/Box'; +import SvgIcon from '@mui/material/SvgIcon'; + +// ---------------------------------------------------------------------- + +export default function MapMarker({ onOpen, lat, lng }) { + const handleOpen = useCallback( + (event) => { + event.stopPropagation(); + onOpen(); + }, + [onOpen] + ); + + return ( + + + + + + ); +} + +MapMarker.propTypes = { + lat: PropTypes.number, + lng: PropTypes.number, + onOpen: PropTypes.func, +}; diff --git a/template/src/components/map/map-popup.jsx b/template/src/components/map/map-popup.jsx new file mode 100644 index 0000000..9166223 --- /dev/null +++ b/template/src/components/map/map-popup.jsx @@ -0,0 +1,104 @@ +import PropTypes from 'prop-types'; +import { useCallback } from 'react'; + +import Box from '@mui/material/Box'; +import Paper from '@mui/material/Paper'; +import Stack from '@mui/material/Stack'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; + +import Image from 'src/components/image'; +import Iconify from 'src/components/iconify'; + +// ---------------------------------------------------------------------- + +export default function MapPopup({ office, onClose, lat, lng }) { + const handleClose = useCallback( + (event) => { + event.stopPropagation(); + onClose(); + console.log('lat-lng', lat, lng); + }, + [lat, lng, onClose] + ); + + return ( + + + + + + + + {office.photo && photo} + + + {office.country && {office.country}} + + {office.address && ( + + {office.address} + + )} + + {office.email && ( + + + {office.email} + + )} + + {office.phoneNumber && ( + + + {office.phoneNumber} + + )} + + + ); +} + +MapPopup.propTypes = { + lat: PropTypes.number, + lng: PropTypes.number, + office: PropTypes.shape({ + address: PropTypes.string, + country: PropTypes.string, + email: PropTypes.string, + phoneNumber: PropTypes.string, + photo: PropTypes.string, + }), + onClose: PropTypes.func, +}; diff --git a/template/src/components/map/map.jsx b/template/src/components/map/map.jsx new file mode 100644 index 0000000..8170ca4 --- /dev/null +++ b/template/src/components/map/map.jsx @@ -0,0 +1,71 @@ +import PropTypes from 'prop-types'; +import GoogleMapReact from 'google-map-react'; +import { useState, useCallback } from 'react'; + +import Box from '@mui/material/Box'; + +import { GOOGLE_MAP_API } from 'src/config-global'; + +import MapPopup from './map-popup'; +import { mapStyle } from './styles'; +import MapMarker from './map-marker'; + +// ---------------------------------------------------------------------- + +export default function Map({ offices, sx, ...other }) { + const [tooltip, setTooltip] = useState(null); + + const [centerMap, setCenterMap] = useState({ + lat: offices[0].latlng[0], + lng: offices[0].latlng[1], + }); + + const handleOpen = useCallback( + (lat, lng, office) => { + setCenterMap({ + ...centerMap, + lat: lat - 32, + lng, + }); + setTooltip(office); + }, + [centerMap] + ); + + return ( + + + {offices.map((office, index) => ( + handleOpen(office.latlng[0], office.latlng[1], office)} + /> + ))} + + {tooltip && ( + setTooltip(null)} + /> + )} + + + ); +} + +Map.propTypes = { + offices: PropTypes.array, + sx: PropTypes.object, +}; diff --git a/template/src/components/map/styles.js b/template/src/components/map/styles.js new file mode 100644 index 0000000..dc3ac26 --- /dev/null +++ b/template/src/components/map/styles.js @@ -0,0 +1,100 @@ +// ---------------------------------------------------------------------- + +export const mapStyle = [ + { + featureType: 'administrative', + elementType: 'labels.text.fill', + stylers: [{ color: '#6195a0' }], + }, + { + featureType: 'administrative.province', + elementType: 'geometry.stroke', + stylers: [{ visibility: 'off' }], + }, + { + featureType: 'landscape', + elementType: 'geometry', + stylers: [{ lightness: '0' }, { saturation: '0' }, { color: '#f5f5f2' }, { gamma: '1' }], + }, + { + featureType: 'landscape.man_made', + elementType: 'all', + stylers: [{ lightness: '-3' }, { gamma: '1.00' }], + }, + { + featureType: 'landscape.natural.terrain', + elementType: 'all', + stylers: [{ visibility: 'off' }], + }, + { featureType: 'poi', elementType: 'all', stylers: [{ visibility: 'off' }] }, + { + featureType: 'poi.park', + elementType: 'geometry.fill', + stylers: [{ color: '#bae5ce' }, { visibility: 'on' }], + }, + { + featureType: 'road', + elementType: 'all', + stylers: [{ saturation: -100 }, { lightness: 45 }, { visibility: 'simplified' }], + }, + { + featureType: 'road.highway', + elementType: 'all', + stylers: [{ visibility: 'simplified' }], + }, + { + featureType: 'road.highway', + elementType: 'geometry.fill', + stylers: [{ color: '#fac9a9' }, { visibility: 'simplified' }], + }, + { + featureType: 'road.highway', + elementType: 'labels.text', + stylers: [{ color: '#4e4e4e' }], + }, + { + featureType: 'road.arterial', + elementType: 'labels.text.fill', + stylers: [{ color: '#787878' }], + }, + { + featureType: 'road.arterial', + elementType: 'labels.icon', + stylers: [{ visibility: 'off' }], + }, + { + featureType: 'transit', + elementType: 'all', + stylers: [{ visibility: 'simplified' }], + }, + { + featureType: 'transit.station.airport', + elementType: 'labels.icon', + stylers: [{ hue: '#0a00ff' }, { saturation: '-77' }, { gamma: '0.57' }, { lightness: '0' }], + }, + { + featureType: 'transit.station.rail', + elementType: 'labels.text.fill', + stylers: [{ color: '#43321e' }], + }, + { + featureType: 'transit.station.rail', + elementType: 'labels.icon', + stylers: [{ hue: '#ff6c00' }, { lightness: '4' }, { gamma: '0.75' }, { saturation: '-68' }], + }, + { + featureType: 'water', + elementType: 'all', + stylers: [{ color: '#eaf6f8' }, { visibility: 'on' }], + }, + { + featureType: 'water', + elementType: 'geometry.fill', + stylers: [{ color: '#c7eced' }], + }, + { + featureType: 'water', + elementType: 'labels.text.fill', + stylers: [{ lightness: '-49' }, { saturation: '-53' }, { gamma: '0.79' }], + }, +]; diff --git a/template/src/components/markdown/index.js b/template/src/components/markdown/index.js new file mode 100644 index 0000000..6827d73 --- /dev/null +++ b/template/src/components/markdown/index.js @@ -0,0 +1 @@ +export { default } from './markdown'; diff --git a/template/src/components/markdown/markdown.jsx b/template/src/components/markdown/markdown.jsx new file mode 100644 index 0000000..b8b5e0d --- /dev/null +++ b/template/src/components/markdown/markdown.jsx @@ -0,0 +1,21 @@ +import PropTypes from 'prop-types'; + +import StyledMarkdown from './styles'; + +// ---------------------------------------------------------------------- + +export default function Markdown({ content, firstLetter = false, sx }) { + return ( + + ); +} + +Markdown.propTypes = { + content: PropTypes.string, + firstLetter: PropTypes.bool, + sx: PropTypes.object, +}; diff --git a/template/src/components/markdown/styles.js b/template/src/components/markdown/styles.js new file mode 100644 index 0000000..ba3d624 --- /dev/null +++ b/template/src/components/markdown/styles.js @@ -0,0 +1,151 @@ +import { styled } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +const StyledMarkdown = styled('div', { + shouldForwardProp: (prop) => prop !== 'firstLetter', +})(({ firstLetter, theme }) => ({ + // Text + h1: { margin: 0, ...theme.typography.h1 }, + h2: { margin: 0, ...theme.typography.h2 }, + h3: { margin: 0, ...theme.typography.h3 }, + h4: { margin: 0, ...theme.typography.h4 }, + h5: { margin: 0, ...theme.typography.h5 }, + h6: { margin: 0, ...theme.typography.h6 }, + p: { margin: 0, ...theme.typography.body1 }, + + br: { + display: 'grid', + content: '""', + marginTop: '0.75em', + }, + + // Link + a: { + color: theme.palette.primary.main, + textDecoration: 'none', + '&:hover': { + textDecoration: 'underline', + }, + }, + + // List + '& ul, & ol': { + margin: 0, + '& li': { + lineHeight: 2, + }, + }, + + // Divider + hr: { + margin: 0, + flexShrink: 0, + borderWidth: 0, + msFlexNegative: 0, + WebkitFlexShrink: 0, + borderStyle: 'solid', + borderBottomWidth: 'thin', + borderColor: theme.palette.divider, + }, + + // Blockquote + '& blockquote': { + lineHeight: 1.5, + fontSize: '1.5em', + margin: '40px auto', + position: 'relative', + fontFamily: 'Georgia, serif', + padding: theme.spacing(3, 3, 3, 8), + color: theme.palette.text.secondary, + borderRadius: theme.shape.borderRadius * 2, + backgroundColor: theme.palette.background.neutral, + [theme.breakpoints.up('md')]: { + width: '80%', + }, + '& p, & span': { + marginBottom: 0, + fontSize: 'inherit', + fontFamily: 'inherit', + }, + '&:before': { + left: 16, + top: -8, + display: 'block', + fontSize: '3em', + content: '"\\201C"', + position: 'absolute', + color: theme.palette.text.disabled, + }, + }, + + // Image + '& img': { + borderRadius: theme.spacing(1), + }, + + // Table + table: { + width: '100%', + borderCollapse: 'collapse', + border: `1px solid ${theme.palette.divider}`, + 'th, td': { + padding: theme.spacing(1), + border: `1px solid ${theme.palette.divider}`, + }, + 'tbody tr:nth-of-type(odd)': { + backgroundColor: theme.palette.background.neutral, + }, + }, + + // Checkbox + input: { + '&[type=checkbox]': { + position: 'relative', + cursor: 'pointer', + '&:before': { + content: '""', + top: -2, + left: -2, + width: 17, + height: 17, + borderRadius: 3, + position: 'absolute', + backgroundColor: theme.palette.grey[theme.palette.mode === 'light' ? 300 : 700], + }, + '&:checked': { + '&:before': { + backgroundColor: theme.palette.primary.main, + }, + '&:after': { + content: '""', + top: 1, + left: 5, + width: 4, + height: 9, + position: 'absolute', + transform: 'rotate(45deg)', + msTransform: 'rotate(45deg)', + WebkitTransform: 'rotate(45deg)', + border: `solid ${theme.palette.common.white}`, + borderWidth: '0 2px 2px 0', + }, + }, + }, + }, + + // First Letter + ...(firstLetter && { + '& > p:first-of-type': { + '&:first-letter': { + float: 'left', + fontSize: 80, + lineHeight: 1, + paddingRight: theme.spacing(2), + fontWeight: theme.typography.fontWeightBold, + }, + }, + }), +})); + +export default StyledMarkdown; diff --git a/template/src/components/mega-menu/common/menu-more-link.jsx b/template/src/components/mega-menu/common/menu-more-link.jsx new file mode 100644 index 0000000..3ed8775 --- /dev/null +++ b/template/src/components/mega-menu/common/menu-more-link.jsx @@ -0,0 +1,33 @@ +import PropTypes from 'prop-types'; + +import Link from '@mui/material/Link'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +export default function MenuMoreLink({ title, path }) { + return ( + + {title} + + ); +} + +MenuMoreLink.propTypes = { + path: PropTypes.string, + title: PropTypes.string, +}; diff --git a/template/src/components/mega-menu/common/menu-products.jsx b/template/src/components/mega-menu/common/menu-products.jsx new file mode 100644 index 0000000..2742b5d --- /dev/null +++ b/template/src/components/mega-menu/common/menu-products.jsx @@ -0,0 +1,81 @@ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import { useTheme } from '@mui/material/styles'; + +import { RouterLink } from 'src/routes/components'; + +import Image from '../../image'; +import TextMaxLine from '../../text-max-line'; +import Carousel, { useCarousel, CarouselDots, CarouselArrows } from '../../carousel'; + +// ---------------------------------------------------------------------- + +export default function MenuProducts({ products, displayProduct = 8, sx }) { + const theme = useTheme(); + + const carousel = useCarousel({ + slidesToShow: displayProduct, + slidesToScroll: displayProduct, + ...CarouselDots({ + sx: { mt: 3 }, + }), + }); + + return ( + + + + {products.map((product) => ( + + {product.coverUrl} + + + {product.name} + + + ))} + + + + ); +} + +MenuProducts.propTypes = { + displayProduct: PropTypes.number, + products: PropTypes.array, + sx: PropTypes.object, +}; diff --git a/template/src/components/mega-menu/common/menu-tags.jsx b/template/src/components/mega-menu/common/menu-tags.jsx new file mode 100644 index 0000000..76be0ef --- /dev/null +++ b/template/src/components/mega-menu/common/menu-tags.jsx @@ -0,0 +1,47 @@ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import Typography from '@mui/material/Typography'; + +import { RouterLink } from 'src/routes/components'; + +// ---------------------------------------------------------------------- + +export default function MenuTags({ tags, ...other }) { + return ( + + + Hot Products: + + + {tags.map((tag, index) => ( + theme.transitions.create(['color']), + '&:hover': { + color: 'text.primary', + }, + }} + > + {index === 0 ? tag.title : `, ${tag.title} `} + + ))} + + ); +} + +MenuTags.propTypes = { + tags: PropTypes.array, +}; diff --git a/template/src/components/mega-menu/common/nav-sub-list.jsx b/template/src/components/mega-menu/common/nav-sub-list.jsx new file mode 100644 index 0000000..7565b66 --- /dev/null +++ b/template/src/components/mega-menu/common/nav-sub-list.jsx @@ -0,0 +1,64 @@ +import PropTypes from 'prop-types'; + +import Link from '@mui/material/Link'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +import { usePathname } from 'src/routes/hooks'; +import { RouterLink } from 'src/routes/components'; + +// ---------------------------------------------------------------------- + +export default function NavSubList({ data, slotProps, ...other }) { + const pathname = usePathname(); + + return ( + <> + {data.map((list, index) => ( + + {list.subheader && ( + + {list.subheader} + + )} + + {list.items.map((link) => { + const active = pathname === link.path || pathname === `${link.path}/`; + + return ( + theme.transitions.create('all'), + '&:hover': { + color: 'text.primary', + }, + ...(active && { + color: 'text.primary', + textDecoration: 'underline', + fontWeight: 'fontWeightSemiBold', + }), + ...slotProps?.subItem, + }} + > + {link.title} + + ); + })} + + ))} + + ); +} + +NavSubList.propTypes = { + data: PropTypes.array, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/mega-menu/horizontal/mega-menu-desktop-horizontal.jsx b/template/src/components/mega-menu/horizontal/mega-menu-desktop-horizontal.jsx new file mode 100644 index 0000000..083e5ad --- /dev/null +++ b/template/src/components/mega-menu/horizontal/mega-menu-desktop-horizontal.jsx @@ -0,0 +1,33 @@ +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +export default function MegaMenuDesktopHorizontal({ data, sx, slotProps, ...other }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +MegaMenuDesktopHorizontal.propTypes = { + data: PropTypes.array, + sx: PropTypes.object, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/mega-menu/horizontal/nav-item.jsx b/template/src/components/mega-menu/horizontal/nav-item.jsx new file mode 100644 index 0000000..07f6319 --- /dev/null +++ b/template/src/components/mega-menu/horizontal/nav-item.jsx @@ -0,0 +1,104 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import { styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ({ title, path, icon, open, active, hasChild, externalLink, ...other }, ref) => { + const renderContent = ( + + {icon && ( + + {icon} + + )} + + {title && ( + + {title} + + )} + + {hasChild && } + + ); + + if (externalLink) + return ( + + {renderContent} + + ); + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + active: PropTypes.bool, + path: PropTypes.string, + icon: PropTypes.element, + title: PropTypes.string, + hasChild: PropTypes.bool, + externalLink: PropTypes.bool, +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, open, theme }) => { + const opened = open && !active; + + return { + ...theme.typography.body2, + padding: 0, + minHeight: '100%', + fontWeight: theme.typography.fontWeightMedium, + transition: theme.transitions.create(['all'], { + duration: theme.transitions.duration.shorter, + }), + '&:hover': { + backgroundColor: 'transparent', + }, + '& .icon': { + width: 20, + height: 20, + flexShrink: 0, + marginRight: theme.spacing(1), + }, + '& .arrow': { + marginLeft: theme.spacing(0.75), + }, + ...(active && { + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightSemiBold, + }), + ...(opened && { + opacity: 0.64, + }), + }; +}); diff --git a/template/src/components/mega-menu/horizontal/nav-list.jsx b/template/src/components/mega-menu/horizontal/nav-list.jsx new file mode 100644 index 0000000..3254bb7 --- /dev/null +++ b/template/src/components/mega-menu/horizontal/nav-list.jsx @@ -0,0 +1,169 @@ +import PropTypes from 'prop-types'; +import { useRef, useState, useEffect, useCallback } from 'react'; + +import Masonry from '@mui/lab/Masonry'; +import Stack from '@mui/material/Stack'; +import Popover from '@mui/material/Popover'; +import Divider from '@mui/material/Divider'; + +import { usePathname, useActiveLink } from 'src/routes/hooks'; + +import { hideScroll } from 'src/theme/css'; + +import NavItem from './nav-item'; +import MenuTags from '../common/menu-tags'; +import NavSubList from '../common/nav-sub-list'; +import MenuProducts from '../common/menu-products'; +import MenuMoreLink from '../common/menu-more-link'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, slotProps }) { + const navRef = useRef(null); + + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const singleList = data.children?.length === 1; + + const [openMenu, setOpenMenu] = useState(false); + + const [rectTop, setRectTop] = useState(0); + + useEffect(() => { + if (openMenu) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + useEffect(() => { + const handleScroll = () => { + const element = navRef.current; + + if (element) { + const clientRect = element.getBoundingClientRect(); + + setRectTop(clientRect.top + clientRect.height); + } + }; + + handleScroll(); + + window.addEventListener('scroll', handleScroll); + + return () => { + window.removeEventListener('scroll', handleScroll); + }; + }, []); + + const handleOpenMenu = useCallback(() => { + if (data.children) { + setOpenMenu(true); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && ( + theme.breakpoints.values.lg, + ...(singleList && { + p: 2, + minWidth: 160, + left: 'auto', + right: 'auto', + }), + ...(openMenu && { + pointerEvents: 'auto', + }), + }, + }, + }} + sx={{ + pointerEvents: 'none', + }} + > + {singleList ? ( + + ) : ( + + + + )} + + + {!!data.moreLink && ( + + )} + + {!!data.products && ( + <> + + + + )} + + {!!data.tags && ( + <> + + + + )} + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/mega-menu/index.js b/template/src/components/mega-menu/index.js new file mode 100644 index 0000000..c188006 --- /dev/null +++ b/template/src/components/mega-menu/index.js @@ -0,0 +1,3 @@ +export { default as MegaMenuMobile } from './mobile/mega-menu-mobile'; +export { default as MegaMenuDesktopVertical } from './vertical/mega-menu-desktop-vertical'; +export { default as MegaMenuDesktopHorizontal } from './horizontal/mega-menu-desktop-horizontal'; diff --git a/template/src/components/mega-menu/mobile/mega-menu-mobile.jsx b/template/src/components/mega-menu/mobile/mega-menu-mobile.jsx new file mode 100644 index 0000000..e4fb0fd --- /dev/null +++ b/template/src/components/mega-menu/mobile/mega-menu-mobile.jsx @@ -0,0 +1,22 @@ +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +export default function MegaMenuMobile({ data, slotProps, ...other }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +MegaMenuMobile.propTypes = { + data: PropTypes.array, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/mega-menu/mobile/nav-item.jsx b/template/src/components/mega-menu/mobile/nav-item.jsx new file mode 100644 index 0000000..148b5e0 --- /dev/null +++ b/template/src/components/mega-menu/mobile/nav-item.jsx @@ -0,0 +1,95 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import { alpha, styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ({ title, path, icon, active, hasChild, externalLink, ...other }, ref) => { + const renderContent = ( + + {icon && ( + + {icon} + + )} + + {title && ( + + {title} + + )} + + {hasChild && } + + ); + + if (externalLink) + return ( + + {renderContent} + + ); + + if (hasChild) { + return renderContent; + } + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + active: PropTypes.bool, + path: PropTypes.string, + icon: PropTypes.element, + title: PropTypes.string, + hasChild: PropTypes.bool, + externalLink: PropTypes.bool, +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, theme }) => ({ + ...theme.typography.body2, + paddingLeft: theme.spacing(2.5), + paddingRight: theme.spacing(1.5), + fontWeight: theme.typography.fontWeightMedium, + '& .icon': { + width: 20, + height: 20, + flexShrink: 0, + marginRight: theme.spacing(2), + }, + '& .label': { + flexGrow: 1, + }, + '& .arrow': { + marginLeft: theme.spacing(0.75), + }, + ...(active && { + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightSemiBold, + backgroundColor: alpha(theme.palette.primary.main, 0.08), + '&:hover': { + backgroundColor: alpha(theme.palette.primary.main, 0.16), + }, + }), +})); diff --git a/template/src/components/mega-menu/mobile/nav-list.jsx b/template/src/components/mega-menu/mobile/nav-list.jsx new file mode 100644 index 0000000..35b10dd --- /dev/null +++ b/template/src/components/mega-menu/mobile/nav-list.jsx @@ -0,0 +1,218 @@ +import PropTypes from 'prop-types'; +import { useState, useEffect, useCallback } from 'react'; + +import Box from '@mui/material/Box'; +import List from '@mui/material/List'; +import Stack from '@mui/material/Stack'; +import Drawer from '@mui/material/Drawer'; +import Divider from '@mui/material/Divider'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; +import { alpha, useTheme } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; +import { usePathname, useActiveLink } from 'src/routes/hooks'; + +import NavItem from './nav-item'; +import Iconify from '../../iconify'; +import Scrollbar from '../../scrollbar'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, slotProps }) { + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const [openMenu, setOpenMenu] = useState(false); + + const [rectWidth, setRectWidth] = useState(0); + + useEffect(() => { + if (openMenu) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + useEffect(() => { + const element = document.getElementById('mega-menu-mobile'); + + if (element) { + const clientRect = element?.getBoundingClientRect(); + + setRectWidth(clientRect.width); + } + }, []); + + const handleOpenMenu = useCallback(() => { + if (data.children) { + setOpenMenu(true); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && ( + + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + slotProps: PropTypes.object, +}; + +// ---------------------------------------------------------------------- + +function NavSubList({ data, slotProps, title, onCloseMenu }) { + const theme = useTheme(); + + const pathname = usePathname(); + + return ( + <> + + + + + + + {title} + + + + + + + {data.map((list, index) => ( + + {list.subheader && ( + + {list.subheader} + + )} + + {list.items.map((link) => { + const active = pathname === link.path || pathname === `${link.path}/`; + + return ( + + + + + + + {link.title} + + + ); + })} + + ))} + + + ); +} + +NavSubList.propTypes = { + data: PropTypes.array, + title: PropTypes.string, + onCloseMenu: PropTypes.func, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/mega-menu/vertical/mega-menu-desktop-vertical.jsx b/template/src/components/mega-menu/vertical/mega-menu-desktop-vertical.jsx new file mode 100644 index 0000000..99d5be6 --- /dev/null +++ b/template/src/components/mega-menu/vertical/mega-menu-desktop-vertical.jsx @@ -0,0 +1,31 @@ +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +export default function MegaMenuDesktopVertical({ data, sx, slotProps, ...other }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +MegaMenuDesktopVertical.propTypes = { + data: PropTypes.array, + sx: PropTypes.object, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/mega-menu/vertical/nav-item.jsx b/template/src/components/mega-menu/vertical/nav-item.jsx new file mode 100644 index 0000000..27b510c --- /dev/null +++ b/template/src/components/mega-menu/vertical/nav-item.jsx @@ -0,0 +1,99 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import { alpha, styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ({ title, path, icon, open, active, hasChild, externalLink, ...other }, ref) => { + const renderContent = ( + + {icon && ( + + {icon} + + )} + + {title && ( + + {title} + + )} + + {hasChild && } + + ); + + if (externalLink) + return ( + + {renderContent} + + ); + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + active: PropTypes.bool, + path: PropTypes.string, + icon: PropTypes.element, + title: PropTypes.string, + hasChild: PropTypes.bool, + externalLink: PropTypes.bool, +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, open, theme }) => { + const opened = open && !active; + + return { + ...theme.typography.body2, + paddingLeft: theme.spacing(2.5), + paddingRight: theme.spacing(1.5), + fontWeight: theme.typography.fontWeightMedium, + '& .icon': { + width: 20, + height: 20, + flexShrink: 0, + marginRight: theme.spacing(2), + }, + '& .label': { + flexGrow: 1, + }, + '& .arrow': { + marginLeft: theme.spacing(0.75), + }, + ...(active && { + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightSemiBold, + backgroundColor: alpha(theme.palette.primary.main, 0.08), + '&:hover': { + backgroundColor: alpha(theme.palette.primary.main, 0.16), + }, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }; +}); diff --git a/template/src/components/mega-menu/vertical/nav-list.jsx b/template/src/components/mega-menu/vertical/nav-list.jsx new file mode 100644 index 0000000..82bc656 --- /dev/null +++ b/template/src/components/mega-menu/vertical/nav-list.jsx @@ -0,0 +1,124 @@ +import PropTypes from 'prop-types'; +import { useRef, useState, useEffect, useCallback } from 'react'; + +import Masonry from '@mui/lab/Masonry'; +import Paper from '@mui/material/Paper'; +import Stack from '@mui/material/Stack'; +import Divider from '@mui/material/Divider'; + +import { usePathname, useActiveLink } from 'src/routes/hooks'; + +import NavItem from './nav-item'; +import MenuTags from '../common/menu-tags'; +import NavSubList from '../common/nav-sub-list'; +import MenuProducts from '../common/menu-products'; +import MenuMoreLink from '../common/menu-more-link'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, slotProps }) { + const navRef = useRef(null); + + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const singleList = data.children?.length === 1; + + const [openMenu, setOpenMenu] = useState(false); + + useEffect(() => { + if (openMenu) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + const handleOpenMenu = useCallback(() => { + if (data.children) { + setOpenMenu(true); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && openMenu && ( + theme.zIndex.drawer, + boxShadow: (theme) => theme.customShadows.z20, + ...(singleList && { + p: 2, + width: 'auto', + minWidth: 160, + }), + }} + > + {singleList ? ( + + ) : ( + + + + )} + + + {!!data.moreLink && ( + + )} + + {!!data.products && ( + <> + + + + + )} + + {!!data.tags && ( + <> + + + + )} + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-basic/desktop/nav-basic-desktop.jsx b/template/src/components/nav-basic/desktop/nav-basic-desktop.jsx new file mode 100644 index 0000000..ce599bc --- /dev/null +++ b/template/src/components/nav-basic/desktop/nav-basic-desktop.jsx @@ -0,0 +1,25 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +function NavBasicDesktop({ data, slotProps, ...other }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +NavBasicDesktop.propTypes = { + data: PropTypes.array, + slotProps: PropTypes.object, +}; + +export default memo(NavBasicDesktop); diff --git a/template/src/components/nav-basic/desktop/nav-item.jsx b/template/src/components/nav-basic/desktop/nav-item.jsx new file mode 100644 index 0000000..3989218 --- /dev/null +++ b/template/src/components/nav-basic/desktop/nav-item.jsx @@ -0,0 +1,197 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import { styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ({ title, path, icon, caption, depth, open, active, hasChild, externalLink, ...other }, ref) => { + const subItem = depth !== 1; + + const renderContent = ( + + {icon && ( + + {icon} + + )} + + + {title && ( + + {title} + + )} + + {caption && ( + + {caption} + + )} + + + {hasChild && ( + + )} + + ); + + if (externalLink) + return ( + + {renderContent} + + ); + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + path: PropTypes.string, + active: PropTypes.bool, + icon: PropTypes.element, + title: PropTypes.string, + depth: PropTypes.number, + hasChild: PropTypes.bool, + caption: PropTypes.string, + externalLink: PropTypes.bool, +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, open, depth, theme }) => { + const subItem = depth !== 1; + + const opened = open && !active; + + const baseStyles = { + item: { + ...theme.typography.body2, + fontWeight: theme.typography.fontWeightMedium, + }, + icon: { + width: 20, + height: 20, + flexShrink: 0, + marginRight: theme.spacing(1), + }, + textContainer: { + flexGrow: 1, + display: 'inline-flex', + flexDirection: 'column', + }, + label: { + flexGrow: 1, + }, + caption: { + ...theme.typography.caption, + color: theme.palette.text.disabled, + }, + arrow: { + flexShrink: 0, + marginLeft: theme.spacing(0.75), + }, + }; + + return { + // Root item + ...(!subItem && { + ...baseStyles.item, + padding: 0, + minHeight: 40, + transition: theme.transitions.create(['all'], { + duration: theme.transitions.duration.shorter, + }), + '&:hover': { + backgroundColor: 'transparent', + }, + '& .icon': { + ...baseStyles.icon, + }, + '& .text-container': { + ...baseStyles.textContainer, + }, + '& .label': { + ...baseStyles.label, + }, + '& .caption': { + ...baseStyles.caption, + display: 'none', + }, + '& .arrow': { + ...baseStyles.arrow, + }, + ...(active && { + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightSemiBold, + }), + ...(opened && { + opacity: 0.64, + }), + }), + + // Sub item + ...(subItem && { + ...baseStyles.item, + fontSize: 13, + borderRadius: 6, + padding: theme.spacing(0.75, 1), + color: theme.palette.text.secondary, + '& .icon': { + ...baseStyles.icon, + }, + '& .text-container': { + ...baseStyles.textContainer, + }, + '& .label': { + ...baseStyles.label, + }, + '& .caption': { + ...baseStyles.caption, + }, + '& .arrow': { + ...baseStyles.arrow, + marginRight: theme.spacing(-0.5), + }, + ...(active && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.selected, + fontWeight: theme.typography.fontWeightSemiBold, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }), + }; +}); diff --git a/template/src/components/nav-basic/desktop/nav-list.jsx b/template/src/components/nav-basic/desktop/nav-list.jsx new file mode 100644 index 0000000..7f088d0 --- /dev/null +++ b/template/src/components/nav-basic/desktop/nav-list.jsx @@ -0,0 +1,123 @@ +import PropTypes from 'prop-types'; +import { useRef, useState, useEffect, useCallback } from 'react'; + +import Stack from '@mui/material/Stack'; +import Popover from '@mui/material/Popover'; + +import { usePathname } from 'src/routes/hooks'; +import { useActiveLink } from 'src/routes/hooks/use-active-link'; + +import NavItem from './nav-item'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, depth, slotProps }) { + const navRef = useRef(null); + + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const [openMenu, setOpenMenu] = useState(false); + + useEffect(() => { + if (openMenu) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + const handleOpenMenu = useCallback(() => { + if (data.children) { + setOpenMenu(true); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && ( + + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; + +// ---------------------------------------------------------------------- + +function NavSubList({ data, depth, slotProps }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +NavSubList.propTypes = { + data: PropTypes.array, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-basic/index.js b/template/src/components/nav-basic/index.js new file mode 100644 index 0000000..bab38ef --- /dev/null +++ b/template/src/components/nav-basic/index.js @@ -0,0 +1,2 @@ +export { default as NavBasicMobile } from './mobile/nav-basic-mobile'; +export { default as NavBasicDesktop } from './desktop/nav-basic-desktop'; diff --git a/template/src/components/nav-basic/mobile/nav-basic-mobile.jsx b/template/src/components/nav-basic/mobile/nav-basic-mobile.jsx new file mode 100644 index 0000000..8d899f4 --- /dev/null +++ b/template/src/components/nav-basic/mobile/nav-basic-mobile.jsx @@ -0,0 +1,25 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +function NavBasicMobile({ data, slotProps, ...other }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +NavBasicMobile.propTypes = { + data: PropTypes.array, + slotProps: PropTypes.object, +}; + +export default memo(NavBasicMobile); diff --git a/template/src/components/nav-basic/mobile/nav-item.jsx b/template/src/components/nav-basic/mobile/nav-item.jsx new file mode 100644 index 0000000..e54bd0d --- /dev/null +++ b/template/src/components/nav-basic/mobile/nav-item.jsx @@ -0,0 +1,217 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import { alpha, styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ({ title, path, icon, caption, depth, open, active, hasChild, externalLink, ...other }, ref) => { + const renderContent = ( + + {icon && ( + + {icon} + + )} + + + {title && ( + + {title} + + )} + + {caption && ( + + {caption} + + )} + + + {hasChild && ( + + )} + + ); + + if (hasChild) { + return renderContent; + } + + if (externalLink) + return ( + + {renderContent} + + ); + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + path: PropTypes.string, + active: PropTypes.bool, + icon: PropTypes.element, + title: PropTypes.string, + depth: PropTypes.number, + caption: PropTypes.bool, + hasChild: PropTypes.bool, + externalLink: PropTypes.bool, +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, open, depth, hasChild, theme }) => { + const subItem = depth !== 1; + + const opened = open && !active; + + const noWrapStyles = { + width: '100%', + maxWidth: '100%', + display: 'block', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + }; + + const baseStyles = { + item: { + ...theme.typography.body2, + }, + icon: { + width: 20, + height: 20, + flexShrink: 0, + }, + textContainer: { + minWidth: 0, + flex: '1 1 auto', + display: 'inline-flex', + flexDirection: 'column', + }, + label: { + ...noWrapStyles, + }, + caption: { + ...noWrapStyles, + ...theme.typography.caption, + color: theme.palette.text.disabled, + }, + arrow: { + flexShrink: 0, + marginLeft: theme.spacing(0.75), + }, + }; + + return { + // Root item + ...(!subItem && { + ...baseStyles.item, + paddingLeft: theme.spacing(2), + paddingRight: theme.spacing(hasChild ? 1 : 3), + fontWeight: theme.typography.fontWeightMedium, + '& .icon': { + ...baseStyles.icon, + marginRight: theme.spacing(2), + }, + '& .text-container': { + ...baseStyles.textContainer, + }, + '& .label': { + ...baseStyles.label, + }, + '& .caption': { + ...baseStyles.caption, + }, + '& .arrow': { + ...baseStyles.arrow, + }, + ...(active && { + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightSemiBold, + backgroundColor: alpha(theme.palette.primary.main, 0.08), + '&:hover': { + backgroundColor: alpha(theme.palette.primary.main, 0.16), + }, + }), + ...(opened && { + backgroundColor: theme.palette.action.hover, + }), + }), + + // Sub item + ...(subItem && { + ...baseStyles.item, + fontSize: 13, + minHeight: 32, + color: theme.palette.text.secondary, + padding: theme.spacing(1, hasChild ? 1 : 3, 1, Number(depth) * 2 - 1), + '&:before': { + content: '""', + width: 1, + height: '100%', + position: 'absolute', + backgroundColor: theme.palette.divider, + ...(active && { + backgroundColor: theme.palette.text.primary, + }), + }, + '& .icon': { + ...baseStyles.icon, + marginLeft: theme.spacing(2), + }, + '& .text-container': { + ...baseStyles.textContainer, + marginLeft: theme.spacing(2), + }, + '& .label': { + ...baseStyles.label, + }, + '& .caption': { + ...baseStyles.caption, + }, + '& .arrow': { + ...baseStyles.arrow, + }, + ...(active && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.selected, + fontWeight: theme.typography.fontWeightSemiBold, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }), + }; +}); diff --git a/template/src/components/nav-basic/mobile/nav-list.jsx b/template/src/components/nav-basic/mobile/nav-list.jsx new file mode 100644 index 0000000..ba3b720 --- /dev/null +++ b/template/src/components/nav-basic/mobile/nav-list.jsx @@ -0,0 +1,88 @@ +import PropTypes from 'prop-types'; +import { useState, useEffect, useCallback } from 'react'; + +import Collapse from '@mui/material/Collapse'; + +import { usePathname } from 'src/routes/hooks'; +import { useActiveLink } from 'src/routes/hooks/use-active-link'; + +import NavItem from './nav-item'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, depth, slotProps }) { + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const [openMenu, setOpenMenu] = useState(active); + + useEffect(() => { + if (!active) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + const handleToggleMenu = useCallback(() => { + if (data.children) { + setOpenMenu((prev) => !prev); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && ( + + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; + +// ---------------------------------------------------------------------- + +function NavSubList({ data, depth, slotProps }) { + return ( + <> + {data.map((list) => ( + + ))} + + ); +} + +NavSubList.propTypes = { + data: PropTypes.array, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-section/horizontal/index.js b/template/src/components/nav-section/horizontal/index.js new file mode 100644 index 0000000..670925e --- /dev/null +++ b/template/src/components/nav-section/horizontal/index.js @@ -0,0 +1 @@ +export { default } from './nav-section-horizontal'; diff --git a/template/src/components/nav-section/horizontal/nav-item.jsx b/template/src/components/nav-section/horizontal/nav-item.jsx new file mode 100644 index 0000000..a18f7be --- /dev/null +++ b/template/src/components/nav-section/horizontal/nav-item.jsx @@ -0,0 +1,246 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import Tooltip from '@mui/material/Tooltip'; +import { styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ( + { + title, + path, + icon, + info, + disabled, + caption, + roles, + // + open, + depth, + active, + hasChild, + externalLink, + currentRole = 'admin', + ...other + }, + ref + ) => { + const subItem = depth !== 1; + + const renderContent = ( + + {icon && ( + + {icon} + + )} + + {title && ( + + {title} + + )} + + {caption && ( + + + + )} + + {info && ( + + {info} + + )} + + {hasChild && ( + + )} + + ); + + // Hidden item by role + if (roles && !roles.includes(`${currentRole}`)) { + return null; + } + + if (externalLink) + return ( + + {renderContent} + + ); + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + active: PropTypes.bool, + path: PropTypes.string, + depth: PropTypes.number, + icon: PropTypes.element, + info: PropTypes.element, + title: PropTypes.string, + disabled: PropTypes.bool, + hasChild: PropTypes.bool, + caption: PropTypes.string, + externalLink: PropTypes.bool, + currentRole: PropTypes.string, + roles: PropTypes.arrayOf(PropTypes.string), +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, open, depth, theme }) => { + const subItem = depth !== 1; + + const opened = open && !active; + + const baseStyles = { + item: { + ...theme.typography.body2, + borderRadius: 6, + color: theme.palette.text.secondary, + fontWeight: theme.typography.fontWeightMedium, + }, + icon: { + width: 22, + height: 22, + flexShrink: 0, + marginRight: theme.spacing(1), + }, + label: { + textTransform: 'capitalize', + }, + caption: { + marginLeft: theme.spacing(0.75), + color: theme.palette.text.disabled, + }, + info: { + display: 'inline-flex', + marginLeft: theme.spacing(0.75), + }, + arrow: { + marginLeft: theme.spacing(0.75), + }, + }; + + return { + // Root item + ...(!subItem && { + ...baseStyles.item, + minHeight: 32, + flexShrink: 0, + padding: theme.spacing(0, 0.75), + '& .icon': { + ...baseStyles.icon, + }, + '& .label': { + ...baseStyles.label, + whiteSpace: 'nowrap', + }, + '& .caption': { + ...baseStyles.caption, + }, + '& .info': { + ...baseStyles.info, + }, + '& .arrow': { + ...baseStyles.arrow, + }, + ...(active && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.selected, + fontWeight: theme.typography.fontWeightSemiBold, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }), + + // Sub item + ...(subItem && { + ...baseStyles.item, + minHeight: 34, + padding: theme.spacing(0, 1), + '& .icon': { + ...baseStyles.icon, + }, + '& .label': { + ...baseStyles.label, + flexGrow: 1, + }, + '& .caption': { + ...baseStyles.caption, + }, + '& .info': { + ...baseStyles.info, + }, + '& .arrow': { + ...baseStyles.arrow, + marginRight: theme.spacing(-0.5), + }, + ...(active && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.selected, + fontWeight: theme.typography.fontWeightSemiBold, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }), + }; +}); diff --git a/template/src/components/nav-section/horizontal/nav-list.jsx b/template/src/components/nav-section/horizontal/nav-list.jsx new file mode 100644 index 0000000..fc350f8 --- /dev/null +++ b/template/src/components/nav-section/horizontal/nav-list.jsx @@ -0,0 +1,126 @@ +import PropTypes from 'prop-types'; +import { useRef, useState, useEffect, useCallback } from 'react'; + +import Stack from '@mui/material/Stack'; +import Popover from '@mui/material/Popover'; + +import { usePathname } from 'src/routes/hooks'; +import { useActiveLink } from 'src/routes/hooks/use-active-link'; + +import NavItem from './nav-item'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, depth, slotProps }) { + const navRef = useRef(null); + + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const [openMenu, setOpenMenu] = useState(false); + + useEffect(() => { + if (openMenu) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + const handleOpenMenu = useCallback(() => { + if (data.children) { + setOpenMenu(true); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && ( + + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; + +// ---------------------------------------------------------------------- + +function NavSubList({ data, depth, slotProps }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +NavSubList.propTypes = { + data: PropTypes.array, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-section/horizontal/nav-section-horizontal.jsx b/template/src/components/nav-section/horizontal/nav-section-horizontal.jsx new file mode 100644 index 0000000..3ec6aa1 --- /dev/null +++ b/template/src/components/nav-section/horizontal/nav-section-horizontal.jsx @@ -0,0 +1,54 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +function NavSectionHorizontal({ data, slotProps, sx, ...other }) { + return ( + + {data.map((group, index) => ( + + ))} + + ); +} + +NavSectionHorizontal.propTypes = { + data: PropTypes.array, + sx: PropTypes.object, + slotProps: PropTypes.object, +}; + +export default memo(NavSectionHorizontal); + +// ---------------------------------------------------------------------- + +function Group({ items, slotProps }) { + return ( + <> + {items.map((list) => ( + + ))} + + ); +} + +Group.propTypes = { + items: PropTypes.array, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-section/index.js b/template/src/components/nav-section/index.js new file mode 100644 index 0000000..730d102 --- /dev/null +++ b/template/src/components/nav-section/index.js @@ -0,0 +1,3 @@ +export { default as NavSectionMini } from './mini'; +export { default as NavSectionVertical } from './vertical'; +export { default as NavSectionHorizontal } from './horizontal'; diff --git a/template/src/components/nav-section/mini/index.js b/template/src/components/nav-section/mini/index.js new file mode 100644 index 0000000..cdf35ab --- /dev/null +++ b/template/src/components/nav-section/mini/index.js @@ -0,0 +1 @@ +export { default } from './nav-section-mini'; diff --git a/template/src/components/nav-section/mini/nav-item.jsx b/template/src/components/nav-section/mini/nav-item.jsx new file mode 100644 index 0000000..cc3348d --- /dev/null +++ b/template/src/components/nav-section/mini/nav-item.jsx @@ -0,0 +1,260 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import Tooltip from '@mui/material/Tooltip'; +import { alpha, styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ( + { + title, + path, + icon, + info, + disabled, + caption, + roles, + // + open, + depth, + active, + hasChild, + externalLink, + currentRole = 'admin', + ...other + }, + ref + ) => { + const subItem = depth !== 1; + + const renderContent = ( + + {icon && ( + + {icon} + + )} + + {title && ( + + {title} + + )} + + {caption && ( + + + + )} + + {info && subItem && ( + + {info} + + )} + + {hasChild && } + + ); + + // Hidden item by role + if (roles && !roles.includes(`${currentRole}`)) { + return null; + } + + if (externalLink) + return ( + + {renderContent} + + ); + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + active: PropTypes.bool, + path: PropTypes.string, + depth: PropTypes.number, + icon: PropTypes.element, + info: PropTypes.element, + title: PropTypes.string, + disabled: PropTypes.bool, + hasChild: PropTypes.bool, + caption: PropTypes.string, + externalLink: PropTypes.bool, + currentRole: PropTypes.string, + roles: PropTypes.arrayOf(PropTypes.string), +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, open, depth, theme }) => { + const subItem = depth !== 1; + + const opened = open && !active; + + const lightMode = theme.palette.mode === 'light'; + + const noWrapStyles = { + width: '100%', + maxWidth: '100%', + display: 'block', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + }; + + const baseStyles = { + item: { + borderRadius: 6, + color: theme.palette.text.secondary, + }, + icon: { + width: 22, + height: 22, + flexShrink: 0, + }, + label: { + textTransform: 'capitalize', + }, + caption: { + color: theme.palette.text.disabled, + }, + }; + + return { + // Root item + ...(!subItem && { + ...baseStyles.item, + fontSize: 10, + minHeight: 56, + lineHeight: '16px', + textAlign: 'center', + flexDirection: 'column', + justifyContent: 'center', + padding: theme.spacing(0.5), + margin: theme.spacing(0, 0.5), + fontWeight: theme.typography.fontWeightSemiBold, + '& .icon': { + ...baseStyles.icon, + }, + '& .label': { + ...noWrapStyles, + ...baseStyles.label, + marginTop: theme.spacing(0.5), + }, + '& .caption': { + ...baseStyles.caption, + top: 11, + left: 6, + position: 'absolute', + }, + '& .arrow': { + top: 11, + right: 6, + position: 'absolute', + }, + ...(active && { + fontWeight: theme.typography.fontWeightBold, + backgroundColor: alpha(theme.palette.primary.main, 0.08), + color: lightMode ? theme.palette.primary.main : theme.palette.primary.light, + '&:hover': { + backgroundColor: alpha(theme.palette.primary.main, 0.16), + }, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }), + + // Sub item + ...(subItem && { + ...baseStyles.item, + ...theme.typography.body2, + minHeight: 34, + padding: theme.spacing(0, 1), + fontWeight: theme.typography.fontWeightMedium, + '& .icon': { + ...baseStyles.icon, + marginRight: theme.spacing(1), + }, + '& .label': { + ...baseStyles.label, + flexGrow: 1, + }, + '& .caption': { + ...baseStyles.caption, + marginLeft: theme.spacing(0.75), + }, + '& .info': { + display: 'inline-flex', + marginLeft: theme.spacing(0.75), + }, + '& .arrow': { + marginLeft: theme.spacing(0.75), + marginRight: theme.spacing(-0.5), + }, + ...(active && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.selected, + fontWeight: theme.typography.fontWeightSemiBold, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }), + }; +}); diff --git a/template/src/components/nav-section/mini/nav-list.jsx b/template/src/components/nav-section/mini/nav-list.jsx new file mode 100644 index 0000000..a1b00c3 --- /dev/null +++ b/template/src/components/nav-section/mini/nav-list.jsx @@ -0,0 +1,119 @@ +import PropTypes from 'prop-types'; +import { useRef, useState, useEffect, useCallback } from 'react'; + +import Stack from '@mui/material/Stack'; +import Popover from '@mui/material/Popover'; + +import { usePathname } from 'src/routes/hooks'; +import { useActiveLink } from 'src/routes/hooks/use-active-link'; + +import NavItem from './nav-item'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, depth, slotProps }) { + const navRef = useRef(null); + + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const [openMenu, setOpenMenu] = useState(false); + + useEffect(() => { + if (openMenu) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + const handleOpenMenu = useCallback(() => { + if (data.children) { + setOpenMenu(true); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && ( + + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; + +// ---------------------------------------------------------------------- + +function NavSubList({ data, depth, slotProps }) { + return ( + + {data.map((list) => ( + + ))} + + ); +} + +NavSubList.propTypes = { + data: PropTypes.array, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-section/mini/nav-section-mini.jsx b/template/src/components/nav-section/mini/nav-section-mini.jsx new file mode 100644 index 0000000..3a4fb25 --- /dev/null +++ b/template/src/components/nav-section/mini/nav-section-mini.jsx @@ -0,0 +1,42 @@ +import { memo } from 'react'; +import PropTypes from 'prop-types'; + +import Stack from '@mui/material/Stack'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +function NavSectionMini({ data, slotProps, ...other }) { + return ( + + {data.map((group, index) => ( + + ))} + + ); +} + +NavSectionMini.propTypes = { + data: PropTypes.array, + slotProps: PropTypes.object, +}; + +export default memo(NavSectionMini); + +// ---------------------------------------------------------------------- + +function Group({ items, slotProps }) { + return ( + <> + {items.map((list) => ( + + ))} + + ); +} + +Group.propTypes = { + items: PropTypes.array, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-section/vertical/index.js b/template/src/components/nav-section/vertical/index.js new file mode 100644 index 0000000..88c6c85 --- /dev/null +++ b/template/src/components/nav-section/vertical/index.js @@ -0,0 +1 @@ +export { default } from './nav-section-vertical'; diff --git a/template/src/components/nav-section/vertical/nav-item.jsx b/template/src/components/nav-section/vertical/nav-item.jsx new file mode 100644 index 0000000..a20eddc --- /dev/null +++ b/template/src/components/nav-section/vertical/nav-item.jsx @@ -0,0 +1,298 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; +import Link from '@mui/material/Link'; +import Tooltip from '@mui/material/Tooltip'; +import { alpha, styled } from '@mui/material/styles'; +import ListItemButton from '@mui/material/ListItemButton'; + +import { RouterLink } from 'src/routes/components'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +const NavItem = forwardRef( + ( + { + title, + path, + icon, + info, + disabled, + caption, + roles, + // + open, + depth, + active, + hasChild, + externalLink, + currentRole = 'admin', + ...other + }, + ref + ) => { + const subItem = depth !== 1; + + const renderContent = ( + + {!subItem && icon && ( + + {icon} + + )} + + {subItem && icon ? ( + + {icon} + + ) : ( + + )} + + {title && ( + + + {title} + + + {caption && ( + + + {caption} + + + )} + + )} + + {info && ( + + {info} + + )} + + {hasChild && ( + + )} + + ); + + // Hidden item by role + if (roles && !roles.includes(`${currentRole}`)) { + return null; + } + + if (hasChild) { + return renderContent; + } + + if (externalLink) + return ( + + {renderContent} + + ); + + return ( + + {renderContent} + + ); + } +); + +NavItem.propTypes = { + open: PropTypes.bool, + active: PropTypes.bool, + path: PropTypes.string, + depth: PropTypes.number, + icon: PropTypes.element, + info: PropTypes.element, + title: PropTypes.string, + disabled: PropTypes.bool, + hasChild: PropTypes.bool, + caption: PropTypes.string, + externalLink: PropTypes.bool, + currentRole: PropTypes.string, + roles: PropTypes.arrayOf(PropTypes.string), +}; + +export default NavItem; + +// ---------------------------------------------------------------------- + +const StyledNavItem = styled(ListItemButton, { + shouldForwardProp: (prop) => prop !== 'active', +})(({ active, open, depth, theme }) => { + const subItem = depth !== 1; + + const opened = open && !active; + + const deepSubItem = Number(depth) > 2; + + const noWrapStyles = { + width: '100%', + maxWidth: '100%', + display: 'block', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + }; + + const baseStyles = { + item: { + marginBottom: 4, + borderRadius: 8, + color: theme.palette.text.secondary, + padding: theme.spacing(0.5, 1, 0.5, 1.5), + }, + icon: { + width: 24, + height: 24, + flexShrink: 0, + marginRight: theme.spacing(2), + }, + label: { + ...noWrapStyles, + ...theme.typography.body2, + textTransform: 'capitalize', + fontWeight: theme.typography[active ? 'fontWeightSemiBold' : 'fontWeightMedium'], + }, + caption: { + ...noWrapStyles, + ...theme.typography.caption, + color: theme.palette.text.disabled, + }, + info: { + display: 'inline-flex', + marginLeft: theme.spacing(0.75), + }, + arrow: { + flexShrink: 0, + marginLeft: theme.spacing(0.75), + }, + }; + + return { + // Root item + ...(!subItem && { + ...baseStyles.item, + minHeight: 44, + '& .icon': { + ...baseStyles.icon, + }, + '& .sub-icon': { + display: 'none', + }, + '& .label': { + ...baseStyles.label, + }, + '& .caption': { + ...baseStyles.caption, + }, + '& .info': { + ...baseStyles.info, + }, + '& .arrow': { + ...baseStyles.arrow, + }, + ...(active && { + color: + theme.palette.mode === 'light' ? theme.palette.primary.main : theme.palette.primary.light, + backgroundColor: alpha(theme.palette.primary.main, 0.08), + '&:hover': { + backgroundColor: alpha(theme.palette.primary.main, 0.16), + }, + }), + ...(opened && { + color: theme.palette.text.primary, + backgroundColor: theme.palette.action.hover, + }), + }), + + // Sub item + ...(subItem && { + ...baseStyles.item, + minHeight: 36, + '& .icon': { + ...baseStyles.icon, + }, + '& .sub-icon': { + ...baseStyles.icon, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + '&:before': { + content: '""', + width: 4, + height: 4, + borderRadius: '50%', + backgroundColor: theme.palette.text.disabled, + transition: theme.transitions.create(['transform'], { + duration: theme.transitions.duration.shorter, + }), + ...(active && { + transform: 'scale(2)', + backgroundColor: theme.palette.primary.main, + }), + }, + }, + '& .label': { + ...baseStyles.label, + }, + '& .caption': { + ...baseStyles.caption, + }, + '& .info': { + ...baseStyles.info, + }, + '& .arrow': { + ...baseStyles.arrow, + }, + ...(active && { + color: theme.palette.text.primary, + }), + }), + + // Deep sub item + ...(deepSubItem && { + paddingLeft: `${theme.spacing(Number(depth))} !important`, + }), + }; +}); diff --git a/template/src/components/nav-section/vertical/nav-list.jsx b/template/src/components/nav-section/vertical/nav-list.jsx new file mode 100644 index 0000000..fb983fc --- /dev/null +++ b/template/src/components/nav-section/vertical/nav-list.jsx @@ -0,0 +1,95 @@ +import PropTypes from 'prop-types'; +import { useState, useEffect, useCallback } from 'react'; + +import Collapse from '@mui/material/Collapse'; + +import { usePathname } from 'src/routes/hooks'; +import { useActiveLink } from 'src/routes/hooks/use-active-link'; + +import NavItem from './nav-item'; + +// ---------------------------------------------------------------------- + +export default function NavList({ data, depth, slotProps }) { + const pathname = usePathname(); + + const active = useActiveLink(data.path, !!data.children); + + const [openMenu, setOpenMenu] = useState(active); + + useEffect(() => { + if (!active) { + handleCloseMenu(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + const handleToggleMenu = useCallback(() => { + if (data.children) { + setOpenMenu((prev) => !prev); + } + }, [data.children]); + + const handleCloseMenu = useCallback(() => { + setOpenMenu(false); + }, []); + + return ( + <> + + + {!!data.children && ( + + + + )} + + ); +} + +NavList.propTypes = { + data: PropTypes.object, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; + +// ---------------------------------------------------------------------- + +function NavSubList({ data, depth, slotProps }) { + return ( + <> + {data.map((list) => ( + + ))} + + ); +} + +NavSubList.propTypes = { + data: PropTypes.array, + depth: PropTypes.number, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/nav-section/vertical/nav-section-vertical.jsx b/template/src/components/nav-section/vertical/nav-section-vertical.jsx new file mode 100644 index 0000000..f157fea --- /dev/null +++ b/template/src/components/nav-section/vertical/nav-section-vertical.jsx @@ -0,0 +1,89 @@ +import PropTypes from 'prop-types'; +import { memo, useState, useCallback } from 'react'; + +import Stack from '@mui/material/Stack'; +import Collapse from '@mui/material/Collapse'; +import ListSubheader from '@mui/material/ListSubheader'; + +import NavList from './nav-list'; + +// ---------------------------------------------------------------------- + +function NavSectionVertical({ data, slotProps, ...other }) { + return ( + + {data.map((group, index) => ( + + ))} + + ); +} + +NavSectionVertical.propTypes = { + data: PropTypes.array, + slotProps: PropTypes.object, +}; + +export default memo(NavSectionVertical); + +// ---------------------------------------------------------------------- + +function Group({ subheader, items, slotProps }) { + const [open, setOpen] = useState(true); + + const handleToggle = useCallback(() => { + setOpen((prev) => !prev); + }, []); + + const renderContent = items.map((list) => ( + + )); + + return ( + + {subheader ? ( + <> + theme.spacing(2, 1, 1, 1.5), + transition: (theme) => + theme.transitions.create(['color'], { + duration: theme.transitions.duration.shortest, + }), + '&:hover': { + color: 'text.primary', + }, + ...slotProps?.subheader, + }} + > + {subheader} + + + {renderContent} + + ) : ( + renderContent + )} + + ); +} + +Group.propTypes = { + items: PropTypes.array, + subheader: PropTypes.string, + slotProps: PropTypes.object, +}; diff --git a/template/src/components/player/index.js b/template/src/components/player/index.js new file mode 100644 index 0000000..5dd1904 --- /dev/null +++ b/template/src/components/player/index.js @@ -0,0 +1,3 @@ +export { default } from './player'; + +export { default as PlayerDialog } from './player-dialog'; diff --git a/template/src/components/player/player-dialog.jsx b/template/src/components/player/player-dialog.jsx new file mode 100644 index 0000000..86d225d --- /dev/null +++ b/template/src/components/player/player-dialog.jsx @@ -0,0 +1,71 @@ +import PropTypes from 'prop-types'; + +import Dialog from '@mui/material/Dialog'; +import { alpha } from '@mui/material/styles'; +import IconButton from '@mui/material/IconButton'; +import CircularProgress from '@mui/material/CircularProgress'; + +import { useBoolean } from 'src/hooks/use-boolean'; + +import Iconify from '../iconify'; +import { StyledReactPlayer } from './styles'; + +// ---------------------------------------------------------------------- + +export default function PlayerDialog({ videoPath, open, onClose, ...other }) { + const loading = useBoolean(true); + + return ( + + alpha(theme.palette.common.white, 0.72), + bgcolor: (theme) => alpha(theme.palette.common.white, 0.08), + '&:hover': { + bgcolor: (theme) => alpha(theme.palette.common.white, 0.16), + }, + }} + > + + + + {loading.value && ( + + )} + + + + ); +} + +PlayerDialog.propTypes = { + onClose: PropTypes.func, + open: PropTypes.bool, + videoPath: PropTypes.string, +}; diff --git a/template/src/components/player/player.jsx b/template/src/components/player/player.jsx new file mode 100644 index 0000000..d973291 --- /dev/null +++ b/template/src/components/player/player.jsx @@ -0,0 +1,9 @@ +import { StyledReactPlayer } from './styles'; + +// ---------------------------------------------------------------------- + +// https://github.com/CookPete/react-player + +export default function Player({ ...other }) { + return ; +} diff --git a/template/src/components/player/styles.js b/template/src/components/player/styles.js new file mode 100644 index 0000000..b6acae9 --- /dev/null +++ b/template/src/components/player/styles.js @@ -0,0 +1,13 @@ +import ReactPlayer from 'react-player'; + +import { styled } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +export const StyledReactPlayer = styled(ReactPlayer)({ + width: '100% !important', + height: '100% !important', + '& video': { + objectFit: 'cover', + }, +}); diff --git a/template/src/components/progress-bar/index.js b/template/src/components/progress-bar/index.js new file mode 100644 index 0000000..e671dce --- /dev/null +++ b/template/src/components/progress-bar/index.js @@ -0,0 +1,3 @@ +export { default } from './progress-bar'; + +export { default as StyledProgressBar } from './styles'; diff --git a/template/src/components/progress-bar/progress-bar.jsx b/template/src/components/progress-bar/progress-bar.jsx new file mode 100644 index 0000000..adbf011 --- /dev/null +++ b/template/src/components/progress-bar/progress-bar.jsx @@ -0,0 +1,48 @@ +import NProgress from 'nprogress'; +import { useState, useEffect } from 'react'; + +import { usePathname } from 'src/routes/hooks'; + +import StyledProgressBar from './styles'; + +// ---------------------------------------------------------------------- + +export default function ProgressBar() { + const pathname = usePathname(); + + const [mounted, setMounted] = useState(false); + + const [visible, setVisible] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + useEffect(() => { + if (!visible) { + NProgress.start(); + setVisible(true); + } + + if (visible) { + NProgress.done(); + setVisible(false); + } + + if (!visible && mounted) { + setVisible(false); + NProgress.done(); + } + + return () => { + NProgress.done(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname, mounted]); + + if (!mounted) { + return null; + } + + return ; +} diff --git a/template/src/components/progress-bar/styles.jsx b/template/src/components/progress-bar/styles.jsx new file mode 100644 index 0000000..ffa41e2 --- /dev/null +++ b/template/src/components/progress-bar/styles.jsx @@ -0,0 +1,40 @@ +import { useTheme } from '@mui/material/styles'; +import GlobalStyles from '@mui/material/GlobalStyles'; + +// ---------------------------------------------------------------------- + +export default function StyledProgressBar() { + const theme = useTheme(); + + const inputGlobalStyles = ( + + ); + + return inputGlobalStyles; +} diff --git a/template/src/components/scroll-progress/index.js b/template/src/components/scroll-progress/index.js new file mode 100644 index 0000000..2d85fbb --- /dev/null +++ b/template/src/components/scroll-progress/index.js @@ -0,0 +1 @@ +export { default } from './scroll-progress'; diff --git a/template/src/components/scroll-progress/scroll-progress.jsx b/template/src/components/scroll-progress/scroll-progress.jsx new file mode 100644 index 0000000..87a6048 --- /dev/null +++ b/template/src/components/scroll-progress/scroll-progress.jsx @@ -0,0 +1,58 @@ +import PropTypes from 'prop-types'; +import { m, useSpring } from 'framer-motion'; + +import Box from '@mui/material/Box'; + +// ---------------------------------------------------------------------- + +export default function ScrollProgress({ + color = 'primary', + size = 3, + scrollYProgress, + sx, + ...other +}) { + const scaleX = useSpring(scrollYProgress, { + stiffness: 100, + damping: 30, + restDelta: 0.001, + }); + + return ( + + `linear-gradient(135deg, ${theme.palette[color].light} 0%, ${theme.palette[color].main} 100%)`, + }), + ...sx, + }} + style={{ scaleX }} + {...other} + /> + ); +} + +ScrollProgress.propTypes = { + color: PropTypes.oneOf([ + 'inherit', + 'primary', + 'secondary', + 'info', + 'success', + 'warning', + 'error', + ]), + scrollYProgress: PropTypes.object, + size: PropTypes.number, + sx: PropTypes.object, +}; diff --git a/template/src/components/scrollbar/index.js b/template/src/components/scrollbar/index.js new file mode 100644 index 0000000..52778f5 --- /dev/null +++ b/template/src/components/scrollbar/index.js @@ -0,0 +1 @@ +export { default } from './scrollbar'; diff --git a/template/src/components/scrollbar/scrollbar.jsx b/template/src/components/scrollbar/scrollbar.jsx new file mode 100644 index 0000000..5179478 --- /dev/null +++ b/template/src/components/scrollbar/scrollbar.jsx @@ -0,0 +1,44 @@ +import PropTypes from 'prop-types'; +import { memo, forwardRef } from 'react'; + +import Box from '@mui/material/Box'; + +import { StyledScrollbar, StyledRootScrollbar } from './styles'; + +// ---------------------------------------------------------------------- + +const Scrollbar = forwardRef(({ children, sx, ...other }, ref) => { + const userAgent = typeof navigator === 'undefined' ? 'SSR' : navigator.userAgent; + + const mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent); + + if (mobile) { + return ( + + {children} + + ); + } + + return ( + + + {children} + + + ); +}); + +Scrollbar.propTypes = { + children: PropTypes.node, + sx: PropTypes.object, +}; + +export default memo(Scrollbar); diff --git a/template/src/components/scrollbar/styles.js b/template/src/components/scrollbar/styles.js new file mode 100644 index 0000000..f77cdab --- /dev/null +++ b/template/src/components/scrollbar/styles.js @@ -0,0 +1,26 @@ +import SimpleBar from 'simplebar-react'; + +import { alpha, styled } from '@mui/material/styles'; + +// ---------------------------------------------------------------------- + +export const StyledRootScrollbar = styled('div')(() => ({ + flexGrow: 1, + height: '100%', + overflow: 'hidden', +})); + +export const StyledScrollbar = styled(SimpleBar)(({ theme }) => ({ + maxHeight: '100%', + '& .simplebar-scrollbar': { + '&:before': { + backgroundColor: alpha(theme.palette.grey[600], 0.48), + }, + '&.simplebar-visible:before': { + opacity: 1, + }, + }, + '& .simplebar-mask': { + zIndex: 'inherit', + }, +})); diff --git a/template/src/components/settings/context/index.js b/template/src/components/settings/context/index.js new file mode 100644 index 0000000..278e885 --- /dev/null +++ b/template/src/components/settings/context/index.js @@ -0,0 +1,2 @@ +export { SettingsProvider } from './settings-provider'; +export { useSettingsContext } from './settings-context'; diff --git a/template/src/components/settings/context/settings-context.js b/template/src/components/settings/context/settings-context.js new file mode 100644 index 0000000..89c6418 --- /dev/null +++ b/template/src/components/settings/context/settings-context.js @@ -0,0 +1,13 @@ +import { useContext, createContext } from 'react'; + +// ---------------------------------------------------------------------- + +export const SettingsContext = createContext({}); + +export const useSettingsContext = () => { + const context = useContext(SettingsContext); + + if (!context) throw new Error('useSettingsContext must be use inside SettingsProvider'); + + return context; +}; diff --git a/template/src/components/settings/context/settings-provider.jsx b/template/src/components/settings/context/settings-provider.jsx new file mode 100644 index 0000000..60c11d8 --- /dev/null +++ b/template/src/components/settings/context/settings-provider.jsx @@ -0,0 +1,50 @@ +import PropTypes from 'prop-types'; +import isEqual from 'lodash.isequal'; +import { useMemo, useState, useCallback } from 'react'; + +import { useLocalStorage } from 'src/hooks/use-local-storage'; + +import { SettingsContext } from './settings-context'; + +// ---------------------------------------------------------------------- + +const STORAGE_KEY = 'settings'; + +export function SettingsProvider({ children, defaultSettings }) { + const { state, update, reset } = useLocalStorage(STORAGE_KEY, defaultSettings); + + const [openDrawer, setOpenDrawer] = useState(false); + + // Drawer + const onToggleDrawer = useCallback(() => { + setOpenDrawer((prev) => !prev); + }, []); + + const onCloseDrawer = useCallback(() => { + setOpenDrawer(false); + }, []); + + const canReset = !isEqual(state, defaultSettings); + + const memoizedValue = useMemo( + () => ({ + ...state, + onUpdate: update, + // Reset + canReset, + onReset: reset, + // Drawer + open: openDrawer, + onToggle: onToggleDrawer, + onClose: onCloseDrawer, + }), + [canReset, onCloseDrawer, onToggleDrawer, openDrawer, reset, state, update] + ); + + return {children}; +} + +SettingsProvider.propTypes = { + children: PropTypes.node, + defaultSettings: PropTypes.object, +}; diff --git a/template/src/components/settings/drawer/base-options.jsx b/template/src/components/settings/drawer/base-options.jsx new file mode 100644 index 0000000..fb22861 --- /dev/null +++ b/template/src/components/settings/drawer/base-options.jsx @@ -0,0 +1,32 @@ +import PropTypes from 'prop-types'; + +import Typography from '@mui/material/Typography'; +import ListItemButton from '@mui/material/ListItemButton'; + +import Iconify from '../../iconify'; + +// ---------------------------------------------------------------------- + +export default function BaseOptions({ title, icons, selected, ...other }) { + return ( + + {title} + + + ); +} + +BaseOptions.propTypes = { + icons: PropTypes.arrayOf(PropTypes.string), + selected: PropTypes.bool, + title: PropTypes.string, +}; diff --git a/template/src/components/settings/drawer/index.js b/template/src/components/settings/drawer/index.js new file mode 100644 index 0000000..201e333 --- /dev/null +++ b/template/src/components/settings/drawer/index.js @@ -0,0 +1 @@ +export { default } from './settings-drawer'; diff --git a/template/src/components/settings/drawer/presets-options.jsx b/template/src/components/settings/drawer/presets-options.jsx new file mode 100644 index 0000000..84556bd --- /dev/null +++ b/template/src/components/settings/drawer/presets-options.jsx @@ -0,0 +1,136 @@ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Radio from '@mui/material/Radio'; +import Paper from '@mui/material/Paper'; +import Typography from '@mui/material/Typography'; +import RadioGroup from '@mui/material/RadioGroup'; +import { alpha, styled } from '@mui/material/styles'; +import CardActionArea from '@mui/material/CardActionArea'; +import FormControlLabel from '@mui/material/FormControlLabel'; + +import { presetOptions } from 'src/theme/options/presets'; + +// ---------------------------------------------------------------------- + +const BOX_BORDER_RADIUS = 1.5; + +const StyledBoxWrap = styled('div')(() => ({ + height: 104, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', +})); + +const StyledBoxPrimary = styled('div')(() => ({ + width: 64, + height: 64, + overflow: 'hidden', + borderRadius: '50%', + position: 'relative', +})); + +const StyledBoxSecondary = styled('div')(({ theme }) => ({ + top: 0, + bottom: 0, + right: 0, + margin: 'auto', + width: '50%', + height: '120%', + position: 'absolute', + borderRadius: '50%', + [theme.breakpoints.up('md')]: { + transition: theme.transitions.create('transform', { + duration: theme.transitions.duration.complex, + easing: theme.transitions.easing.sharp, + }), + }, +})); + +// ---------------------------------------------------------------------- + +export default function PresetsOptions({ value, onChange }) { + return ( + + + Presets + + + + {presetOptions.map((color) => ( + + ))} + + + ); +} + +PresetsOptions.propTypes = { + onChange: PropTypes.func, + value: PropTypes.string, +}; + +// ---------------------------------------------------------------------- + +function OptionItem({ colorName, selected, primaryColor, secondaryColor }) { + return ( + + + + + + + + + } + sx={{ + top: 0, + margin: 0, + width: 1, + height: 1, + position: 'absolute', + }} + /> + + + ); +} + +OptionItem.propTypes = { + selected: PropTypes.bool, + colorName: PropTypes.string, + primaryColor: PropTypes.string, + secondaryColor: PropTypes.string, +}; diff --git a/template/src/components/settings/drawer/settings-drawer.jsx b/template/src/components/settings/drawer/settings-drawer.jsx new file mode 100644 index 0000000..8c1e89c --- /dev/null +++ b/template/src/components/settings/drawer/settings-drawer.jsx @@ -0,0 +1,101 @@ +import Box from '@mui/material/Box'; +import Stack from '@mui/material/Stack'; +import Badge from '@mui/material/Badge'; +import Drawer from '@mui/material/Drawer'; +import Tooltip from '@mui/material/Tooltip'; +import Divider from '@mui/material/Divider'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; + +import Iconify from '../../iconify'; +import Scrollbar from '../../scrollbar'; +import BaseOptions from './base-options'; +import PresetsOptions from './presets-options'; +import { useSettingsContext } from '../context'; + +// ---------------------------------------------------------------------- + +export default function SettingsDrawer() { + const settings = useSettingsContext(); + + const renderHead = ( + + + Settings + + + + + + + + + + + + + + + ); + + const renderMode = ( + + settings.onUpdate('themeMode', settings.themeMode === 'dark' ? 'light' : 'dark') + } + icons={['carbon:asleep', 'carbon:asleep-filled']} + /> + ); + + const renderDirection = ( + + settings.onUpdate('themeDirection', settings.themeDirection === 'rtl' ? 'ltr' : 'rtl') + } + icons={['carbon:align-horizontal-right', 'carbon:align-horizontal-left']} + /> + ); + + const renderPresets = ( + settings.onUpdate('themeColorPresets', event.target.value)} + /> + ); + + return ( + + {renderHead} + + + + + + {renderMode} + + {renderDirection} + + {renderPresets} + + + + ); +} diff --git a/template/src/components/settings/index.js b/template/src/components/settings/index.js new file mode 100644 index 0000000..b2e66d9 --- /dev/null +++ b/template/src/components/settings/index.js @@ -0,0 +1,3 @@ +export * from './context'; + +export { default as SettingsDrawer } from './drawer'; diff --git a/template/src/components/svg-color/index.js b/template/src/components/svg-color/index.js new file mode 100644 index 0000000..d370ec9 --- /dev/null +++ b/template/src/components/svg-color/index.js @@ -0,0 +1 @@ +export { default } from './svg-color'; diff --git a/template/src/components/svg-color/svg-color.jsx b/template/src/components/svg-color/svg-color.jsx new file mode 100644 index 0000000..9f72428 --- /dev/null +++ b/template/src/components/svg-color/svg-color.jsx @@ -0,0 +1,31 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Box from '@mui/material/Box'; + +// ---------------------------------------------------------------------- + +const SvgColor = forwardRef(({ src, sx, ...other }, ref) => ( + +)); + +SvgColor.propTypes = { + src: PropTypes.string, + sx: PropTypes.object, +}; + +export default SvgColor; diff --git a/template/src/components/text-max-line/index.js b/template/src/components/text-max-line/index.js new file mode 100644 index 0000000..4e84fe3 --- /dev/null +++ b/template/src/components/text-max-line/index.js @@ -0,0 +1,3 @@ +export { default } from './text-max-line'; + +export { default as useTypography } from './use-typography'; diff --git a/template/src/components/text-max-line/text-max-line.jsx b/template/src/components/text-max-line/text-max-line.jsx new file mode 100644 index 0000000..20d0fc7 --- /dev/null +++ b/template/src/components/text-max-line/text-max-line.jsx @@ -0,0 +1,67 @@ +import PropTypes from 'prop-types'; +import { forwardRef } from 'react'; + +import Link from '@mui/material/Link'; +import Typography from '@mui/material/Typography'; + +import useTypography from './use-typography'; + +// ---------------------------------------------------------------------- + +const TextMaxLine = forwardRef( + ({ asLink, variant = 'body1', line = 2, persistent = false, children, sx, ...other }, ref) => { + const { lineHeight } = useTypography(variant); + + const styles = { + overflow: 'hidden', + textOverflow: 'ellipsis', + display: '-webkit-box', + WebkitLineClamp: line, + WebkitBoxOrient: 'vertical', + ...(persistent && { + height: lineHeight * line, + }), + ...sx, + }; + + if (asLink) { + return ( + + {children} + + ); + } + + return ( + + {children} + + ); + } +); + +TextMaxLine.propTypes = { + asLink: PropTypes.bool, + children: PropTypes.node, + line: PropTypes.number, + persistent: PropTypes.bool, + sx: PropTypes.object, + variant: PropTypes.oneOf([ + 'body1', + 'body2', + 'button', + 'caption', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'inherit', + 'overline', + 'subtitle1', + 'subtitle2', + ]), +}; + +export default TextMaxLine; diff --git a/template/src/components/text-max-line/use-typography.js b/template/src/components/text-max-line/use-typography.js new file mode 100644 index 0000000..e94410f --- /dev/null +++ b/template/src/components/text-max-line/use-typography.js @@ -0,0 +1,38 @@ +import { useTheme } from '@mui/material/styles'; + +import { useWidth } from 'src/hooks/use-responsive'; + +// ---------------------------------------------------------------------- + +function remToPx(value) { + return Math.round(parseFloat(value) * 16); +} + +export default function useTypography(variant) { + const theme = useTheme(); + + const breakpoints = useWidth(); + + const key = theme.breakpoints.up(breakpoints === 'xl' ? 'lg' : breakpoints); + + const hasResponsive = + variant === 'h1' || + variant === 'h2' || + variant === 'h3' || + variant === 'h4' || + variant === 'h5' || + variant === 'h6'; + + const getFont = + hasResponsive && theme.typography[variant][key] + ? theme.typography[variant][key] + : theme.typography[variant]; + + const fontSize = remToPx(getFont.fontSize); + + const lineHeight = Number(theme.typography[variant].lineHeight) * fontSize; + + const { fontWeight, letterSpacing } = theme.typography[variant]; + + return { fontSize, lineHeight, fontWeight, letterSpacing }; +} diff --git a/template/src/config-global.js b/template/src/config-global.js new file mode 100644 index 0000000..96dd463 --- /dev/null +++ b/template/src/config-global.js @@ -0,0 +1,3 @@ +// ---------------------------------------------------------------------- + +export const GOOGLE_MAP_API = import.meta.env.VITE_MAP_API; diff --git a/template/src/global.css b/template/src/global.css new file mode 100644 index 0000000..9b40abd --- /dev/null +++ b/template/src/global.css @@ -0,0 +1,14 @@ +/* scrollbar */ +@import 'simplebar-react/dist/simplebar.min.css'; + +/* lazy image */ +@import 'react-lazy-load-image-component/src/effects/blur.css'; + +/* carousel */ +@import 'slick-carousel/slick/slick.css'; +@import 'slick-carousel/slick/slick-theme.css'; + +/* lightbox */ +@import 'yet-another-react-lightbox/styles.css'; +@import 'yet-another-react-lightbox/plugins/captions.css'; +@import 'yet-another-react-lightbox/plugins/thumbnails.css'; diff --git a/template/src/hooks/use-boolean.js b/template/src/hooks/use-boolean.js new file mode 100644 index 0000000..93de679 --- /dev/null +++ b/template/src/hooks/use-boolean.js @@ -0,0 +1,27 @@ +import { useState, useCallback } from 'react'; + +// ---------------------------------------------------------------------- + +export function useBoolean(defaultValue) { + const [value, setValue] = useState(!!defaultValue); + + const onTrue = useCallback(() => { + setValue(true); + }, []); + + const onFalse = useCallback(() => { + setValue(false); + }, []); + + const onToggle = useCallback(() => { + setValue((prev) => !prev); + }, []); + + return { + value, + onTrue, + onFalse, + onToggle, + setValue, + }; +} diff --git a/template/src/hooks/use-bounding-client-rect.js b/template/src/hooks/use-bounding-client-rect.js new file mode 100644 index 0000000..612d816 --- /dev/null +++ b/template/src/hooks/use-bounding-client-rect.js @@ -0,0 +1,24 @@ +import { useState, useEffect, useCallback } from 'react'; + +// ---------------------------------------------------------------------- + +export function useBoundingClientRect(containerRef) { + const [container, setContainer] = useState(null); + + const handleResize = useCallback(() => { + if (containerRef.current) { + const value = containerRef.current.getBoundingClientRect(); + setContainer(value); + } + }, [containerRef]); + + useEffect(() => { + window.addEventListener('resize', handleResize); + + handleResize(); + + return () => window.removeEventListener('resize', handleResize); + }, [handleResize]); + + return container; +} diff --git a/template/src/hooks/use-countdown.js b/template/src/hooks/use-countdown.js new file mode 100644 index 0000000..c46fc26 --- /dev/null +++ b/template/src/hooks/use-countdown.js @@ -0,0 +1,53 @@ +import { useState, useEffect } from 'react'; + +// ---------------------------------------------------------------------- + +export function useCountdown(date) { + const [countdown, setCountdown] = useState({ + days: '00', + hours: '00', + minutes: '00', + seconds: '00', + }); + + useEffect(() => { + const interval = setInterval(() => setNewTime(), 1000); + return () => clearInterval(interval); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const setNewTime = () => { + const startTime = date; + + const endTime = new Date(); + + const distanceToNow = startTime.valueOf() - endTime.valueOf(); + + const getDays = Math.floor(distanceToNow / (1000 * 60 * 60 * 24)); + + const getHours = `0${Math.floor( + (distanceToNow % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60) + )}`.slice(-2); + + const getMinutes = `0${Math.floor((distanceToNow % (1000 * 60 * 60)) / (1000 * 60))}`.slice(-2); + + const getSeconds = `0${Math.floor((distanceToNow % (1000 * 60)) / 1000)}`.slice(-2); + + setCountdown({ + days: getDays.toString() || '000', + hours: getHours || '000', + minutes: getMinutes || '000', + seconds: getSeconds || '000', + }); + }; + + return { + days: countdown.days, + hours: countdown.hours, + minutes: countdown.minutes, + seconds: countdown.seconds, + }; +} + +// Usage +// const countdown = useCountdown(new Date('07/07/2022 21:30')); diff --git a/template/src/hooks/use-hover-parallax.js b/template/src/hooks/use-hover-parallax.js new file mode 100644 index 0000000..cfe7890 --- /dev/null +++ b/template/src/hooks/use-hover-parallax.js @@ -0,0 +1,35 @@ +/* eslint-disable react-hooks/rules-of-hooks */ +import { useSpring, useTransform } from 'framer-motion'; + +// ---------------------------------------------------------------------- + +export function useHoverParallax(stiffness = 250, damping = 20) { + const x = useSpring(0, { + stiffness, + damping, + }); + const y = useSpring(0, { + stiffness, + damping, + }); + + const offsetX = (force) => useTransform(x, (event) => event / force); + const offsetY = (force) => useTransform(y, (event) => event / force); + + const onMouseMoveHandler = (event) => { + x.set(event.clientX); + y.set(event.clientY); + }; + + const onMouseLeaveHandler = () => { + x.set(0); + y.set(0); + }; + + return { + offsetX, + offsetY, + onMouseMoveHandler, + onMouseLeaveHandler, + }; +} diff --git a/template/src/hooks/use-local-storage.js b/template/src/hooks/use-local-storage.js new file mode 100644 index 0000000..9782f8c --- /dev/null +++ b/template/src/hooks/use-local-storage.js @@ -0,0 +1,89 @@ +import { useState, useEffect, useCallback } from 'react'; + +// ---------------------------------------------------------------------- + +export function useLocalStorage(key, initialState) { + const [state, setState] = useState(initialState); + + useEffect(() => { + const restored = getStorage(key); + + if (restored) { + setState((prevValue) => ({ + ...prevValue, + ...restored, + })); + } + }, [key]); + + const updateState = useCallback( + (updateValue) => { + setState((prevValue) => { + setStorage(key, { + ...prevValue, + ...updateValue, + }); + + return { + ...prevValue, + ...updateValue, + }; + }); + }, + [key] + ); + + const update = useCallback( + (name, updateValue) => { + updateState({ + [name]: updateValue, + }); + }, + [updateState] + ); + + const reset = useCallback(() => { + removeStorage(key); + setState(initialState); + }, [initialState, key]); + + return { + state, + update, + reset, + }; +} + +// ---------------------------------------------------------------------- + +export const getStorage = (key) => { + let value = null; + + try { + const result = window.localStorage.getItem(key); + + if (result) { + value = JSON.parse(result); + } + } catch (error) { + console.error(error); + } + + return value; +}; + +export const setStorage = (key, value) => { + try { + window.localStorage.setItem(key, JSON.stringify(value)); + } catch (error) { + console.error(error); + } +}; + +export const removeStorage = (key) => { + try { + window.localStorage.removeItem(key); + } catch (error) { + console.error(error); + } +}; diff --git a/template/src/hooks/use-off-set-top.js b/template/src/hooks/use-off-set-top.js new file mode 100644 index 0000000..2bb0213 --- /dev/null +++ b/template/src/hooks/use-off-set-top.js @@ -0,0 +1,36 @@ +import { useScroll } from 'framer-motion'; +import { useMemo, useState, useEffect, useCallback } from 'react'; + +// ---------------------------------------------------------------------- + +export function useOffSetTop(top = 0, options) { + const { scrollY } = useScroll(options); + + const [value, setValue] = useState(false); + + const onOffSetTop = useCallback(() => { + scrollY.on('change', (scrollHeight) => { + if (scrollHeight > top) { + setValue(true); + } else { + setValue(false); + } + }); + }, [scrollY, top]); + + useEffect(() => { + onOffSetTop(); + }, [onOffSetTop]); + + const memoizedValue = useMemo(() => value, [value]); + + return memoizedValue; +} + +// Usage +// const offset = useOffSetTop(100); + +// Or +// const offset = useOffSetTop(100, { +// container: ref, +// }); diff --git a/template/src/hooks/use-responsive.js b/template/src/hooks/use-responsive.js new file mode 100644 index 0000000..6c0657f --- /dev/null +++ b/template/src/hooks/use-responsive.js @@ -0,0 +1,47 @@ +import { useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; + +// ---------------------------------------------------------------------- + +export function useResponsive(query, start, end) { + const theme = useTheme(); + + const mediaUp = useMediaQuery(theme.breakpoints.up(start)); + + const mediaDown = useMediaQuery(theme.breakpoints.down(start)); + + const mediaBetween = useMediaQuery(theme.breakpoints.between(start, end)); + + const mediaOnly = useMediaQuery(theme.breakpoints.only(start)); + + if (query === 'up') { + return mediaUp; + } + + if (query === 'down') { + return mediaDown; + } + + if (query === 'between') { + return mediaBetween; + } + + return mediaOnly; +} + +// ---------------------------------------------------------------------- + +export function useWidth() { + const theme = useTheme(); + + const keys = [...theme.breakpoints.keys].reverse(); + + return ( + keys.reduce((output, key) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const matches = useMediaQuery(theme.breakpoints.up(key)); + + return !output && matches ? key : output; + }, null) || 'xs' + ); +} diff --git a/template/src/hooks/use-scroll-to-top.js b/template/src/hooks/use-scroll-to-top.js new file mode 100644 index 0000000..9d1dfb6 --- /dev/null +++ b/template/src/hooks/use-scroll-to-top.js @@ -0,0 +1,15 @@ +import { useEffect } from 'react'; + +import { usePathname } from 'src/routes/hooks'; + +// ---------------------------------------------------------------------- + +export function useScrollToTop() { + const pathname = usePathname(); + + useEffect(() => { + window.scrollTo(0, 0); + }, [pathname]); + + return null; +} diff --git a/template/src/layouts/account/index.jsx b/template/src/layouts/account/index.jsx new file mode 100644 index 0000000..83105c7 --- /dev/null +++ b/template/src/layouts/account/index.jsx @@ -0,0 +1,84 @@ +import PropTypes from 'prop-types'; + +import Box from '@mui/material/Box'; +import Stack from '@mui/material/Stack'; +import Button from '@mui/material/Button'; +import Container from '@mui/material/Container'; +import Typography from '@mui/material/Typography'; + +import { useBoolean } from 'src/hooks/use-boolean'; +import { useResponsive } from 'src/hooks/use-responsive'; + +import Iconify from 'src/components/iconify'; + +import Nav from './nav'; + +// ---------------------------------------------------------------------- + +export default function AccountLayout({ children }) { + const mdUp = useResponsive('up', 'md'); + + const menuOpen = useBoolean(); + + return ( + <> + {mdUp ? ( + + Account + + ) : ( + `solid 1px ${theme.palette.divider}`, + }} + > + + + + + )} + + + +