diff --git a/.github/workflows/npm-stage-check.yml b/.github/workflows/npm-stage-check.yml new file mode 100644 index 0000000..de5ec4d --- /dev/null +++ b/.github/workflows/npm-stage-check.yml @@ -0,0 +1,28 @@ +name: npm Build + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [stage*] + +jobs: + SFTP-deploy: + name: 🪛 Build + runs-on: ubuntu-latest + + steps: + - name: 🚚 Get latest code + uses: actions/checkout@v4 + + - name: Use Node.js 22 + uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: 🔨 Build Vite Admin - npm + run: | + cd admin + cd vite + npm i + npm run build diff --git a/admin/.env b/admin/nextjs/.env similarity index 76% rename from admin/.env rename to admin/nextjs/.env index 928a349..803cf8c 100644 --- a/admin/.env +++ b/admin/nextjs/.env @@ -1,5 +1,5 @@ ## Version -NEXT_PUBLIC_VERSION=v1.2.0 +NEXT_PUBLIC_VERSION=v1.3.0 ## Public URL NEXT_PUBLIC_PATH= diff --git a/admin/.gitignore b/admin/nextjs/.gitignore similarity index 100% rename from admin/.gitignore rename to admin/nextjs/.gitignore diff --git a/admin/.prettierignore b/admin/nextjs/.prettierignore similarity index 100% rename from admin/.prettierignore rename to admin/nextjs/.prettierignore diff --git a/admin/.prettierrc b/admin/nextjs/.prettierrc similarity index 74% rename from admin/.prettierrc rename to admin/nextjs/.prettierrc index d5fba07..b5cde33 100644 --- a/admin/.prettierrc +++ b/admin/nextjs/.prettierrc @@ -4,5 +4,6 @@ "singleQuote": true, "trailingComma": "none", "tabWidth": 2, - "useTabs": false + "useTabs": false, + "endOfLine": "lf" } diff --git a/admin/README.md b/admin/nextjs/README.md similarity index 100% rename from admin/README.md rename to admin/nextjs/README.md diff --git a/admin/eslint.config.mjs b/admin/nextjs/eslint.config.mjs similarity index 54% rename from admin/eslint.config.mjs rename to admin/nextjs/eslint.config.mjs index 7614744..86914b3 100644 --- a/admin/eslint.config.mjs +++ b/admin/nextjs/eslint.config.mjs @@ -1,9 +1,11 @@ +import { fixupConfigRules } from '@eslint/compat'; import prettier from 'eslint-plugin-prettier'; -import typescriptEslint from '@typescript-eslint/eslint-plugin'; -import tsParser from '@typescript-eslint/parser'; +import react from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +import jsxA11y from 'eslint-plugin-jsx-a11y'; +import js from '@eslint/js'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import js from '@eslint/js'; import { FlatCompat } from '@eslint/eslintrc'; const __filename = fileURLToPath(import.meta.url); @@ -15,36 +17,29 @@ const compat = new FlatCompat({ }); export default [ - { - ignores: ['**/node_modules/*', '**/.next/*'] - }, - ...compat.extends('next/core-web-vitals', 'prettier'), + ...fixupConfigRules(compat.extends('prettier')), + { plugins: { prettier, - '@typescript-eslint': typescriptEslint + react, + 'react-hooks': reactHooks, + 'jsx-a11y': jsxA11y }, languageOptions: { - parser: tsParser, - ecmaVersion: 5, + ecmaVersion: 2020, sourceType: 'module', - parserOptions: { - project: './jsconfig.json', - createDefaultProgram: true + ecmaFeatures: { + jsx: true + } } }, settings: { - 'import/resolver': { - node: { - moduleDirectory: ['node_modules', 'src/'] - }, - - typescript: { - alwaysTryTypes: true - } + react: { + version: 'detect' } }, @@ -59,19 +54,15 @@ export default [ 'import/order': 'off', 'no-console': 'off', 'no-shadow': 'off', - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-explicit-any': 'warn', 'import/no-cycle': 'off', - 'prefer-destructuring': 'off', 'import/no-extraneous-dependencies': 'off', - 'react/display-name': 'off', - - 'import/no-unresolved': [ - 'off', - { - caseSensitive: false - } - ], + 'jsx-a11y/label-has-associated-control': 'off', + 'jsx-a11y/no-autofocus': 'off', + 'react/jsx-uses-react': 'off', + 'react/jsx-uses-vars': 'error', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + 'no-unused-vars': 'off', 'no-restricted-imports': [ 'error', @@ -80,7 +71,7 @@ export default [ } ], - '@typescript-eslint/no-unused-vars': [ + 'no-unused-vars': [ 'error', { vars: 'all', @@ -88,17 +79,11 @@ export default [ } ], - 'prettier/prettier': [ - 'warn', - { - bracketSpacing: true, - printWidth: 140, - singleQuote: true, - trailingComma: 'none', - tabWidth: 2, - useTabs: false - } - ] + 'prettier/prettier': 'warn' } + }, + { + ignores: ['node_modules/**'], + files: ['src/**/*.{js,jsx}'] } -]; \ No newline at end of file +]; diff --git a/admin/jsconfig.json b/admin/nextjs/jsconfig.json similarity index 100% rename from admin/jsconfig.json rename to admin/nextjs/jsconfig.json diff --git a/admin/next-env.d.js b/admin/nextjs/next-env.d.js similarity index 100% rename from admin/next-env.d.js rename to admin/nextjs/next-env.d.js diff --git a/admin/next.config.mjs b/admin/nextjs/next.config.mjs similarity index 100% rename from admin/next.config.mjs rename to admin/nextjs/next.config.mjs diff --git a/admin/package-lock.json b/admin/nextjs/package-lock.json similarity index 87% rename from admin/package-lock.json rename to admin/nextjs/package-lock.json index 80fab66..49bd192 100644 --- a/admin/package-lock.json +++ b/admin/nextjs/package-lock.json @@ -1,42 +1,44 @@ { "name": "saas-able-react-mui-admin-next-seed-js", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "saas-able-react-mui-admin-next-seed-js", - "version": "1.2.0", + "version": "1.3.0", "dependencies": { "@emotion/cache": "11.14.0", "@emotion/react": "11.14.0", - "@emotion/styled": "11.14.0", - "@mui/material": "7.0.2", - "@mui/material-nextjs": "7.0.2", - "@mui/x-charts": "7.28.0", - "@mui/x-date-pickers": "7.28.3", - "@tabler/icons-react": "3.31.0", + "@emotion/styled": "11.14.1", + "@mui/material": "7.2.0", + "@mui/material-nextjs": "7.2.0", + "@mui/x-charts": "8.9.0", + "@mui/x-date-pickers": "8.9.0", + "@tabler/icons-react": "3.34.1", "lodash-es": "4.17.21", - "next": "15.3.0", + "next": "15.4.3", "notistack": "3.0.2", "react": "19.1.0", "react-device-detect": "2.2.3", "react-dom": "19.1.0", - "react-hook-form": "7.55.0", - "simplebar-react": "3.3.0", + "react-hook-form": "7.61.0", + "simplebar-react": "3.3.2", "stylis": "4.3.6", "stylis-plugin-rtl": "2.1.1", - "swr": "2.3.3" + "swr": "2.3.4" }, "devDependencies": { + "@eslint/compat": "1.3.1", "@eslint/eslintrc": "3.3.1", - "@eslint/js": "9.24.0", - "eslint": "9.24.0", - "eslint-config-next": "15.3.0", - "eslint-config-prettier": "10.1.2", - "eslint-plugin-prettier": "5.2.6", - "knip": "5.50.4", - "prettier": "3.5.3" + "@eslint/js": "9.31.0", + "eslint": "9.31.0", + "eslint-config-next": "15.4.3", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-prettier": "5.5.3", + "eslint-plugin-react-hooks": "5.2.0", + "prettier": "3.6.2" } }, "node_modules/@babel/code-frame": { @@ -116,13 +118,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } @@ -185,9 +184,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.1.tgz", - "integrity": "sha512-LMshMVP0ZhACNjQNYXiU1iZJ6QCcv0lUdPDPugqGvCGXt5xtRVBPdtA0qU12pEXZzpWAhWlZYptfdAFq10DOVQ==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", "license": "MIT", "optional": true, "dependencies": { @@ -314,9 +313,9 @@ "license": "MIT" }, "node_modules/@emotion/styled": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", - "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", @@ -405,10 +404,28 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.1.tgz", + "integrity": "sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -421,9 +438,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", - "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -431,9 +448,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -481,13 +498,16 @@ } }, "node_modules/@eslint/js": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz", - "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { @@ -501,32 +521,19 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.15.1", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -594,9 +601,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", - "integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", + "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", "cpu": [ "arm64" ], @@ -612,13 +619,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" + "@img/sharp-libvips-darwin-arm64": "1.2.0" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.1.tgz", - "integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", + "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", "cpu": [ "x64" ], @@ -634,13 +641,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" + "@img/sharp-libvips-darwin-x64": "1.2.0" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", "cpu": [ "arm64" ], @@ -654,9 +661,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", + "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", "cpu": [ "x64" ], @@ -670,9 +677,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", + "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", "cpu": [ "arm" ], @@ -686,9 +693,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", + "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", "cpu": [ "arm64" ], @@ -702,9 +709,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", + "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", "cpu": [ "ppc64" ], @@ -718,9 +725,9 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", + "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", "cpu": [ "s390x" ], @@ -734,9 +741,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", + "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==", "cpu": [ "x64" ], @@ -750,9 +757,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", + "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", "cpu": [ "arm64" ], @@ -766,9 +773,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", + "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", "cpu": [ "x64" ], @@ -782,9 +789,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.1.tgz", - "integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", + "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", "cpu": [ "arm" ], @@ -800,13 +807,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" + "@img/sharp-libvips-linux-arm": "1.2.0" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.1.tgz", - "integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", + "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", "cpu": [ "arm64" ], @@ -822,13 +829,35 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" + "@img/sharp-libvips-linux-arm64": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", + "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.0" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.1.tgz", - "integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", + "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", "cpu": [ "s390x" ], @@ -844,13 +873,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" + "@img/sharp-libvips-linux-s390x": "1.2.0" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.1.tgz", - "integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", + "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==", "cpu": [ "x64" ], @@ -866,13 +895,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" + "@img/sharp-libvips-linux-x64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.1.tgz", - "integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", + "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", "cpu": [ "arm64" ], @@ -888,13 +917,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.1.tgz", - "integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", + "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", "cpu": [ "x64" ], @@ -910,20 +939,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + "@img/sharp-libvips-linuxmusl-x64": "1.2.0" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.1.tgz", - "integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", + "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", "cpu": [ "wasm32" ], "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.0" + "@emnapi/runtime": "^1.4.4" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -932,10 +961,29 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", + "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.1.tgz", - "integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", + "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", "cpu": [ "ia32" ], @@ -952,9 +1000,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.1.tgz", - "integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", + "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", "cpu": [ "x64" ], @@ -1019,9 +1067,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.2.tgz", - "integrity": "sha512-TfeFU9TgN1N06hyb/pV/63FfO34nijZRMqgHk0TJ3gkl4Fbd+wZ73+ZtOd7jag6hMmzO9HSrBc6Vdn591nhkAg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.1.tgz", + "integrity": "sha512-+mIK1Z0BhOaQ0vCgOkT1mSrIpEHLo338h4/duuL4TBLXPvUMit732mnwJY3W40Avy30HdeSfwUAAGRkKmwRaEQ==", "license": "MIT", "funding": { "type": "opencollective", @@ -1029,16 +1077,16 @@ } }, "node_modules/@mui/material": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.0.2.tgz", - "integrity": "sha512-rjJlJ13+3LdLfobRplkXbjIFEIkn6LgpetgU/Cs3Xd8qINCCQK9qXQIjjQ6P0FXFTPFzEVMj0VgBR1mN+FhOcA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz", + "integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/core-downloads-tracker": "^7.0.2", - "@mui/system": "^7.0.2", - "@mui/types": "^7.4.1", - "@mui/utils": "^7.0.2", + "@babel/runtime": "^7.27.6", + "@mui/core-downloads-tracker": "^7.2.0", + "@mui/system": "^7.2.0", + "@mui/types": "^7.4.4", + "@mui/utils": "^7.2.0", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", @@ -1057,7 +1105,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^7.0.2", + "@mui/material-pigment-css": "^7.2.0", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1078,12 +1126,12 @@ } }, "node_modules/@mui/material-nextjs": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-7.0.2.tgz", - "integrity": "sha512-hjm0MFSjx7HWbORMRldbwfKrQPHTSMXD6dkCCSTQZ2XX8fkKlnOXNnoXUFzlzFtMKMzs9QOfe3dHooTvnDEfuQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-7.2.0.tgz", + "integrity": "sha512-/W2iKkjeOdaYBu5xNYi/w5HUX2C4HHefSMW7UgCvTKl90yy1puE7kmAgv/gxBghqhEE27cNWdevRrnvVhNRaUA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0" + "@babel/runtime": "^7.27.6" }, "engines": { "node": ">=14.0.0" @@ -1113,13 +1161,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.2.tgz", - "integrity": "sha512-6lt8heDC9wN8YaRqEdhqnm0cFCv08AMf4IlttFvOVn7ZdKd81PNpD/rEtPGLLwQAFyyKSxBG4/2XCgpbcdNKiA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.1.tgz", + "integrity": "sha512-WU3YLkKXii/x8ZEKnrLKsPwplCVE11yZxUvlaaZSIzCcI3x2OdFC8eMlNy74hVeUsYQvzzX1Es/k4ARPlFvpPQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/utils": "^7.0.2", + "@babel/runtime": "^7.28.2", + "@mui/utils": "^7.3.1", "prop-types": "^15.8.1" }, "engines": { @@ -1140,13 +1188,13 @@ } }, "node_modules/@mui/styled-engine": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.2.tgz", - "integrity": "sha512-11Bt4YdHGlh7sB8P75S9mRCUxTlgv7HGbr0UKz6m6Z9KLeiw1Bm9y/t3iqLLVMvSHYB6zL8X8X+LmfTE++gyBw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.1.tgz", + "integrity": "sha512-Nqo6OHjvJpXJ1+9TekTE//+8RybgPQUKwns2Lh0sq+8rJOUSUKS3KALv4InSOdHhIM9Mdi8/L7LTF1/Ky6D6TQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@emotion/cache": "^11.13.5", + "@babel/runtime": "^7.28.2", + "@emotion/cache": "^11.14.0", "@emotion/serialize": "^1.3.3", "@emotion/sheet": "^1.4.0", "csstype": "^3.1.3", @@ -1174,16 +1222,16 @@ } }, "node_modules/@mui/system": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.0.2.tgz", - "integrity": "sha512-yFUraAWYWuKIISPPEVPSQ1NLeqmTT4qiQ+ktmyS8LO/KwHxB+NNVOacEZaIofh5x1NxY8rzphvU5X2heRZ/RDA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.1.tgz", + "integrity": "sha512-mIidecvcNVpNJMdPDmCeoSL5zshKBbYPcphjuh6ZMjhybhqhZ4mX6k9zmIWh6XOXcqRQMg5KrcjnO0QstrNj3w==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/private-theming": "^7.0.2", - "@mui/styled-engine": "^7.0.2", - "@mui/types": "^7.4.1", - "@mui/utils": "^7.0.2", + "@babel/runtime": "^7.28.2", + "@mui/private-theming": "^7.3.1", + "@mui/styled-engine": "^7.3.1", + "@mui/types": "^7.4.5", + "@mui/utils": "^7.3.1", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1214,12 +1262,12 @@ } }, "node_modules/@mui/types": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.1.tgz", - "integrity": "sha512-gUL8IIAI52CRXP/MixT1tJKt3SI6tVv4U/9soFsTtAsHzaJQptZ42ffdHZV3niX1ei0aUgMvOxBBN0KYqdG39g==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.5.tgz", + "integrity": "sha512-ZPwlAOE3e8C0piCKbaabwrqZbW4QvWz0uapVPWya7fYj6PeDkl5sSJmomT7wjOcZGPB48G/a6Ubidqreptxz4g==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0" + "@babel/runtime": "^7.28.2" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1231,17 +1279,17 @@ } }, "node_modules/@mui/utils": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.0.2.tgz", - "integrity": "sha512-72gcuQjPzhj/MLmPHLCgZjy2VjOH4KniR/4qRtXTTXIEwbkgcN+Y5W/rC90rWtMmZbjt9svZev/z+QHUI4j74w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-/31y4wZqVWa0jzMnzo6JPjxwP6xXy4P3+iLbosFg/mJQowL1KIou0LC+lquWW60FKVbKz5ZUWBg2H3jausa0pw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/types": "^7.4.1", - "@types/prop-types": "^15.7.14", + "@babel/runtime": "^7.28.2", + "@mui/types": "^7.4.5", + "@types/prop-types": "^15.7.15", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^19.1.0" + "react-is": "^19.1.1" }, "engines": { "node": ">=14.0.0" @@ -1261,19 +1309,21 @@ } }, "node_modules/@mui/x-charts": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-7.28.0.tgz", - "integrity": "sha512-TNfq/rQfGKnjTaEITkY6l09NpMxwMwRTgLiDw+JQsS/7gwBBJUmMhEOj67BaFeYTsroFLUYeggiAj+RTSryd4A==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-8.9.0.tgz", + "integrity": "sha512-FQEjlVa285/WUTTuS84v4Nvj0OXQz1oxOl1ommhn6xbIilQXMOesAA4iFFYVz1ZBsywopVsWqwPSLgmkpWrzHg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.7", - "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", - "@mui/x-charts-vendor": "7.20.0", - "@mui/x-internals": "7.28.0", - "@react-spring/rafz": "^9.7.5", - "@react-spring/web": "^9.7.5", + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.2.0", + "@mui/x-charts-vendor": "8.6.0", + "@mui/x-internal-gestures": "0.2.1", + "@mui/x-internals": "8.8.0", + "bezier-easing": "^2.1.0", "clsx": "^2.1.1", - "prop-types": "^15.8.1" + "prop-types": "^15.8.1", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.5.0" }, "engines": { "node": ">=14.0.0" @@ -1281,8 +1331,8 @@ "peerDependencies": { "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", - "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", - "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1296,98 +1346,40 @@ } }, "node_modules/@mui/x-charts-vendor": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-7.20.0.tgz", - "integrity": "sha512-pzlh7z/7KKs5o0Kk0oPcB+sY0+Dg7Q7RzqQowDQjpy5Slz6qqGsgOB5YUzn0L+2yRmvASc4Pe0914Ao3tMBogg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-8.6.0.tgz", + "integrity": "sha512-TTtfhxXuwtoZfyno7+4y3ZhZeFqavFJecWbteLEby0lFqALWB9GGJpkc1TIHWr3GkWE5UHEbdADZ0pfrPenezA==", "license": "MIT AND ISC", "dependencies": { - "@babel/runtime": "^7.25.7", + "@babel/runtime": "^7.27.6", "@types/d3-color": "^3.1.3", "@types/d3-delaunay": "^6.0.4", "@types/d3-interpolate": "^3.0.4", - "@types/d3-scale": "^4.0.8", - "@types/d3-shape": "^3.1.6", - "@types/d3-time": "^3.0.3", + "@types/d3-scale": "^4.0.9", + "@types/d3-shape": "^3.1.7", + "@types/d3-time": "^3.0.4", + "@types/d3-timer": "^3.0.2", "d3-color": "^3.1.0", "d3-delaunay": "^6.0.4", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.2.0", "d3-time": "^3.1.0", + "d3-timer": "^3.0.1", "delaunator": "^5.0.1", "robust-predicates": "^3.0.2" } }, - "node_modules/@mui/x-charts/node_modules/@react-spring/web": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz", - "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==", - "license": "MIT", - "dependencies": { - "@react-spring/animated": "~9.7.5", - "@react-spring/core": "~9.7.5", - "@react-spring/shared": "~9.7.5", - "@react-spring/types": "~9.7.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@mui/x-charts/node_modules/@react-spring/web/node_modules/@react-spring/animated": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz", - "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==", - "license": "MIT", - "dependencies": { - "@react-spring/shared": "~9.7.5", - "@react-spring/types": "~9.7.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@mui/x-charts/node_modules/@react-spring/web/node_modules/@react-spring/core": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz", - "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==", - "license": "MIT", - "dependencies": { - "@react-spring/animated": "~9.7.5", - "@react-spring/shared": "~9.7.5", - "@react-spring/types": "~9.7.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-spring/donate" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@mui/x-charts/node_modules/@react-spring/web/node_modules/@react-spring/shared": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz", - "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==", - "license": "MIT", - "dependencies": { - "@react-spring/rafz": "~9.7.5", - "@react-spring/types": "~9.7.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/@mui/x-date-pickers": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.28.3.tgz", - "integrity": "sha512-5umKB/DIMfDN+FAlzcrocix9PpoJDJ+5hMdlby8spTPObP4wCSN+wkEhk0vFC7qE9FAWXr4wjemaKvsNf41cCw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.9.0.tgz", + "integrity": "sha512-MD2/F63Tdsodygp3Z2VtfvvQhAiEVXvleuK9mqXuD6a1cCPOENICCJC98y2AKbOcsbVd37o6HCvWFOQsfsy7TQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.7", - "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", - "@mui/x-internals": "7.28.0", - "@types/react-transition-group": "^4.4.11", + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.2.0", + "@mui/x-internals": "8.8.0", + "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "prop-types": "^15.8.1", "react-transition-group": "^4.4.5" @@ -1402,8 +1394,8 @@ "peerDependencies": { "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", - "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", - "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0", "dayjs": "^1.10.7", @@ -1444,14 +1436,24 @@ } } }, + "node_modules/@mui/x-internal-gestures": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mui/x-internal-gestures/-/x-internal-gestures-0.2.1.tgz", + "integrity": "sha512-7Po6F4/RdUrFyRwiwvh5ZNeY/bi8wavTCUe+stKAyMliKpgcYiEtH7ywTgroOEq0o56fIpyPzwC4+bbGwYFnvA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6" + } + }, "node_modules/@mui/x-internals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.28.0.tgz", - "integrity": "sha512-p4GEp/09bLDumktdIMiw+OF4p+pJOOjTG0VUvzNxjbHB9GxbBKoMcHrmyrURqoBnQpWIeFnN/QAoLMFSpfwQbw==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.8.0.tgz", + "integrity": "sha512-qTRK5oINkAjZ7sIHpSnESLNq1xtQUmmfmGscYUSEP0uHoYh6pKkNWH9+7yzggRHuTv+4011VBwN9s+efrk+xZg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.7", - "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta" + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.2.0", + "reselect": "^5.1.1" }, "engines": { "node": ">=14.0.0" @@ -1461,6 +1463,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, @@ -1478,15 +1481,15 @@ } }, "node_modules/@next/env": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.0.tgz", - "integrity": "sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.3.tgz", + "integrity": "sha512-lKJ9KJAvaWzqurIsz6NWdQOLj96mdhuDMusLSYHw9HBe2On7BjUwU1WeRvq19x7NrEK3iOgMeSBV5qEhVH1cMw==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.0.tgz", - "integrity": "sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.4.3.tgz", + "integrity": "sha512-wYYbP29uZlm9lqD1C6HDgW9WNNt6AlTogYKYpDyATs0QrKYIv/rPueoIDRH6qttXGCe3zNrb7hxfQx4w8OSkLA==", "dev": true, "license": "MIT", "dependencies": { @@ -1494,9 +1497,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.0.tgz", - "integrity": "sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.3.tgz", + "integrity": "sha512-YAhZWKeEYY7LHQJiQ8fe3Y6ymfcDcTn7rDC8PDu/pdeIl1Z2LHD4uyPNuQUGCEQT//MSNv6oZCeQzZfTCKZv+A==", "cpu": [ "arm64" ], @@ -1510,9 +1513,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.0.tgz", - "integrity": "sha512-m+eO21yg80En8HJ5c49AOQpFDq+nP51nu88ZOMCorvw3g//8g1JSUsEiPSiFpJo1KCTQ+jm9H0hwXK49H/RmXg==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.3.tgz", + "integrity": "sha512-ZPHRdd51xaxCMpT4viQ6h8TgYM1zPW1JIeksPY9wKlyvBVUQqrWqw8kEh1sa7/x0Ied+U7pYHkAkutrUwxbMcg==", "cpu": [ "x64" ], @@ -1526,9 +1529,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.0.tgz", - "integrity": "sha512-H0Kk04ZNzb6Aq/G6e0un4B3HekPnyy6D+eUBYPJv9Abx8KDYgNMWzKt4Qhj57HXV3sTTjsfc1Trc1SxuhQB+Tg==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.3.tgz", + "integrity": "sha512-QUdqftCXC5vw5cowucqi9FeOPQ0vdMxoOHLY0J5jPdercwSJFjdi9CkEO4Xkq1eG4t1TB/BG81n6rmTsWoILnw==", "cpu": [ "arm64" ], @@ -1542,9 +1545,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.0.tgz", - "integrity": "sha512-k8GVkdMrh/+J9uIv/GpnHakzgDQhrprJ/FbGQvwWmstaeFG06nnAoZCJV+wO/bb603iKV1BXt4gHG+s2buJqZA==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.3.tgz", + "integrity": "sha512-HTL31NsmoafX+r5g91Yj3+q34nrn1xKmCWVuNA+fUWO4X0pr+n83uGzLyEOn0kUqbMZ40KmWx+4wsbMoUChkiQ==", "cpu": [ "arm64" ], @@ -1558,9 +1561,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.0.tgz", - "integrity": "sha512-ZMQ9yzDEts/vkpFLRAqfYO1wSpIJGlQNK9gZ09PgyjBJUmg8F/bb8fw2EXKgEaHbCc4gmqMpDfh+T07qUphp9A==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.3.tgz", + "integrity": "sha512-HRQLWoeFkKXd2YCEEy9GhfwOijRm37x4w5r0MMVHxBKSA6ms3JoPUXvGhfHT6srnGRcEUWNrQ2vzkHir5ZWTSw==", "cpu": [ "x64" ], @@ -1574,9 +1577,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.0.tgz", - "integrity": "sha512-RFwq5VKYTw9TMr4T3e5HRP6T4RiAzfDJ6XsxH8j/ZeYq2aLsBqCkFzwMI0FmnSsLaUbOb46Uov0VvN3UciHX5A==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.3.tgz", + "integrity": "sha512-NyXUx6G7AayaRGUsVPenuwhyAoyxjQuQPaK50AXoaAHPwRuif4WmSrXUs8/Y0HJIZh8E/YXRm9H7uuGfiacpuQ==", "cpu": [ "x64" ], @@ -1590,9 +1593,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.0.tgz", - "integrity": "sha512-a7kUbqa/k09xPjfCl0RSVAvEjAkYBYxUzSVAzk2ptXiNEL+4bDBo9wNC43G/osLA/EOGzG4CuNRFnQyIHfkRgQ==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.3.tgz", + "integrity": "sha512-2CUTmpzN/7cL1a7GjdLkDFlfH3nwMwW8a6JiaAUsL9MtKmNNO3fnXqnY0Zk30fii3hVEl4dr7ztrpYt0t2CcGQ==", "cpu": [ "arm64" ], @@ -1606,9 +1609,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.0.tgz", - "integrity": "sha512-vHUQS4YVGJPmpjn7r5lEZuMhK5UQBNBRSB+iGDvJjaNk649pTIcRluDWNb9siunyLLiu/LDPHfvxBtNamyuLTw==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.3.tgz", + "integrity": "sha512-i54YgUhvrUQxQD84SjAbkfWhYkOdm/DNRAVekCHLWxVg3aUbyC6NFQn9TwgCkX5QAS2pXCJo3kFboSFvrsd7dA==", "cpu": [ "x64" ], @@ -1670,9 +1673,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.3.tgz", - "integrity": "sha512-yMV8bb9prWI21N6FsrnPCbhoYb8UUvYCDGoSvPHBloVC095Ef2ker43hzXkJ6TpJPw53S8FeFYkARa7GGIGwxg==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { @@ -1692,18 +1695,6 @@ "url": "https://opencollective.com/popperjs" } }, - "node_modules/@react-spring/rafz": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz", - "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==", - "license": "MIT" - }, - "node_modules/@react-spring/types": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz", - "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==", - "license": "MIT" - }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1718,12 +1709,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1734,9 +1719,9 @@ } }, "node_modules/@tabler/icons": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.31.0.tgz", - "integrity": "sha512-dblAdeKY3+GA1U+Q9eziZ0ooVlZMHsE8dqP0RkwvRtEsAULoKOYaCUOcJ4oW1DjWegdxk++UAt2SlQVnmeHv+g==", + "version": "3.34.1", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.34.1.tgz", + "integrity": "sha512-9gTnUvd7Fd/DmQgr3MKY+oJLa1RfNsQo8c/ir3TJAWghOuZXodbtbVp0QBY2DxWuuvrSZFys0HEbv1CoiI5y6A==", "license": "MIT", "funding": { "type": "github", @@ -1744,12 +1729,12 @@ } }, "node_modules/@tabler/icons-react": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.31.0.tgz", - "integrity": "sha512-2rrCM5y/VnaVKnORpDdAua9SEGuJKVqPtWxeQ/vUVsgaUx30LDgBZph7/lterXxDY1IKR6NO//HDhWiifXTi3w==", + "version": "3.34.1", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.34.1.tgz", + "integrity": "sha512-Ld6g0NqOO05kyyHsfU8h787PdHBm7cFmOycQSIrGp45XcXYDuOK2Bs0VC4T2FWSKZ6bx5g04imfzazf/nqtk1A==", "license": "MIT", "dependencies": { - "@tabler/icons": "3.31.0" + "@tabler/icons": "3.34.1" }, "funding": { "type": "github", @@ -1821,6 +1806,12 @@ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", "license": "MIT" }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", @@ -1842,17 +1833,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/node": { - "version": "22.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", - "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.21.0" - } - }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -1860,9 +1840,9 @@ "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", "license": "MIT" }, "node_modules/@types/react": { @@ -2348,9 +2328,9 @@ ] }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -2387,16 +2367,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2663,6 +2633,12 @@ "dev": true, "license": "MIT" }, + "node_modules/bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==", + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2687,17 +2663,6 @@ "node": ">=8" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2800,17 +2765,6 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -3039,6 +2993,15 @@ "node": ">=12" } }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -3124,20 +3087,6 @@ "dev": true, "license": "MIT" }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3193,9 +3142,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "optional": true, "engines": { @@ -3240,19 +3189,6 @@ "node": ">= 0.4" } }, - "node_modules/easy-table": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", - "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "optionalDependencies": { - "wcwidth": "^1.0.1" - } - }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -3260,20 +3196,6 @@ "dev": true, "license": "MIT" }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3470,20 +3392,20 @@ } }, "node_modules/eslint": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz", - "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.0", - "@eslint/core": "^0.12.0", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.24.0", - "@eslint/plugin-kit": "^0.2.7", + "@eslint/js": "9.31.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -3494,9 +3416,9 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3531,13 +3453,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.0.tgz", - "integrity": "sha512-+Z3M1W9MnJjX3W4vI9CHfKlEyhTWOUHvc5dB89FyRnzPsUkJlLWZOi8+1pInuVcSztSM4MwBFB0hIHf4Rbwu4g==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.4.3.tgz", + "integrity": "sha512-blytVMTpdqqlLBvYOvwT51m5eqRHNofKR/pfBSeeHiQMSY33kCph31hAK3DiAsL/RamVJRQzHwTRbbNr+7c/sw==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.3.0", + "@next/eslint-plugin-next": "15.4.3", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3559,14 +3481,17 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", - "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -3741,14 +3666,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz", - "integrity": "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.0" + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3846,9 +3771,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3863,9 +3788,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3876,15 +3801,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4279,13 +4204,6 @@ "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, - "license": "ISC" - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -4892,6 +4810,8 @@ "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -4993,97 +4913,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/knip": { - "version": "5.50.4", - "resolved": "https://registry.npmjs.org/knip/-/knip-5.50.4.tgz", - "integrity": "sha512-In+GjPpd2P3IDZnBBP4QF27vhQOhuBkICiuN9j+DMOf/m/qAFLGcbvuAGxco8IDvf26pvBnfeSmm1f6iNCkgOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/webpro" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/knip" - }, - { - "type": "polar", - "url": "https://polar.sh/webpro-nl" - } - ], - "license": "ISC", - "dependencies": { - "@nodelib/fs.walk": "^1.2.3", - "easy-table": "1.2.0", - "enhanced-resolve": "^5.18.1", - "fast-glob": "^3.3.3", - "jiti": "^2.4.2", - "js-yaml": "^4.1.0", - "minimist": "^1.2.8", - "picocolors": "^1.1.0", - "picomatch": "^4.0.1", - "pretty-ms": "^9.0.0", - "smol-toml": "^1.3.1", - "strip-json-comments": "5.0.1", - "zod": "^3.22.4", - "zod-validation-error": "^3.0.3" - }, - "bin": { - "knip": "bin/knip.js", - "knip-bun": "bin/knip-bun.js" - }, - "engines": { - "node": ">=18.18.0" - }, - "peerDependencies": { - "@types/node": ">=18", - "typescript": ">=5.0.4" - } - }, - "node_modules/knip/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "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.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/knip/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, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/knip/node_modules/strip-json-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", - "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -5273,15 +5102,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.0.tgz", - "integrity": "sha512-k0MgP6BsK8cZ73wRjMazl2y2UcXj49ZXLDEgx6BikWuby/CN+nh81qFFI16edgd7xYpe/jj2OZEIwCoqnzz0bQ==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.4.3.tgz", + "integrity": "sha512-uW7Qe6poVasNIE1X382nI29oxSdFJzjQzTgJFLD43MxyPfGKKxCMySllhBpvqr48f58Om+tLMivzRwBpXEytvA==", "license": "MIT", "dependencies": { - "@next/env": "15.3.0", - "@swc/counter": "0.1.3", + "@next/env": "15.4.3", "@swc/helpers": "0.5.15", - "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -5293,19 +5120,19 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.0", - "@next/swc-darwin-x64": "15.3.0", - "@next/swc-linux-arm64-gnu": "15.3.0", - "@next/swc-linux-arm64-musl": "15.3.0", - "@next/swc-linux-x64-gnu": "15.3.0", - "@next/swc-linux-x64-musl": "15.3.0", - "@next/swc-win32-arm64-msvc": "15.3.0", - "@next/swc-win32-x64-msvc": "15.3.0", - "sharp": "^0.34.1" + "@next/swc-darwin-arm64": "15.4.3", + "@next/swc-darwin-x64": "15.4.3", + "@next/swc-linux-arm64-gnu": "15.4.3", + "@next/swc-linux-arm64-musl": "15.4.3", + "@next/swc-linux-x64-gnu": "15.4.3", + "@next/swc-linux-x64-musl": "15.4.3", + "@next/swc-win32-arm64-msvc": "15.4.3", + "@next/swc-win32-x64-msvc": "15.4.3", + "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", @@ -5577,19 +5404,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "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", @@ -5693,9 +5507,9 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -5721,22 +5535,6 @@ "node": ">=6.0.0" } }, - "node_modules/pretty-ms": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", - "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-ms": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5820,9 +5618,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.55.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz", - "integrity": "sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==", + "version": "7.61.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.0.tgz", + "integrity": "sha512-o8S/HcCeuaAQVib36fPCgOLaaQN/v7Anj8zlYjcLMcz+4FnNfMsoDAEvVCefLb3KDnS43wq3pwcifehhkwowuQ==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -5836,9 +5634,9 @@ } }, "node_modules/react-is": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", - "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz", + "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==", "license": "MIT" }, "node_modules/react-transition-group": { @@ -5880,12 +5678,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -5907,6 +5699,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -6049,9 +5847,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "devOptional": true, "license": "ISC", "bin": { @@ -6111,16 +5909,16 @@ } }, "node_modules/sharp": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz", - "integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz", + "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.7.1" + "detect-libc": "^2.0.4", + "semver": "^7.7.2" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -6129,26 +5927,28 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.1", - "@img/sharp-darwin-x64": "0.34.1", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.1", - "@img/sharp-linux-arm64": "0.34.1", - "@img/sharp-linux-s390x": "0.34.1", - "@img/sharp-linux-x64": "0.34.1", - "@img/sharp-linuxmusl-arm64": "0.34.1", - "@img/sharp-linuxmusl-x64": "0.34.1", - "@img/sharp-wasm32": "0.34.1", - "@img/sharp-win32-ia32": "0.34.1", - "@img/sharp-win32-x64": "0.34.1" + "@img/sharp-darwin-arm64": "0.34.3", + "@img/sharp-darwin-x64": "0.34.3", + "@img/sharp-libvips-darwin-arm64": "1.2.0", + "@img/sharp-libvips-darwin-x64": "1.2.0", + "@img/sharp-libvips-linux-arm": "1.2.0", + "@img/sharp-libvips-linux-arm64": "1.2.0", + "@img/sharp-libvips-linux-ppc64": "1.2.0", + "@img/sharp-libvips-linux-s390x": "1.2.0", + "@img/sharp-libvips-linux-x64": "1.2.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", + "@img/sharp-libvips-linuxmusl-x64": "1.2.0", + "@img/sharp-linux-arm": "0.34.3", + "@img/sharp-linux-arm64": "0.34.3", + "@img/sharp-linux-ppc64": "0.34.3", + "@img/sharp-linux-s390x": "0.34.3", + "@img/sharp-linux-x64": "0.34.3", + "@img/sharp-linuxmusl-arm64": "0.34.3", + "@img/sharp-linuxmusl-x64": "0.34.3", + "@img/sharp-wasm32": "0.34.3", + "@img/sharp-win32-arm64": "0.34.3", + "@img/sharp-win32-ia32": "0.34.3", + "@img/sharp-win32-x64": "0.34.3" } }, "node_modules/shebang-command": { @@ -6268,39 +6068,27 @@ "optional": true }, "node_modules/simplebar-core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.0.tgz", - "integrity": "sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.2.tgz", + "integrity": "sha512-qKgTTuTqapjsFGkNhCjyPhysnbZGpQqNmjk0nOYjFN5ordC/Wjvg+RbYCyMSnW60l/Z0ZS82GbNltly6PMUH1w==", "license": "MIT", "dependencies": { - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" } }, "node_modules/simplebar-react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/simplebar-react/-/simplebar-react-3.3.0.tgz", - "integrity": "sha512-sxzy+xRuU41He4tT4QLGYutchtOuye/xxVeq7xhyOiwMiHNK1ZpvbOTyy+7P0i7gfpXLGTJ8Bep8+4Mhdgtz/g==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/simplebar-react/-/simplebar-react-3.3.2.tgz", + "integrity": "sha512-ZsgcQhKLtt5ra0BRIJeApfkTBQCa1vUPA/WXI4HcYReFt+oCEOvdVz6rR/XsGJcKxTlCRPmdGx1uJIUChupo+A==", "license": "MIT", "dependencies": { - "simplebar-core": "^1.3.0" + "simplebar-core": "^1.3.2" }, "peerDependencies": { "react": ">=16.8.0" } }, - "node_modules/smol-toml": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", - "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -6326,14 +6114,6 @@ "dev": true, "license": "MIT" }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -6537,9 +6317,9 @@ } }, "node_modules/swr": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", - "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.4.tgz", + "integrity": "sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==", "license": "MIT", "dependencies": { "dequal": "^2.0.3", @@ -6550,14 +6330,13 @@ } }, "node_modules/synckit": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", - "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.3", - "tslib": "^2.8.1" + "@pkgr/core": "^0.2.9" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -6566,16 +6345,6 @@ "url": "https://opencollective.com/synckit" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/tinyglobby": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", @@ -6789,14 +6558,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/unrs-resolver": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.5.0.tgz", @@ -6844,17 +6605,6 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6991,29 +6741,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-validation-error": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz", - "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "zod": "^3.18.0" - } } } } diff --git a/admin/nextjs/package.json b/admin/nextjs/package.json new file mode 100644 index 0000000..20295b2 --- /dev/null +++ b/admin/nextjs/package.json @@ -0,0 +1,50 @@ +{ + "name": "saas-able-react-mui-admin-next-free", + "version": "1.3.0", + "private": false, + "author": { + "email": "phoenixcoded@gmail.com", + "name": "phoenixcoded" + }, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", + "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", + "prettier": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"" + }, + "dependencies": { + "@emotion/cache": "11.14.0", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.1", + "@mui/material": "7.2.0", + "@mui/material-nextjs": "7.2.0", + "@mui/x-charts": "8.9.0", + "@mui/x-date-pickers": "8.9.0", + "@tabler/icons-react": "3.34.1", + "lodash-es": "4.17.21", + "next": "15.4.3", + "notistack": "3.0.2", + "react": "19.1.0", + "react-device-detect": "2.2.3", + "react-dom": "19.1.0", + "react-hook-form": "7.61.0", + "simplebar-react": "3.3.2", + "stylis": "4.3.6", + "stylis-plugin-rtl": "2.1.1", + "swr": "2.3.4" + }, + "devDependencies": { + "@eslint/compat": "1.3.1", + "@eslint/eslintrc": "3.3.1", + "@eslint/js": "9.31.0", + "eslint": "9.31.0", + "eslint-config-next": "15.4.3", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-prettier": "5.5.3", + "eslint-plugin-react-hooks": "5.2.0", + "prettier": "3.6.2" + } +} diff --git a/admin/public/.gitkeep b/admin/nextjs/public/.gitkeep similarity index 100% rename from admin/public/.gitkeep rename to admin/nextjs/public/.gitkeep diff --git a/admin/public/assets/images/cards/poster.png b/admin/nextjs/public/assets/images/cards/poster.png similarity index 100% rename from admin/public/assets/images/cards/poster.png rename to admin/nextjs/public/assets/images/cards/poster.png diff --git a/admin/public/assets/images/components/fullscreen.webp b/admin/nextjs/public/assets/images/components/fullscreen.webp similarity index 100% rename from admin/public/assets/images/components/fullscreen.webp rename to admin/nextjs/public/assets/images/components/fullscreen.webp diff --git a/admin/public/assets/images/graphics/hosting/dashboard-dark.svg b/admin/nextjs/public/assets/images/graphics/hosting/dashboard-dark.svg similarity index 100% rename from admin/public/assets/images/graphics/hosting/dashboard-dark.svg rename to admin/nextjs/public/assets/images/graphics/hosting/dashboard-dark.svg diff --git a/admin/public/assets/images/graphics/hosting/dashboard-light.svg b/admin/nextjs/public/assets/images/graphics/hosting/dashboard-light.svg similarity index 100% rename from admin/public/assets/images/graphics/hosting/dashboard-light.svg rename to admin/nextjs/public/assets/images/graphics/hosting/dashboard-light.svg diff --git a/admin/public/assets/images/social/apple-dark.svg b/admin/nextjs/public/assets/images/social/apple-dark.svg similarity index 100% rename from admin/public/assets/images/social/apple-dark.svg rename to admin/nextjs/public/assets/images/social/apple-dark.svg diff --git a/admin/public/assets/images/social/apple-light.svg b/admin/nextjs/public/assets/images/social/apple-light.svg similarity index 100% rename from admin/public/assets/images/social/apple-light.svg rename to admin/nextjs/public/assets/images/social/apple-light.svg diff --git a/admin/public/assets/images/social/facebook.svg b/admin/nextjs/public/assets/images/social/facebook.svg similarity index 100% rename from admin/public/assets/images/social/facebook.svg rename to admin/nextjs/public/assets/images/social/facebook.svg diff --git a/admin/public/assets/images/social/google.svg b/admin/nextjs/public/assets/images/social/google.svg similarity index 100% rename from admin/public/assets/images/social/google.svg rename to admin/nextjs/public/assets/images/social/google.svg diff --git a/admin/public/assets/images/users/avatar-1.png b/admin/nextjs/public/assets/images/users/avatar-1.png similarity index 100% rename from admin/public/assets/images/users/avatar-1.png rename to admin/nextjs/public/assets/images/users/avatar-1.png diff --git a/admin/public/assets/images/users/avatar-2.png b/admin/nextjs/public/assets/images/users/avatar-2.png similarity index 100% rename from admin/public/assets/images/users/avatar-2.png rename to admin/nextjs/public/assets/images/users/avatar-2.png diff --git a/admin/public/assets/images/users/avatar-3.png b/admin/nextjs/public/assets/images/users/avatar-3.png similarity index 100% rename from admin/public/assets/images/users/avatar-3.png rename to admin/nextjs/public/assets/images/users/avatar-3.png diff --git a/admin/public/assets/images/users/avatar-4.png b/admin/nextjs/public/assets/images/users/avatar-4.png similarity index 100% rename from admin/public/assets/images/users/avatar-4.png rename to admin/nextjs/public/assets/images/users/avatar-4.png diff --git a/admin/public/assets/images/users/avatar-5.png b/admin/nextjs/public/assets/images/users/avatar-5.png similarity index 100% rename from admin/public/assets/images/users/avatar-5.png rename to admin/nextjs/public/assets/images/users/avatar-5.png diff --git a/admin/public/assets/styles/index.css b/admin/nextjs/public/assets/styles/index.css similarity index 100% rename from admin/public/assets/styles/index.css rename to admin/nextjs/public/assets/styles/index.css diff --git a/admin/public/assets/styles/third-party/README.md b/admin/nextjs/public/assets/styles/third-party/README.md similarity index 100% rename from admin/public/assets/styles/third-party/README.md rename to admin/nextjs/public/assets/styles/third-party/README.md diff --git a/admin/public/assets/videos/test.mp4 b/admin/nextjs/public/assets/videos/test.mp4 similarity index 100% rename from admin/public/assets/videos/test.mp4 rename to admin/nextjs/public/assets/videos/test.mp4 diff --git a/admin/src/app/(admin)/(components)/utils/color/page.jsx b/admin/nextjs/src/app/(admin)/(components)/utils/color/page.jsx similarity index 100% rename from admin/src/app/(admin)/(components)/utils/color/page.jsx rename to admin/nextjs/src/app/(admin)/(components)/utils/color/page.jsx diff --git a/admin/src/app/(admin)/(components)/utils/loading.jsx b/admin/nextjs/src/app/(admin)/(components)/utils/loading.jsx similarity index 100% rename from admin/src/app/(admin)/(components)/utils/loading.jsx rename to admin/nextjs/src/app/(admin)/(components)/utils/loading.jsx diff --git a/admin/src/app/(admin)/(components)/utils/shadow/page.jsx b/admin/nextjs/src/app/(admin)/(components)/utils/shadow/page.jsx similarity index 100% rename from admin/src/app/(admin)/(components)/utils/shadow/page.jsx rename to admin/nextjs/src/app/(admin)/(components)/utils/shadow/page.jsx diff --git a/admin/src/app/(admin)/(components)/utils/typography/page.jsx b/admin/nextjs/src/app/(admin)/(components)/utils/typography/page.jsx similarity index 100% rename from admin/src/app/(admin)/(components)/utils/typography/page.jsx rename to admin/nextjs/src/app/(admin)/(components)/utils/typography/page.jsx diff --git a/admin/src/app/(admin)/dashboard/page.jsx b/admin/nextjs/src/app/(admin)/dashboard/page.jsx similarity index 100% rename from admin/src/app/(admin)/dashboard/page.jsx rename to admin/nextjs/src/app/(admin)/dashboard/page.jsx diff --git a/admin/src/app/(admin)/layout.jsx b/admin/nextjs/src/app/(admin)/layout.jsx similarity index 100% rename from admin/src/app/(admin)/layout.jsx rename to admin/nextjs/src/app/(admin)/layout.jsx diff --git a/admin/src/app/(admin)/loading.jsx b/admin/nextjs/src/app/(admin)/loading.jsx similarity index 100% rename from admin/src/app/(admin)/loading.jsx rename to admin/nextjs/src/app/(admin)/loading.jsx diff --git a/admin/src/app/(admin)/sample-page/page.jsx b/admin/nextjs/src/app/(admin)/sample-page/page.jsx similarity index 100% rename from admin/src/app/(admin)/sample-page/page.jsx rename to admin/nextjs/src/app/(admin)/sample-page/page.jsx diff --git a/admin/src/app/ProviderWrapper.jsx b/admin/nextjs/src/app/ProviderWrapper.jsx similarity index 100% rename from admin/src/app/ProviderWrapper.jsx rename to admin/nextjs/src/app/ProviderWrapper.jsx diff --git a/admin/src/app/auth/layout.jsx b/admin/nextjs/src/app/auth/layout.jsx similarity index 100% rename from admin/src/app/auth/layout.jsx rename to admin/nextjs/src/app/auth/layout.jsx diff --git a/admin/src/app/auth/login/page.jsx b/admin/nextjs/src/app/auth/login/page.jsx similarity index 100% rename from admin/src/app/auth/login/page.jsx rename to admin/nextjs/src/app/auth/login/page.jsx diff --git a/admin/src/app/auth/register/page.jsx b/admin/nextjs/src/app/auth/register/page.jsx similarity index 100% rename from admin/src/app/auth/register/page.jsx rename to admin/nextjs/src/app/auth/register/page.jsx diff --git a/admin/src/app/error.jsx b/admin/nextjs/src/app/error.jsx similarity index 100% rename from admin/src/app/error.jsx rename to admin/nextjs/src/app/error.jsx diff --git a/admin/src/app/favicon.ico b/admin/nextjs/src/app/favicon.ico similarity index 100% rename from admin/src/app/favicon.ico rename to admin/nextjs/src/app/favicon.ico diff --git a/admin/src/app/globals.css b/admin/nextjs/src/app/globals.css similarity index 100% rename from admin/src/app/globals.css rename to admin/nextjs/src/app/globals.css diff --git a/admin/src/app/layout.jsx b/admin/nextjs/src/app/layout.jsx similarity index 89% rename from admin/src/app/layout.jsx rename to admin/nextjs/src/app/layout.jsx index 3f89022..c8b8e82 100644 --- a/admin/src/app/layout.jsx +++ b/admin/nextjs/src/app/layout.jsx @@ -28,7 +28,7 @@ export default function RootLayout({ children }) { return ( - + diff --git a/admin/src/app/loading.jsx b/admin/nextjs/src/app/loading.jsx similarity index 100% rename from admin/src/app/loading.jsx rename to admin/nextjs/src/app/loading.jsx diff --git a/admin/src/app/not-found.jsx b/admin/nextjs/src/app/not-found.jsx similarity index 100% rename from admin/src/app/not-found.jsx rename to admin/nextjs/src/app/not-found.jsx diff --git a/admin/src/app/page.jsx b/admin/nextjs/src/app/page.jsx similarity index 100% rename from admin/src/app/page.jsx rename to admin/nextjs/src/app/page.jsx diff --git a/admin/src/branding.json b/admin/nextjs/src/branding.json similarity index 100% rename from admin/src/branding.json rename to admin/nextjs/src/branding.json diff --git a/admin/src/components/Breadcrumbs.jsx b/admin/nextjs/src/components/Breadcrumbs.jsx similarity index 89% rename from admin/src/components/Breadcrumbs.jsx rename to admin/nextjs/src/components/Breadcrumbs.jsx index 5062204..2118a41 100644 --- a/admin/src/components/Breadcrumbs.jsx +++ b/admin/nextjs/src/components/Breadcrumbs.jsx @@ -1,5 +1,4 @@ 'use client'; -import PropTypes from 'prop-types'; import { useEffect, useState } from 'react'; @@ -15,6 +14,7 @@ import Typography from '@mui/material/Typography'; // @project import { APP_DEFAULT_PATH } from '@/config'; import menuItems from '@/menu'; +import { useGetBreadcrumbsMaster } from '@/states/breadcrumbs'; import { generateFocusStyle } from '@/utils/generateFocusStyle'; // @assets @@ -25,16 +25,17 @@ const homeBreadcrumb = { title: 'Home', url: APP_DEFAULT_PATH }; /*************************** BREADCRUMBS ***************************/ -export default function Breadcrumbs({ data }) { +export default function Breadcrumbs() { const theme = useTheme(); const location = usePathname(); + const { breadcrumbsMaster } = useGetBreadcrumbsMaster(); const [breadcrumbItems, setBreadcrumbItems] = useState([]); const [activeItem, setActiveItem] = useState(); useEffect(() => { - if (data?.length) { - dataHandler(data); + if (breadcrumbsMaster && breadcrumbsMaster.data?.length && breadcrumbsMaster.activePath === location) { + dataHandler(breadcrumbsMaster.data); } else { for (const menu of menuItems?.items) { if (menu.type && menu.type === 'group') { @@ -45,7 +46,7 @@ export default function Breadcrumbs({ data }) { } } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [data, location]); + }, [breadcrumbsMaster, location]); const dataHandler = (data) => { const active = data.at(-1); @@ -106,5 +107,3 @@ export default function Breadcrumbs({ data }) { ); } - -Breadcrumbs.propTypes = { data: PropTypes.array }; diff --git a/admin/src/components/ComponentsWrapper.jsx b/admin/nextjs/src/components/ComponentsWrapper.jsx similarity index 100% rename from admin/src/components/ComponentsWrapper.jsx rename to admin/nextjs/src/components/ComponentsWrapper.jsx diff --git a/admin/src/components/Contact.jsx b/admin/nextjs/src/components/Contact.jsx similarity index 97% rename from admin/src/components/Contact.jsx rename to admin/nextjs/src/components/Contact.jsx index 5f34f8c..4b3ccb4 100644 --- a/admin/src/components/Contact.jsx +++ b/admin/nextjs/src/components/Contact.jsx @@ -27,7 +27,7 @@ import Box from '@mui/material/Box'; import { Controller } from 'react-hook-form'; // @project -import { contactSchema } from '@/utils/validationSchema'; +import { contactSchema } from '@/utils/validation-schema/common'; // @icons import { IconChevronDown, IconHelp } from '@tabler/icons-react'; @@ -120,7 +120,7 @@ export default function Contact({ type="button" onClick={handleClick} > - {selectedCountry.countyCode} + {selectedCountry.countryCode} @@ -149,7 +149,7 @@ export default function Contact({ > diff --git a/admin/src/components/DynamicIcon.jsx b/admin/nextjs/src/components/DynamicIcon.jsx similarity index 100% rename from admin/src/components/DynamicIcon.jsx rename to admin/nextjs/src/components/DynamicIcon.jsx diff --git a/admin/src/components/Error404.jsx b/admin/nextjs/src/components/Error404.jsx similarity index 100% rename from admin/src/components/Error404.jsx rename to admin/nextjs/src/components/Error404.jsx diff --git a/admin/src/components/Error500.jsx b/admin/nextjs/src/components/Error500.jsx similarity index 100% rename from admin/src/components/Error500.jsx rename to admin/nextjs/src/components/Error500.jsx diff --git a/admin/src/components/Loader.jsx b/admin/nextjs/src/components/Loader.jsx similarity index 100% rename from admin/src/components/Loader.jsx rename to admin/nextjs/src/components/Loader.jsx diff --git a/admin/src/components/MainCard.jsx b/admin/nextjs/src/components/MainCard.jsx similarity index 84% rename from admin/src/components/MainCard.jsx rename to admin/nextjs/src/components/MainCard.jsx index 9a3142c..6de7772 100644 --- a/admin/src/components/MainCard.jsx +++ b/admin/nextjs/src/components/MainCard.jsx @@ -4,6 +4,8 @@ import PropTypes from 'prop-types'; // @mui import Card from '@mui/material/Card'; +/*************************** MAIN CARD ***************************/ + export default function MainCard({ children, sx = {}, ref, ...others }) { const defaultSx = (theme) => ({ p: { xs: 1.75, sm: 2.25, md: 3 }, @@ -24,4 +26,4 @@ export default function MainCard({ children, sx = {}, ref, ...others }) { ); } -MainCard.propTypes = { children: PropTypes.any, sx: PropTypes.object, others: PropTypes.any }; +MainCard.propTypes = { children: PropTypes.any, sx: PropTypes.object, ref: PropTypes.any, others: PropTypes.any }; diff --git a/admin/src/components/NotificationItem.jsx b/admin/nextjs/src/components/NotificationItem.jsx similarity index 97% rename from admin/src/components/NotificationItem.jsx rename to admin/nextjs/src/components/NotificationItem.jsx index 1b0e42d..52e88d3 100644 --- a/admin/src/components/NotificationItem.jsx +++ b/admin/nextjs/src/components/NotificationItem.jsx @@ -32,7 +32,7 @@ export default function NotificationItem({ avatar, badgeAvatar, title, subTitle, overlap="circular" anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }} badgeContent={} - sx={{ '& .MuiBadge-badge': { bottom: '22%' } }} + slotProps={{ badge: { sx: { bottom: '22%' } } }} > {avatarContent} diff --git a/admin/src/components/Profile.jsx b/admin/nextjs/src/components/Profile.jsx similarity index 52% rename from admin/src/components/Profile.jsx rename to admin/nextjs/src/components/Profile.jsx index 09cf819..1f1acf1 100644 --- a/admin/src/components/Profile.jsx +++ b/admin/nextjs/src/components/Profile.jsx @@ -4,24 +4,33 @@ import Avatar from '@mui/material/Avatar'; import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; +// @icons +import { IconPhoto } from '@tabler/icons-react'; + /*************************** PROFILE ***************************/ -export default function Profile({ avatar, title, caption, label, sx, titleProps, captionProps }) { +export default function Profile({ avatar, title, caption, label, sx, titleProps, captionProps, placeholderIfEmpty }) { return ( - {avatar && } + {(avatar?.src || placeholderIfEmpty) && ( + + {!avatar?.src && placeholderIfEmpty && } + + )} - - {title} + + {title || (placeholderIfEmpty && 'N/A')} {label} - {caption && ( - - {caption} - - )} + + {caption || (placeholderIfEmpty && '---')} + ); @@ -34,5 +43,6 @@ Profile.propTypes = { label: PropTypes.any, sx: PropTypes.any, titleProps: PropTypes.any, - captionProps: PropTypes.any + captionProps: PropTypes.any, + placeholderIfEmpty: PropTypes.any }; diff --git a/admin/src/components/cards/OverviewCard.jsx b/admin/nextjs/src/components/cards/OverviewCard.jsx similarity index 99% rename from admin/src/components/cards/OverviewCard.jsx rename to admin/nextjs/src/components/cards/OverviewCard.jsx index 57d9c7e..0b4fd88 100644 --- a/admin/src/components/cards/OverviewCard.jsx +++ b/admin/nextjs/src/components/cards/OverviewCard.jsx @@ -1,4 +1,5 @@ import PropTypes from 'prop-types'; + // @mui import Chip from '@mui/material/Chip'; import Stack from '@mui/material/Stack'; diff --git a/admin/src/components/cards/PresentationCard.jsx b/admin/nextjs/src/components/cards/PresentationCard.jsx similarity index 99% rename from admin/src/components/cards/PresentationCard.jsx rename to admin/nextjs/src/components/cards/PresentationCard.jsx index 506e8bc..a521a1e 100644 --- a/admin/src/components/cards/PresentationCard.jsx +++ b/admin/nextjs/src/components/cards/PresentationCard.jsx @@ -1,4 +1,5 @@ import PropTypes from 'prop-types'; + // @mui import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; diff --git a/admin/src/components/cards/ProgressCard.jsx b/admin/nextjs/src/components/cards/ProgressCard.jsx similarity index 100% rename from admin/src/components/cards/ProgressCard.jsx rename to admin/nextjs/src/components/cards/ProgressCard.jsx diff --git a/admin/src/components/header/empty-state/EmptyNotification.jsx b/admin/nextjs/src/components/header/empty-state/EmptyNotification.jsx similarity index 100% rename from admin/src/components/header/empty-state/EmptyNotification.jsx rename to admin/nextjs/src/components/header/empty-state/EmptyNotification.jsx diff --git a/admin/src/components/header/empty-state/EmptySearch.jsx b/admin/nextjs/src/components/header/empty-state/EmptySearch.jsx similarity index 84% rename from admin/src/components/header/empty-state/EmptySearch.jsx rename to admin/nextjs/src/components/header/empty-state/EmptySearch.jsx index 16e26d2..01d86df 100644 --- a/admin/src/components/header/empty-state/EmptySearch.jsx +++ b/admin/nextjs/src/components/header/empty-state/EmptySearch.jsx @@ -1,4 +1,5 @@ 'use client'; +import PropTypes from 'prop-types'; // @mui import Stack from '@mui/material/Stack'; @@ -10,7 +11,7 @@ import { DumpingDoodle } from '@/images/illustration'; /*************************** HEADER - EMPTY SEARCH ***************************/ -export default function EmptySearch(props, ref) { +export default function EmptySearch({ props, ref }) { return ( @@ -27,3 +28,5 @@ export default function EmptySearch(props, ref) { ); } + +EmptySearch.propTypes = { props: PropTypes.any, ref: PropTypes.object }; diff --git a/admin/src/components/logo/LogoIcon.jsx b/admin/nextjs/src/components/logo/LogoIcon.jsx similarity index 95% rename from admin/src/components/logo/LogoIcon.jsx rename to admin/nextjs/src/components/logo/LogoIcon.jsx index d302113..7ac06e2 100644 --- a/admin/src/components/logo/LogoIcon.jsx +++ b/admin/nextjs/src/components/logo/LogoIcon.jsx @@ -22,10 +22,7 @@ export default function LogoIcon() { position: 'relative', cursor: 'pointer', display: 'block', - WebkitTapHighlightColor: 'transparent', - '& svg': { - display: 'block' - } + '& svg': { display: 'block' } }} > {logoIconPath ? ( diff --git a/admin/src/components/logo/LogoMain.jsx b/admin/nextjs/src/components/logo/LogoMain.jsx similarity index 100% rename from admin/src/components/logo/LogoMain.jsx rename to admin/nextjs/src/components/logo/LogoMain.jsx diff --git a/admin/src/components/logo/index.jsx b/admin/nextjs/src/components/logo/index.jsx similarity index 100% rename from admin/src/components/logo/index.jsx rename to admin/nextjs/src/components/logo/index.jsx diff --git a/admin/src/components/third-party/Notistack.jsx b/admin/nextjs/src/components/third-party/Notistack.jsx similarity index 98% rename from admin/src/components/third-party/Notistack.jsx rename to admin/nextjs/src/components/third-party/Notistack.jsx index e00e814..cbaa724 100644 --- a/admin/src/components/third-party/Notistack.jsx +++ b/admin/nextjs/src/components/third-party/Notistack.jsx @@ -78,7 +78,7 @@ const animation = { Fade }; -const iconSX = { marginRight: 8, fontSize: '1.15rem' }; +const iconSX = { fontSize: '1.15rem' }; /*************************** SNACKBAR - NOTISTACK ***************************/ diff --git a/admin/src/components/third-party/SimpleBar.jsx b/admin/nextjs/src/components/third-party/SimpleBar.jsx similarity index 93% rename from admin/src/components/third-party/SimpleBar.jsx rename to admin/nextjs/src/components/third-party/SimpleBar.jsx index 74f0c78..c950601 100644 --- a/admin/src/components/third-party/SimpleBar.jsx +++ b/admin/nextjs/src/components/third-party/SimpleBar.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; // @mui -import { alpha, styled, useTheme } from '@mui/material/styles'; +import { alpha, styled } from '@mui/material/styles'; import Box from '@mui/material/Box'; // @third-party @@ -27,8 +27,6 @@ const SimpleBarStyle = styled(MainSimpleBar)(({ theme }) => ({ /*************************** SIMPLE SCROLL BAR ***************************/ export default function SimpleBar({ children, sx, ...other }) { - const theme = useTheme(); - return ( <> diff --git a/admin/src/components/third-party/chart/Legend.jsx b/admin/nextjs/src/components/third-party/chart/Legend.jsx similarity index 77% rename from admin/src/components/third-party/chart/Legend.jsx rename to admin/nextjs/src/components/third-party/chart/Legend.jsx index faf1599..8f3be06 100644 --- a/admin/src/components/third-party/chart/Legend.jsx +++ b/admin/nextjs/src/components/third-party/chart/Legend.jsx @@ -10,12 +10,7 @@ export default function Legend({ items, onToggle }) { return ( {items.map((item) => ( - onToggle(item.id)} - > + onToggle(item.id)}> {item.label} diff --git a/admin/src/config.js b/admin/nextjs/src/config.js similarity index 100% rename from admin/src/config.js rename to admin/nextjs/src/config.js diff --git a/admin/src/contexts/ConfigContext.jsx b/admin/nextjs/src/contexts/ConfigContext.jsx similarity index 96% rename from admin/src/contexts/ConfigContext.jsx rename to admin/nextjs/src/contexts/ConfigContext.jsx index ce5da84..fe81727 100644 --- a/admin/src/contexts/ConfigContext.jsx +++ b/admin/nextjs/src/contexts/ConfigContext.jsx @@ -15,7 +15,7 @@ const initialState = { ...defaultConfig }; const ConfigContext = createContext(initialState); function ConfigProvider({ children }) { - const [config] = useLocalStorage('sass-able-react-mui-admin-next-ts', initialState); + const [config] = useLocalStorage('sass-able-react-mui-admin-next-free', initialState); return {children}; } diff --git a/admin/nextjs/src/data/countries.js b/admin/nextjs/src/data/countries.js new file mode 100644 index 0000000..9c351e2 --- /dev/null +++ b/admin/nextjs/src/data/countries.js @@ -0,0 +1,235 @@ +/*************************** DATA - COUNTRIES ***************************/ + +const countries = [ + { countryCode: 'AD', name: 'Andorra', dialCode: '+376' }, + { countryCode: 'AE', name: 'United Arab Emirates', dialCode: '+971' }, + { countryCode: 'AF', name: 'Afghanistan', dialCode: '+93' }, + { countryCode: 'AG', name: 'Antigua and Barbuda', dialCode: '+1-268' }, + { countryCode: 'AI', name: 'Anguilla', dialCode: '+1-264' }, + { countryCode: 'AL', name: 'Albania', dialCode: '+355' }, + { countryCode: 'AM', name: 'Armenia', dialCode: '+374' }, + { countryCode: 'AO', name: 'Angola', dialCode: '+244' }, + { countryCode: 'AQ', name: 'Antarctica', dialCode: '+672' }, + { countryCode: 'AR', name: 'Argentina', dialCode: '+54' }, + { countryCode: 'AS', name: 'American Samoa', dialCode: '+1-684' }, + { countryCode: 'AT', name: 'Austria', dialCode: '+43' }, + { countryCode: 'AU', name: 'Australia', dialCode: '+61', suggested: true }, + { countryCode: 'AW', name: 'Aruba', dialCode: '+297' }, + { countryCode: 'AZ', name: 'Azerbaijan', dialCode: '+994' }, + { countryCode: 'BA', name: 'Bosnia and Herzegovina', dialCode: '+387' }, + { countryCode: 'BB', name: 'Barbados', dialCode: '+1-246' }, + { countryCode: 'BD', name: 'Bangladesh', dialCode: '+880' }, + { countryCode: 'BE', name: 'Belgium', dialCode: '+32' }, + { countryCode: 'BF', name: 'Burkina Faso', dialCode: '+226' }, + { countryCode: 'BG', name: 'Bulgaria', dialCode: '+359' }, + { countryCode: 'BH', name: 'Bahrain', dialCode: '+973' }, + { countryCode: 'BI', name: 'Burundi', dialCode: '+257' }, + { countryCode: 'BJ', name: 'Benin', dialCode: '+229' }, + { countryCode: 'BL', name: 'Saint Barthelemy', dialCode: '+590' }, + { countryCode: 'BM', name: 'Bermuda', dialCode: '+1-441' }, + { countryCode: 'BN', name: 'Brunei Darussalam', dialCode: '+673' }, + { countryCode: 'BO', name: 'Bolivia', dialCode: '+591' }, + { countryCode: 'BR', name: 'Brazil', dialCode: '+55' }, + { countryCode: 'BS', name: 'Bahamas', dialCode: '+1-242' }, + { countryCode: 'BT', name: 'Bhutan', dialCode: '+975' }, + { countryCode: 'BW', name: 'Botswana', dialCode: '+267' }, + { countryCode: 'BY', name: 'Belarus', dialCode: '+375' }, + { countryCode: 'BZ', name: 'Belize', dialCode: '+501' }, + { countryCode: 'CD', name: 'Congo', dialCode: '+243' }, + { countryCode: 'CF', name: 'Central African Republic', dialCode: '+236' }, + { countryCode: 'CG', name: 'Congo', dialCode: '+242' }, + { countryCode: 'CH', name: 'Switzerland', dialCode: '+41' }, + { countryCode: 'CI', name: "Cote d'Ivoire", dialCode: '+225' }, + { countryCode: 'CK', name: 'Cook Islands', dialCode: '+682' }, + { countryCode: 'CL', name: 'Chile', dialCode: '+56' }, + { countryCode: 'CM', name: 'Cameroon', dialCode: '+237' }, + { countryCode: 'CN', name: 'China', dialCode: '+86' }, + { countryCode: 'CO', name: 'Colombia', dialCode: '+57' }, + { countryCode: 'CR', name: 'Costa Rica', dialCode: '+506' }, + { countryCode: 'CU', name: 'Cuba', dialCode: '+53' }, + { countryCode: 'CV', name: 'Cape Verde', dialCode: '+238' }, + { countryCode: 'CW', name: 'Curacao', dialCode: '+599' }, + { countryCode: 'CY', name: 'Cyprus', dialCode: '+357' }, + { countryCode: 'CZ', name: 'Czech Republic', dialCode: '+420' }, + { countryCode: 'DE', name: 'Germany', dialCode: '+49', suggested: true }, + { countryCode: 'DJ', name: 'Djibouti', dialCode: '+253' }, + { countryCode: 'DK', name: 'Denmark', dialCode: '+45' }, + { countryCode: 'DM', name: 'Dominica', dialCode: '+1-767' }, + { countryCode: 'DO', name: 'Dominican Republic', dialCode: '+1-809' }, + { countryCode: 'DZ', name: 'Algeria', dialCode: '+213' }, + { countryCode: 'EC', name: 'Ecuador', dialCode: '+593' }, + { countryCode: 'EE', name: 'Estonia', dialCode: '+372' }, + { countryCode: 'EG', name: 'Egypt', dialCode: '+20' }, + { countryCode: 'ER', name: 'Eritrea', dialCode: '+291' }, + { countryCode: 'ES', name: 'Spain', dialCode: '+34' }, + { countryCode: 'ET', name: 'Ethiopia', dialCode: '+251' }, + { countryCode: 'FI', name: 'Finland', dialCode: '+358' }, + { countryCode: 'FJ', name: 'Fiji', dialCode: '+679' }, + { countryCode: 'FK', name: 'Falkland Islands (Malvinas)', dialCode: '+500' }, + { countryCode: 'FM', name: 'Micronesia', dialCode: '+691' }, + { countryCode: 'FO', name: 'Faroe Islands', dialCode: '+298' }, + { countryCode: 'FR', name: 'France', dialCode: '+33', suggested: true }, + { countryCode: 'GA', name: 'Gabon', dialCode: '+241' }, + { countryCode: 'GB', name: 'United Kingdom', dialCode: '+44' }, + { countryCode: 'GD', name: 'Grenada', dialCode: '+1-473' }, + { countryCode: 'GE', name: 'Georgia', dialCode: '+995' }, + { countryCode: 'GF', name: 'French Guiana', dialCode: '+594' }, + { countryCode: 'GH', name: 'Ghana', dialCode: '+233' }, + { countryCode: 'GI', name: 'Gibraltar', dialCode: '+350' }, + { countryCode: 'GL', name: 'Greenland', dialCode: '+299' }, + { countryCode: 'GM', name: 'Gambia', dialCode: '+220' }, + { countryCode: 'GN', name: 'Guinea', dialCode: '+224' }, + { countryCode: 'GQ', name: 'Equatorial Guinea', dialCode: '+240' }, + { countryCode: 'GR', name: 'Greece', dialCode: '+30' }, + { countryCode: 'GT', name: 'Guatemala', dialCode: '+502' }, + { countryCode: 'GU', name: 'Guam', dialCode: '+1-671' }, + { countryCode: 'GW', name: 'Guinea-Bissau', dialCode: '+245' }, + { countryCode: 'GY', name: 'Guyana', dialCode: '+592' }, + { countryCode: 'HK', name: 'Hong Kong', dialCode: '+852' }, + { countryCode: 'HN', name: 'Honduras', dialCode: '+504' }, + { countryCode: 'HR', name: 'Croatia', dialCode: '+385' }, + { countryCode: 'HT', name: 'Haiti', dialCode: '+509' }, + { countryCode: 'HU', name: 'Hungary', dialCode: '3+6' }, + { countryCode: 'ID', name: 'Indonesia', dialCode: '+62' }, + { countryCode: 'IE', name: 'Ireland', dialCode: '+353' }, + { countryCode: 'IL', name: 'Israel', dialCode: '+972' }, + { countryCode: 'IN', name: 'India', dialCode: '+91' }, + { countryCode: 'IO', name: 'British Indian Ocean Territory', dialCode: '+246' }, + { countryCode: 'IQ', name: 'Iraq', dialCode: '+964' }, + { countryCode: 'IR', name: 'Iran', dialCode: '+98' }, + { countryCode: 'IS', name: 'Iceland', dialCode: '+354' }, + { countryCode: 'IT', name: 'Italy', dialCode: '+39' }, + { countryCode: 'JM', name: 'Jamaica', dialCode: '+1-876' }, + { countryCode: 'JO', name: 'Jordan', dialCode: '+962' }, + { countryCode: 'JP', name: 'Japan', dialCode: '+81', suggested: true }, + { countryCode: 'KE', name: 'Kenya', dialCode: '+254' }, + { countryCode: 'KG', name: 'Kyrgyzstan', dialCode: '+996' }, + { countryCode: 'KH', name: 'Cambodia', dialCode: '+855' }, + { countryCode: 'KI', name: 'Kiribati', dialCode: '+686' }, + { countryCode: 'KM', name: 'Comoros', dialCode: '+269' }, + { countryCode: 'KN', name: 'Saint Kitts and Nevis', dialCode: '+1-869' }, + { countryCode: 'KP', name: 'Korea', dialCode: '+850' }, + { countryCode: 'KR', name: 'Korea', dialCode: '+82' }, + { countryCode: 'KW', name: 'Kuwait', dialCode: '+965' }, + { countryCode: 'KY', name: 'Cayman Islands', dialCode: '+1-345' }, + { countryCode: 'LA', name: "Lao People's Democratic Republic", dialCode: '+856' }, + { countryCode: 'LB', name: 'Lebanon', dialCode: '+961' }, + { countryCode: 'LC', name: 'Saint Lucia', dialCode: '+1-758' }, + { countryCode: 'LI', name: 'Liechtenstein', dialCode: '+423' }, + { countryCode: 'LK', name: 'Sri Lanka', dialCode: '+94' }, + { countryCode: 'LR', name: 'Liberia', dialCode: '+231' }, + { countryCode: 'LS', name: 'Lesotho', dialCode: '+266' }, + { countryCode: 'LT', name: 'Lithuania', dialCode: '+370' }, + { countryCode: 'LU', name: 'Luxembourg', dialCode: '+352' }, + { countryCode: 'LV', name: 'Latvia', dialCode: '+371' }, + { countryCode: 'LY', name: 'Libya', dialCode: '+218' }, + { countryCode: 'MA', name: 'Morocco', dialCode: '+212' }, + { countryCode: 'MC', name: 'Monaco', dialCode: '+377' }, + { countryCode: 'MD', name: 'Moldova', dialCode: '+373' }, + { countryCode: 'ME', name: 'Montenegro', dialCode: '+382' }, + { countryCode: 'MG', name: 'Madagascar', dialCode: '+261' }, + { countryCode: 'MH', name: 'Marshall Islands', dialCode: '+692' }, + { countryCode: 'MK', name: 'Macedonia', dialCode: '+389' }, + { countryCode: 'ML', name: 'Mali', dialCode: '+223' }, + { countryCode: 'MM', name: 'Myanmar', dialCode: '+95' }, + { countryCode: 'MN', name: 'Mongolia', dialCode: '+976' }, + { countryCode: 'MO', name: 'Macao', dialCode: '+853' }, + { countryCode: 'MP', name: 'Northern Mariana Islands', dialCode: '+1-670' }, + { countryCode: 'MQ', name: 'Martinique', dialCode: '+596' }, + { countryCode: 'MR', name: 'Mauritania', dialCode: '+222' }, + { countryCode: 'MS', name: 'Montserrat', dialCode: '+1-664' }, + { countryCode: 'MT', name: 'Malta', dialCode: '+356' }, + { countryCode: 'MU', name: 'Mauritius', dialCode: '+230' }, + { countryCode: 'MV', name: 'Maldives', dialCode: '+960' }, + { countryCode: 'MW', name: 'Malawi', dialCode: '+265' }, + { countryCode: 'MX', name: 'Mexico', dialCode: '+52' }, + { countryCode: 'MY', name: 'Malaysia', dialCode: '+60' }, + { countryCode: 'MZ', name: 'Mozambique', dialCode: '+258' }, + { countryCode: 'NA', name: 'Namibia', dialCode: '+264' }, + { countryCode: 'NC', name: 'New Caledonia', dialCode: '+687' }, + { countryCode: 'NE', name: 'Niger', dialCode: '+227' }, + { countryCode: 'NG', name: 'Nigeria', dialCode: '+234' }, + { countryCode: 'NI', name: 'Nicaragua', dialCode: '+505' }, + { countryCode: 'NL', name: 'Netherlands', dialCode: '+31' }, + { countryCode: 'NO', name: 'Norway', dialCode: '+47' }, + { countryCode: 'NP', name: 'Nepal', dialCode: '+977' }, + { countryCode: 'NR', name: 'Nauru', dialCode: '+674' }, + { countryCode: 'NU', name: 'Niue', dialCode: '+683' }, + { countryCode: 'NZ', name: 'New Zealand', dialCode: '+64' }, + { countryCode: 'OM', name: 'Oman', dialCode: '+968' }, + { countryCode: 'PA', name: 'Panama', dialCode: '+507' }, + { countryCode: 'PE', name: 'Peru', dialCode: '+51' }, + { countryCode: 'PF', name: 'French Polynesia', dialCode: '+689' }, + { countryCode: 'PG', name: 'Papua New Guinea', dialCode: '+675' }, + { countryCode: 'PH', name: 'Philippines', dialCode: '+63' }, + { countryCode: 'PK', name: 'Pakistan', dialCode: '+92' }, + { countryCode: 'PL', name: 'Poland', dialCode: '+48' }, + { countryCode: 'PM', name: 'Saint Pierre and Miquelon', dialCode: '+508' }, + { countryCode: 'PN', name: 'Pitcairn', dialCode: '+870' }, + { countryCode: 'PS', name: 'Palestine', dialCode: '+970' }, + { countryCode: 'PT', name: 'Portugal', dialCode: '+351' }, + { countryCode: 'PW', name: 'Palau', dialCode: '+680' }, + { countryCode: 'PY', name: 'Paraguay', dialCode: '+595' }, + { countryCode: 'QA', name: 'Qatar', dialCode: '+974' }, + { countryCode: 'RO', name: 'Romania', dialCode: '+40' }, + { countryCode: 'RS', name: 'Serbia', dialCode: '+381' }, + { countryCode: 'RU', name: 'Russian Federation', dialCode: '+7' }, + { countryCode: 'RW', name: 'Rwanda', dialCode: '+250' }, + { countryCode: 'SA', name: 'Saudi Arabia', dialCode: '+966' }, + { countryCode: 'SB', name: 'Solomon Islands', dialCode: '+677' }, + { countryCode: 'SC', name: 'Seychelles', dialCode: '+248' }, + { countryCode: 'SD', name: 'Sudan', dialCode: '+249' }, + { countryCode: 'SE', name: 'Sweden', dialCode: '+46' }, + { countryCode: 'SG', name: 'Singapore', dialCode: '+65' }, + { countryCode: 'SH', name: 'Saint Helena', dialCode: '+290' }, + { countryCode: 'SI', name: 'Slovenia', dialCode: '+386' }, + { countryCode: 'SK', name: 'Slovakia', dialCode: '+421' }, + { countryCode: 'SL', name: 'Sierra Leone', dialCode: '+232' }, + { countryCode: 'SM', name: 'San Marino', dialCode: '+378' }, + { countryCode: 'SN', name: 'Senegal', dialCode: '+221' }, + { countryCode: 'SO', name: 'Somalia', dialCode: '+252' }, + { countryCode: 'SR', name: 'Suriname', dialCode: '+597' }, + { countryCode: 'SS', name: 'South Sudan', dialCode: '+211' }, + { countryCode: 'ST', name: 'Sao Tome and Principe', dialCode: '+239' }, + { countryCode: 'SV', name: 'El Salvador', dialCode: '+503' }, + { countryCode: 'SX', name: 'Sint Maarten (Dutch part)', dialCode: '+1-721' }, + { countryCode: 'SY', name: 'Syrian Arab Republic', dialCode: '+963' }, + { countryCode: 'SZ', name: 'Swaziland', dialCode: '+268' }, + { countryCode: 'TC', name: 'Turks and Caicos Islands', dialCode: '+1-649' }, + { countryCode: 'TD', name: 'Chad', dialCode: '+235' }, + { countryCode: 'TG', name: 'Togo', dialCode: '+228' }, + { countryCode: 'TH', name: 'Thailand', dialCode: '+66' }, + { countryCode: 'TJ', name: 'Tajikistan', dialCode: '+992' }, + { countryCode: 'TK', name: 'Tokelau', dialCode: '+690' }, + { countryCode: 'TL', name: 'Timor-Leste', dialCode: '+670' }, + { countryCode: 'TM', name: 'Turkmenistan', dialCode: '+993' }, + { countryCode: 'TN', name: 'Tunisia', dialCode: '+216' }, + { countryCode: 'TO', name: 'Tonga', dialCode: '+676' }, + { countryCode: 'TR', name: 'Turkey', dialCode: '+90' }, + { countryCode: 'TT', name: 'Trinidad and Tobago', dialCode: '+1-868' }, + { countryCode: 'TV', name: 'Tuvalu', dialCode: '+688' }, + { countryCode: 'TW', name: 'Taiwan', dialCode: '+886' }, + { countryCode: 'TZ', name: 'United Republic of Tanzania', dialCode: '+255' }, + { countryCode: 'UA', name: 'Ukraine', dialCode: '+380' }, + { countryCode: 'UG', name: 'Uganda', dialCode: '+256' }, + { countryCode: 'US', name: 'United States', dialCode: '+1', suggested: true }, + { countryCode: 'UY', name: 'Uruguay', dialCode: '+598' }, + { countryCode: 'UZ', name: 'Uzbekistan', dialCode: '+998' }, + { countryCode: 'VA', name: 'Holy See (Vatican City State)', dialCode: '+379' }, + { countryCode: 'VC', name: 'Saint Vincent and the Grenadines', dialCode: '+1-784' }, + { countryCode: 'VE', name: 'Venezuela', dialCode: '+58' }, + { countryCode: 'VG', name: 'British Virgin Islands', dialCode: '+1-284' }, + { countryCode: 'VI', name: 'US Virgin Islands', dialCode: '+1-340' }, + { countryCode: 'VN', name: 'Vietnam', dialCode: '+84' }, + { countryCode: 'VU', name: 'Vanuatu', dialCode: '+678' }, + { countryCode: 'WF', name: 'Wallis and Futuna', dialCode: '+681' }, + { countryCode: 'WS', name: 'Samoa', dialCode: '+685' }, + { countryCode: 'XK', name: 'Kosovo', dialCode: '+383' }, + { countryCode: 'YE', name: 'Yemen', dialCode: '+967' }, + { countryCode: 'YT', name: 'Mayotte', dialCode: '+262' }, + { countryCode: 'ZA', name: 'South Africa', dialCode: '+27' }, + { countryCode: 'ZM', name: 'Zambia', dialCode: '+260' }, + { countryCode: 'ZW', name: 'Zimbabwe', dialCode: '+263' } +]; + +export default countries; diff --git a/admin/src/enum.js b/admin/nextjs/src/enum.js similarity index 100% rename from admin/src/enum.js rename to admin/nextjs/src/enum.js diff --git a/admin/src/hooks/useConfig.js b/admin/nextjs/src/hooks/useConfig.js similarity index 100% rename from admin/src/hooks/useConfig.js rename to admin/nextjs/src/hooks/useConfig.js diff --git a/admin/src/hooks/useLocalStorage.js b/admin/nextjs/src/hooks/useLocalStorage.js similarity index 100% rename from admin/src/hooks/useLocalStorage.js rename to admin/nextjs/src/hooks/useLocalStorage.js diff --git a/admin/src/hooks/useMenuCollapse.js b/admin/nextjs/src/hooks/useMenuCollapse.js similarity index 100% rename from admin/src/hooks/useMenuCollapse.js rename to admin/nextjs/src/hooks/useMenuCollapse.js diff --git a/admin/src/images/illustration/DumpingDoodle.jsx b/admin/nextjs/src/images/illustration/DumpingDoodle.jsx similarity index 100% rename from admin/src/images/illustration/DumpingDoodle.jsx rename to admin/nextjs/src/images/illustration/DumpingDoodle.jsx diff --git a/admin/src/images/illustration/ReadingSideDoodle.jsx b/admin/nextjs/src/images/illustration/ReadingSideDoodle.jsx similarity index 100% rename from admin/src/images/illustration/ReadingSideDoodle.jsx rename to admin/nextjs/src/images/illustration/ReadingSideDoodle.jsx diff --git a/admin/src/images/illustration/index.js b/admin/nextjs/src/images/illustration/index.js similarity index 100% rename from admin/src/images/illustration/index.js rename to admin/nextjs/src/images/illustration/index.js diff --git a/admin/src/images/maintenance/Error404.jsx b/admin/nextjs/src/images/maintenance/Error404.jsx similarity index 100% rename from admin/src/images/maintenance/Error404.jsx rename to admin/nextjs/src/images/maintenance/Error404.jsx diff --git a/admin/src/images/maintenance/Error500.jsx b/admin/nextjs/src/images/maintenance/Error500.jsx similarity index 100% rename from admin/src/images/maintenance/Error500.jsx rename to admin/nextjs/src/images/maintenance/Error500.jsx diff --git a/admin/src/images/maintenance/Error500Server.jsx b/admin/nextjs/src/images/maintenance/Error500Server.jsx similarity index 100% rename from admin/src/images/maintenance/Error500Server.jsx rename to admin/nextjs/src/images/maintenance/Error500Server.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/DrawerContent/NavCard.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/NavCard.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/DrawerContent/NavCard.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/NavCard.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavCollapse.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavCollapse.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavCollapse.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavCollapse.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavGroup.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavGroup.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavGroup.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavGroup.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavItem.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavItem.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavItem.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavItem.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/index.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/index.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/index.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/index.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/DrawerContent/index.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/index.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/DrawerContent/index.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerContent/index.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/DrawerHeader/index.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerHeader/index.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/DrawerHeader/index.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/DrawerHeader/index.jsx diff --git a/admin/src/layouts/AdminLayout/Drawer/MiniDrawerStyled.js b/admin/nextjs/src/layouts/AdminLayout/Drawer/MiniDrawerStyled.js similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/MiniDrawerStyled.js rename to admin/nextjs/src/layouts/AdminLayout/Drawer/MiniDrawerStyled.js diff --git a/admin/src/layouts/AdminLayout/Drawer/index.jsx b/admin/nextjs/src/layouts/AdminLayout/Drawer/index.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Drawer/index.jsx rename to admin/nextjs/src/layouts/AdminLayout/Drawer/index.jsx diff --git a/admin/src/layouts/AdminLayout/Header/AppBarStyled.jsx b/admin/nextjs/src/layouts/AdminLayout/Header/AppBarStyled.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Header/AppBarStyled.jsx rename to admin/nextjs/src/layouts/AdminLayout/Header/AppBarStyled.jsx diff --git a/admin/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx b/admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx similarity index 98% rename from admin/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx rename to admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx index 65d66f7..717c94c 100644 --- a/admin/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx +++ b/admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx @@ -178,8 +178,8 @@ export default function Notification() { color="error" variant="dot" invisible={allRead || notifications.length === 0} - sx={{ - '& .MuiBadge-badge': { height: 6, minWidth: 6, top: 4, right: 4, border: `1px solid ${theme.palette.background.default}` } + slotProps={{ + badge: { sx: { height: 6, minWidth: 6, top: 4, right: 4, border: `1px solid ${theme.palette.background.default}` } } }} > diff --git a/admin/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx b/admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx similarity index 98% rename from admin/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx rename to admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx index 72c633f..914015e 100644 --- a/admin/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx +++ b/admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx @@ -82,7 +82,7 @@ export default function ProfileSection() { return ( <> - + diff --git a/admin/src/layouts/AdminLayout/Header/HeaderContent/SearchBar.jsx b/admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/SearchBar.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Header/HeaderContent/SearchBar.jsx rename to admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/SearchBar.jsx diff --git a/admin/src/layouts/AdminLayout/Header/HeaderContent/index.jsx b/admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/index.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Header/HeaderContent/index.jsx rename to admin/nextjs/src/layouts/AdminLayout/Header/HeaderContent/index.jsx diff --git a/admin/src/layouts/AdminLayout/Header/index.jsx b/admin/nextjs/src/layouts/AdminLayout/Header/index.jsx similarity index 100% rename from admin/src/layouts/AdminLayout/Header/index.jsx rename to admin/nextjs/src/layouts/AdminLayout/Header/index.jsx diff --git a/admin/src/layouts/AdminLayout/index.jsx b/admin/nextjs/src/layouts/AdminLayout/index.jsx similarity index 96% rename from admin/src/layouts/AdminLayout/index.jsx rename to admin/nextjs/src/layouts/AdminLayout/index.jsx index 7fa40e0..3278bd5 100644 --- a/admin/src/layouts/AdminLayout/index.jsx +++ b/admin/nextjs/src/layouts/AdminLayout/index.jsx @@ -27,7 +27,6 @@ export default function DashboardLayout({ children }) { useEffect(() => { handlerDrawerOpen(!downXL); - // eslint-disable-next-line react-hooks/exhaustive-deps }, [downXL]); if (menuMasterLoading) return ; diff --git a/admin/src/layouts/AuthLayout/index.jsx b/admin/nextjs/src/layouts/AuthLayout/index.jsx similarity index 100% rename from admin/src/layouts/AuthLayout/index.jsx rename to admin/nextjs/src/layouts/AuthLayout/index.jsx diff --git a/admin/src/menu/index.jsx b/admin/nextjs/src/menu/index.jsx similarity index 100% rename from admin/src/menu/index.jsx rename to admin/nextjs/src/menu/index.jsx diff --git a/admin/src/menu/manage.jsx b/admin/nextjs/src/menu/manage.jsx similarity index 100% rename from admin/src/menu/manage.jsx rename to admin/nextjs/src/menu/manage.jsx diff --git a/admin/src/menu/other.jsx b/admin/nextjs/src/menu/other.jsx similarity index 97% rename from admin/src/menu/other.jsx rename to admin/nextjs/src/menu/other.jsx index a00ce4d..c868e36 100644 --- a/admin/src/menu/other.jsx +++ b/admin/nextjs/src/menu/other.jsx @@ -26,7 +26,7 @@ const other = { id: 'support', title: 'Support', type: 'item', - url: 'https://support.phoenixcoded.net', + url: 'https://codedthemes.support-hub.io/', target: true, icon: 'IconLifebuoy' }, diff --git a/admin/src/menu/pages.jsx b/admin/nextjs/src/menu/pages.jsx similarity index 100% rename from admin/src/menu/pages.jsx rename to admin/nextjs/src/menu/pages.jsx diff --git a/admin/src/menu/ui-elements.jsx b/admin/nextjs/src/menu/ui-elements.jsx similarity index 100% rename from admin/src/menu/ui-elements.jsx rename to admin/nextjs/src/menu/ui-elements.jsx diff --git a/admin/src/sections/auth/AuthLogin.jsx b/admin/nextjs/src/sections/auth/AuthLogin.jsx similarity index 94% rename from admin/src/sections/auth/AuthLogin.jsx rename to admin/nextjs/src/sections/auth/AuthLogin.jsx index 59c46ed..00e1232 100644 --- a/admin/src/sections/auth/AuthLogin.jsx +++ b/admin/nextjs/src/sections/auth/AuthLogin.jsx @@ -1,12 +1,12 @@ 'use client'; import PropTypes from 'prop-types'; -import { useState } from 'react'; - // @next import NextLink from 'next/link'; import { useRouter } from 'next/navigation'; +import { useState } from 'react'; + // @mui import { useTheme } from '@mui/material/styles'; import Alert from '@mui/material/Alert'; @@ -25,7 +25,7 @@ import { useForm } from 'react-hook-form'; // @project import { APP_DEFAULT_PATH } from '@/config'; -import { emailSchema, passwordSchema } from '@/utils/validationSchema'; +import { emailSchema, passwordSchema } from '@/utils/validation-schema/common'; // @icons import { IconEye, IconEyeOff } from '@tabler/icons-react'; @@ -112,11 +112,7 @@ export default function AuthLogin({ inputSx }) { fullWidth error={Boolean(errors.password)} endAdornment={ - setIsPasswordVisible(!isPasswordVisible)} - > + setIsPasswordVisible(!isPasswordVisible)}> {isPasswordVisible ? : } } diff --git a/admin/src/sections/auth/AuthRegister.jsx b/admin/nextjs/src/sections/auth/AuthRegister.jsx similarity index 92% rename from admin/src/sections/auth/AuthRegister.jsx rename to admin/nextjs/src/sections/auth/AuthRegister.jsx index e8128a5..66ea510 100644 --- a/admin/src/sections/auth/AuthRegister.jsx +++ b/admin/nextjs/src/sections/auth/AuthRegister.jsx @@ -1,11 +1,11 @@ 'use client'; import PropTypes from 'prop-types'; -import { useState, useRef } from 'react'; - // @next import { useRouter } from 'next/navigation'; +import { useState, useRef } from 'react'; + // @mui import { useTheme } from '@mui/material/styles'; import Alert from '@mui/material/Alert'; @@ -22,7 +22,7 @@ import { useForm } from 'react-hook-form'; // @project import Contact from '@/components/Contact'; -import { emailSchema, passwordSchema, firstNameSchema, lastNameSchema } from '@/utils/validationSchema'; +import { emailSchema, passwordSchema, firstNameSchema, lastNameSchema } from '@/utils/validation-schema/common'; // @icons import { IconEye, IconEyeOff } from '@tabler/icons-react'; @@ -55,7 +55,6 @@ export default function AuthRegister({ inputSx }) { const onSubmit = (formData) => { setIsProcessing(true); setRegisterError(''); - router.push('/auth/login'); }; @@ -119,11 +118,7 @@ export default function AuthRegister({ inputSx }) { autoComplete="new-password" error={Boolean(errors.password)} endAdornment={ - setIsOpen(!isOpen)} - > + setIsOpen(!isOpen)}> {isOpen ? : } } @@ -140,11 +135,7 @@ export default function AuthRegister({ inputSx }) { fullWidth error={Boolean(errors.confirmPassword)} endAdornment={ - setIsConfirmOpen(!isConfirmOpen)} - > + setIsConfirmOpen(!isConfirmOpen)}> {isConfirmOpen ? : } } diff --git a/admin/src/sections/auth/AuthSocial.jsx b/admin/nextjs/src/sections/auth/AuthSocial.jsx similarity index 100% rename from admin/src/sections/auth/AuthSocial.jsx rename to admin/nextjs/src/sections/auth/AuthSocial.jsx diff --git a/admin/src/sections/auth/Copyright.jsx b/admin/nextjs/src/sections/auth/Copyright.jsx similarity index 100% rename from admin/src/sections/auth/Copyright.jsx rename to admin/nextjs/src/sections/auth/Copyright.jsx diff --git a/admin/src/sections/components/color/ColorBox.jsx b/admin/nextjs/src/sections/components/color/ColorBox.jsx similarity index 100% rename from admin/src/sections/components/color/ColorBox.jsx rename to admin/nextjs/src/sections/components/color/ColorBox.jsx diff --git a/admin/src/sections/components/color/index.js b/admin/nextjs/src/sections/components/color/index.js similarity index 100% rename from admin/src/sections/components/color/index.js rename to admin/nextjs/src/sections/components/color/index.js diff --git a/admin/src/sections/dashboard/AnalyticsOverviewCard.jsx b/admin/nextjs/src/sections/dashboard/AnalyticsOverviewCard.jsx similarity index 100% rename from admin/src/sections/dashboard/AnalyticsOverviewCard.jsx rename to admin/nextjs/src/sections/dashboard/AnalyticsOverviewCard.jsx diff --git a/admin/src/sections/dashboard/AnalyticsOverviewChart.jsx b/admin/nextjs/src/sections/dashboard/AnalyticsOverviewChart.jsx similarity index 96% rename from admin/src/sections/dashboard/AnalyticsOverviewChart.jsx rename to admin/nextjs/src/sections/dashboard/AnalyticsOverviewChart.jsx index 267a527..3cd3624 100644 --- a/admin/src/sections/dashboard/AnalyticsOverviewChart.jsx +++ b/admin/nextjs/src/sections/dashboard/AnalyticsOverviewChart.jsx @@ -246,7 +246,7 @@ export default function Chart1() { series={visibleSeries.map((series) => ({ ...series, showMark: false, curve: 'linear', area: true }))} height={261} grid={{ horizontal: true }} - margin={{ top: 25, right: 20, bottom: 20, left: 60 }} + margin={{ top: 25, right: 0, bottom: -4, left: 0 }} xAxis={[ { data: xData, @@ -258,12 +258,8 @@ export default function Chart1() { } ]} yAxis={[{ scaleType: 'linear', disableLine: true, disableTicks: true, label: 'Visits' }]} - slotProps={{ legend: { hidden: true } }} - sx={{ - '& .MuiLineElement-root': { strokeDasharray: '0', strokeWidth: 2 }, - '& .MuiChartsAxis-left .MuiChartsAxis-label': { transform: 'translate(-15px, 0)' }, - ...dynamicSeriesStyles - }} + hideLegend + sx={{ '& .MuiLineElement-root': { strokeDasharray: '0', strokeWidth: 2 }, ...dynamicSeriesStyles }} > {visibleSeries.map((series, index) => ( diff --git a/admin/src/sections/dashboard/AnalyticsTopRef.jsx b/admin/nextjs/src/sections/dashboard/AnalyticsTopRef.jsx similarity index 98% rename from admin/src/sections/dashboard/AnalyticsTopRef.jsx rename to admin/nextjs/src/sections/dashboard/AnalyticsTopRef.jsx index ec2d3fe..97c61c1 100644 --- a/admin/src/sections/dashboard/AnalyticsTopRef.jsx +++ b/admin/nextjs/src/sections/dashboard/AnalyticsTopRef.jsx @@ -244,8 +244,8 @@ export default function TopReferrers() { TabPanel.propTypes = { children: PropTypes.any, - value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - index: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + index: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), other: PropTypes.any }; diff --git a/admin/nextjs/src/states/breadcrumbs.js b/admin/nextjs/src/states/breadcrumbs.js new file mode 100644 index 0000000..49039d9 --- /dev/null +++ b/admin/nextjs/src/states/breadcrumbs.js @@ -0,0 +1,57 @@ +import { useEffect, useMemo } from 'react'; + +// @next +import { usePathname } from 'next/navigation'; + +// @third-party +import useSWR, { mutate } from 'swr'; + +const initialState = { + activePath: '', + data: [] +}; + +export const endpoints = { + key: 'api/breadcrumbs', + master: 'master' +}; + +export function useGetBreadcrumbsMaster() { + // to fetch initial state based on endpoints + + const { data, isLoading } = useSWR(endpoints.key + endpoints.master, () => initialState, { + revalidateIfStale: false, + revalidateOnFocus: false, + revalidateOnReconnect: false + }); + + // reset cache if currentPath doesn't match activePath + const currentPath = usePathname(); + useEffect(() => { + if (data && data.activePath !== currentPath) { + mutate(endpoints.key + endpoints.master, initialState, false); + } + }, [currentPath, data]); + + const memoizedValue = useMemo( + () => ({ + breadcrumbsMaster: data, + breadcrumbsMasterLoading: isLoading + }), + [data, isLoading] + ); + + return memoizedValue; +} + +export function handlerBreadcrumbs(activePath, data) { + // to update `openedItem` local state based on key + + mutate( + endpoints.key + endpoints.master, + (currentBreadcrumbsMaster = initialState) => { + return { ...currentBreadcrumbsMaster, activePath, data }; + }, + false + ); +} diff --git a/admin/src/states/menu.js b/admin/nextjs/src/states/menu.js similarity index 97% rename from admin/src/states/menu.js rename to admin/nextjs/src/states/menu.js index 8176673..102e373 100644 --- a/admin/src/states/menu.js +++ b/admin/nextjs/src/states/menu.js @@ -5,7 +5,7 @@ import useSWR, { mutate } from 'swr'; const initialState = { openedItem: '', - isDashboardDrawerOpened: true + isDashboardDrawerOpened: false }; export const endpoints = { diff --git a/admin/src/states/snackbar.js b/admin/nextjs/src/states/snackbar.js similarity index 100% rename from admin/src/states/snackbar.js rename to admin/nextjs/src/states/snackbar.js diff --git a/admin/src/themes/index.jsx b/admin/nextjs/src/themes/index.jsx similarity index 100% rename from admin/src/themes/index.jsx rename to admin/nextjs/src/themes/index.jsx diff --git a/admin/src/themes/overrides/Alert.js b/admin/nextjs/src/themes/overrides/Alert.js similarity index 100% rename from admin/src/themes/overrides/Alert.js rename to admin/nextjs/src/themes/overrides/Alert.js diff --git a/admin/src/themes/overrides/Avatar.jsx b/admin/nextjs/src/themes/overrides/Avatar.jsx similarity index 100% rename from admin/src/themes/overrides/Avatar.jsx rename to admin/nextjs/src/themes/overrides/Avatar.jsx diff --git a/admin/src/themes/overrides/AvatarGroup.js b/admin/nextjs/src/themes/overrides/AvatarGroup.js similarity index 100% rename from admin/src/themes/overrides/AvatarGroup.js rename to admin/nextjs/src/themes/overrides/AvatarGroup.js diff --git a/admin/src/themes/overrides/Backdrop.js b/admin/nextjs/src/themes/overrides/Backdrop.js similarity index 100% rename from admin/src/themes/overrides/Backdrop.js rename to admin/nextjs/src/themes/overrides/Backdrop.js diff --git a/admin/src/themes/overrides/BarLabel.jsx b/admin/nextjs/src/themes/overrides/BarLabel.jsx similarity index 100% rename from admin/src/themes/overrides/BarLabel.jsx rename to admin/nextjs/src/themes/overrides/BarLabel.jsx diff --git a/admin/src/themes/overrides/Breadcrumbs.jsx b/admin/nextjs/src/themes/overrides/Breadcrumbs.jsx similarity index 100% rename from admin/src/themes/overrides/Breadcrumbs.jsx rename to admin/nextjs/src/themes/overrides/Breadcrumbs.jsx diff --git a/admin/src/themes/overrides/Button.js b/admin/nextjs/src/themes/overrides/Button.js similarity index 100% rename from admin/src/themes/overrides/Button.js rename to admin/nextjs/src/themes/overrides/Button.js diff --git a/admin/src/themes/overrides/CardActions.jsx b/admin/nextjs/src/themes/overrides/CardActions.jsx similarity index 100% rename from admin/src/themes/overrides/CardActions.jsx rename to admin/nextjs/src/themes/overrides/CardActions.jsx diff --git a/admin/src/themes/overrides/CardContent.jsx b/admin/nextjs/src/themes/overrides/CardContent.jsx similarity index 100% rename from admin/src/themes/overrides/CardContent.jsx rename to admin/nextjs/src/themes/overrides/CardContent.jsx diff --git a/admin/src/themes/overrides/CardHeader.jsx b/admin/nextjs/src/themes/overrides/CardHeader.jsx similarity index 100% rename from admin/src/themes/overrides/CardHeader.jsx rename to admin/nextjs/src/themes/overrides/CardHeader.jsx diff --git a/admin/src/themes/overrides/ChartsAxis.js b/admin/nextjs/src/themes/overrides/ChartsAxis.js similarity index 100% rename from admin/src/themes/overrides/ChartsAxis.js rename to admin/nextjs/src/themes/overrides/ChartsAxis.js diff --git a/admin/src/themes/overrides/ChartsAxisHighlight.js b/admin/nextjs/src/themes/overrides/ChartsAxisHighlight.js similarity index 100% rename from admin/src/themes/overrides/ChartsAxisHighlight.js rename to admin/nextjs/src/themes/overrides/ChartsAxisHighlight.js diff --git a/admin/src/themes/overrides/ChartsTooltip.js b/admin/nextjs/src/themes/overrides/ChartsTooltip.js similarity index 100% rename from admin/src/themes/overrides/ChartsTooltip.js rename to admin/nextjs/src/themes/overrides/ChartsTooltip.js diff --git a/admin/src/themes/overrides/Chip.jsx b/admin/nextjs/src/themes/overrides/Chip.jsx similarity index 100% rename from admin/src/themes/overrides/Chip.jsx rename to admin/nextjs/src/themes/overrides/Chip.jsx diff --git a/admin/src/themes/overrides/FormControlLabel.js b/admin/nextjs/src/themes/overrides/FormControlLabel.js similarity index 100% rename from admin/src/themes/overrides/FormControlLabel.js rename to admin/nextjs/src/themes/overrides/FormControlLabel.js diff --git a/admin/src/themes/overrides/FormHelperText.js b/admin/nextjs/src/themes/overrides/FormHelperText.js similarity index 100% rename from admin/src/themes/overrides/FormHelperText.js rename to admin/nextjs/src/themes/overrides/FormHelperText.js diff --git a/admin/src/themes/overrides/IconButton.js b/admin/nextjs/src/themes/overrides/IconButton.js similarity index 100% rename from admin/src/themes/overrides/IconButton.js rename to admin/nextjs/src/themes/overrides/IconButton.js diff --git a/admin/src/themes/overrides/InputAdornment.js b/admin/nextjs/src/themes/overrides/InputAdornment.js similarity index 100% rename from admin/src/themes/overrides/InputAdornment.js rename to admin/nextjs/src/themes/overrides/InputAdornment.js diff --git a/admin/src/themes/overrides/InputLabel.js b/admin/nextjs/src/themes/overrides/InputLabel.js similarity index 100% rename from admin/src/themes/overrides/InputLabel.js rename to admin/nextjs/src/themes/overrides/InputLabel.js diff --git a/admin/src/themes/overrides/LinearProgress.jsx b/admin/nextjs/src/themes/overrides/LinearProgress.jsx similarity index 100% rename from admin/src/themes/overrides/LinearProgress.jsx rename to admin/nextjs/src/themes/overrides/LinearProgress.jsx diff --git a/admin/src/themes/overrides/ListItemButton.jsx b/admin/nextjs/src/themes/overrides/ListItemButton.jsx similarity index 100% rename from admin/src/themes/overrides/ListItemButton.jsx rename to admin/nextjs/src/themes/overrides/ListItemButton.jsx diff --git a/admin/src/themes/overrides/ListItemIcon.jsx b/admin/nextjs/src/themes/overrides/ListItemIcon.jsx similarity index 100% rename from admin/src/themes/overrides/ListItemIcon.jsx rename to admin/nextjs/src/themes/overrides/ListItemIcon.jsx diff --git a/admin/src/themes/overrides/ListItemText.jsx b/admin/nextjs/src/themes/overrides/ListItemText.jsx similarity index 100% rename from admin/src/themes/overrides/ListItemText.jsx rename to admin/nextjs/src/themes/overrides/ListItemText.jsx diff --git a/admin/src/themes/overrides/OutlinedInput.jsx b/admin/nextjs/src/themes/overrides/OutlinedInput.jsx similarity index 100% rename from admin/src/themes/overrides/OutlinedInput.jsx rename to admin/nextjs/src/themes/overrides/OutlinedInput.jsx diff --git a/admin/src/themes/overrides/Popper.js b/admin/nextjs/src/themes/overrides/Popper.js similarity index 100% rename from admin/src/themes/overrides/Popper.js rename to admin/nextjs/src/themes/overrides/Popper.js diff --git a/admin/src/themes/overrides/Switch.js b/admin/nextjs/src/themes/overrides/Switch.js similarity index 100% rename from admin/src/themes/overrides/Switch.js rename to admin/nextjs/src/themes/overrides/Switch.js diff --git a/admin/src/themes/overrides/Tab.js b/admin/nextjs/src/themes/overrides/Tab.js similarity index 100% rename from admin/src/themes/overrides/Tab.js rename to admin/nextjs/src/themes/overrides/Tab.js diff --git a/admin/src/themes/overrides/Tabs.js b/admin/nextjs/src/themes/overrides/Tabs.js similarity index 100% rename from admin/src/themes/overrides/Tabs.js rename to admin/nextjs/src/themes/overrides/Tabs.js diff --git a/admin/src/themes/overrides/Tooltip.js b/admin/nextjs/src/themes/overrides/Tooltip.js similarity index 100% rename from admin/src/themes/overrides/Tooltip.js rename to admin/nextjs/src/themes/overrides/Tooltip.js diff --git a/admin/src/themes/overrides/index.js b/admin/nextjs/src/themes/overrides/index.js similarity index 100% rename from admin/src/themes/overrides/index.js rename to admin/nextjs/src/themes/overrides/index.js diff --git a/admin/src/themes/palette.js b/admin/nextjs/src/themes/palette.js similarity index 100% rename from admin/src/themes/palette.js rename to admin/nextjs/src/themes/palette.js diff --git a/admin/src/themes/shadow.js b/admin/nextjs/src/themes/shadow.js similarity index 100% rename from admin/src/themes/shadow.js rename to admin/nextjs/src/themes/shadow.js diff --git a/admin/src/themes/theme/README.md b/admin/nextjs/src/themes/theme/README.md similarity index 100% rename from admin/src/themes/theme/README.md rename to admin/nextjs/src/themes/theme/README.md diff --git a/admin/src/themes/typography.js b/admin/nextjs/src/themes/typography.js similarity index 100% rename from admin/src/themes/typography.js rename to admin/nextjs/src/themes/typography.js diff --git a/admin/src/utils/GetImagePath.jsx b/admin/nextjs/src/utils/GetImagePath.jsx similarity index 100% rename from admin/src/utils/GetImagePath.jsx rename to admin/nextjs/src/utils/GetImagePath.jsx diff --git a/admin/src/utils/generateFocusStyle.js b/admin/nextjs/src/utils/generateFocusStyle.js similarity index 100% rename from admin/src/utils/generateFocusStyle.js rename to admin/nextjs/src/utils/generateFocusStyle.js diff --git a/admin/src/utils/getRadiusStyles.js b/admin/nextjs/src/utils/getRadiusStyles.js similarity index 100% rename from admin/src/utils/getRadiusStyles.js rename to admin/nextjs/src/utils/getRadiusStyles.js diff --git a/admin/src/utils/validationSchema.js b/admin/nextjs/src/utils/validation-schema/common.js similarity index 69% rename from admin/src/utils/validationSchema.js rename to admin/nextjs/src/utils/validation-schema/common.js index a66a65b..5d85123 100644 --- a/admin/src/utils/validationSchema.js +++ b/admin/nextjs/src/utils/validation-schema/common.js @@ -42,7 +42,32 @@ export const lastNameSchema = { } }; +export const usernameSchema = { + required: 'Username is required', + pattern: { + value: /^[a-zA-Z0-9._]+$/, // Alphanumeric, underscores, and dots + message: 'Username can only contain letters, numbers, dots, and underscores' + }, + validate: { + trim: (value) => { + const trimmedValue = value.trim(); + return trimmedValue.length > 0 || 'Username cannot be empty or contain only spaces'; + }, + noSpaces: (value) => { + return !/\s/.test(value) || 'Username cannot contain spaces'; + } + }, + onBlur: (e) => { + e.target.value = e.target.value.trim(); + } +}; + export const contactSchema = { required: 'Contact number is required', pattern: { value: /^[0-9()\-\.]{7,15}$/, message: 'Invalid contact number' } }; + +export const otpSchema = { + required: 'OTP is required', + minLength: { value: 6, message: 'OTP must be exactly 6 characters' } +}; diff --git a/admin/src/views/admin/dashboard.jsx b/admin/nextjs/src/views/admin/dashboard.jsx similarity index 100% rename from admin/src/views/admin/dashboard.jsx rename to admin/nextjs/src/views/admin/dashboard.jsx diff --git a/admin/src/views/admin/sample-page.jsx b/admin/nextjs/src/views/admin/sample-page.jsx similarity index 100% rename from admin/src/views/admin/sample-page.jsx rename to admin/nextjs/src/views/admin/sample-page.jsx diff --git a/admin/src/views/auth/login.jsx b/admin/nextjs/src/views/auth/login.jsx similarity index 87% rename from admin/src/views/auth/login.jsx rename to admin/nextjs/src/views/auth/login.jsx index cc2d58c..12a929f 100644 --- a/admin/src/views/auth/login.jsx +++ b/admin/nextjs/src/views/auth/login.jsx @@ -40,7 +40,13 @@ export default function Login() { Don’t have an account?{' '} - + Sign Up diff --git a/admin/src/views/auth/register.jsx b/admin/nextjs/src/views/auth/register.jsx similarity index 95% rename from admin/src/views/auth/register.jsx rename to admin/nextjs/src/views/auth/register.jsx index e567db4..5e1908e 100644 --- a/admin/src/views/auth/register.jsx +++ b/admin/nextjs/src/views/auth/register.jsx @@ -41,7 +41,7 @@ export default function Register() { Already have an account?{' '} - + Sign In diff --git a/admin/src/views/components/utils/colors.jsx b/admin/nextjs/src/views/components/utils/colors.jsx similarity index 100% rename from admin/src/views/components/utils/colors.jsx rename to admin/nextjs/src/views/components/utils/colors.jsx diff --git a/admin/src/views/components/utils/shadow.jsx b/admin/nextjs/src/views/components/utils/shadow.jsx similarity index 100% rename from admin/src/views/components/utils/shadow.jsx rename to admin/nextjs/src/views/components/utils/shadow.jsx diff --git a/admin/src/views/components/utils/typography.jsx b/admin/nextjs/src/views/components/utils/typography.jsx similarity index 100% rename from admin/src/views/components/utils/typography.jsx rename to admin/nextjs/src/views/components/utils/typography.jsx diff --git a/admin/package.json b/admin/package.json deleted file mode 100644 index b95ad40..0000000 --- a/admin/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "saas-able-react-mui-admin-next-seed-js", - "version": "1.2.0", - "private": false, - "author": { - "email": "phoenixcoded@gmail.com", - "name": "phoenixcoded" - }, - "scripts": { - "dev": "next dev --turbopack", - "build": "next build", - "start": "next start", - "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", - "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", - "prettier": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", - "knip": "knip" - }, - "dependencies": { - "@emotion/cache": "11.14.0", - "@emotion/react": "11.14.0", - "@emotion/styled": "11.14.0", - "@mui/material": "7.0.2", - "@mui/material-nextjs": "7.0.2", - "@mui/x-charts": "7.28.0", - "@mui/x-date-pickers": "7.28.3", - "@tabler/icons-react": "3.31.0", - "lodash-es": "4.17.21", - "next": "15.3.0", - "notistack": "3.0.2", - "react": "19.1.0", - "react-device-detect": "2.2.3", - "react-dom": "19.1.0", - "react-hook-form": "7.55.0", - "simplebar-react": "3.3.0", - "stylis": "4.3.6", - "stylis-plugin-rtl": "2.1.1", - "swr": "2.3.3" - }, - "devDependencies": { - "@eslint/eslintrc": "3.3.1", - "@eslint/js": "9.24.0", - "eslint": "9.24.0", - "eslint-config-next": "15.3.0", - "eslint-config-prettier": "10.1.2", - "eslint-plugin-prettier": "5.2.6", - "knip": "5.50.4", - "prettier": "3.5.3" - } -} diff --git a/admin/src/data/countries.js b/admin/src/data/countries.js deleted file mode 100644 index 1fe84d6..0000000 --- a/admin/src/data/countries.js +++ /dev/null @@ -1,235 +0,0 @@ -/*************************** DATA - COUNTRIES ***************************/ - -const countries = [ - { countyCode: 'AD', name: 'Andorra', dialCode: '+376' }, - { countyCode: 'AE', name: 'United Arab Emirates', dialCode: '+971' }, - { countyCode: 'AF', name: 'Afghanistan', dialCode: '+93' }, - { countyCode: 'AG', name: 'Antigua and Barbuda', dialCode: '+1-268' }, - { countyCode: 'AI', name: 'Anguilla', dialCode: '+1-264' }, - { countyCode: 'AL', name: 'Albania', dialCode: '+355' }, - { countyCode: 'AM', name: 'Armenia', dialCode: '+374' }, - { countyCode: 'AO', name: 'Angola', dialCode: '+244' }, - { countyCode: 'AQ', name: 'Antarctica', dialCode: '+672' }, - { countyCode: 'AR', name: 'Argentina', dialCode: '+54' }, - { countyCode: 'AS', name: 'American Samoa', dialCode: '+1-684' }, - { countyCode: 'AT', name: 'Austria', dialCode: '+43' }, - { countyCode: 'AU', name: 'Australia', dialCode: '+61', suggested: true }, - { countyCode: 'AW', name: 'Aruba', dialCode: '+297' }, - { countyCode: 'AZ', name: 'Azerbaijan', dialCode: '+994' }, - { countyCode: 'BA', name: 'Bosnia and Herzegovina', dialCode: '+387' }, - { countyCode: 'BB', name: 'Barbados', dialCode: '+1-246' }, - { countyCode: 'BD', name: 'Bangladesh', dialCode: '+880' }, - { countyCode: 'BE', name: 'Belgium', dialCode: '+32' }, - { countyCode: 'BF', name: 'Burkina Faso', dialCode: '+226' }, - { countyCode: 'BG', name: 'Bulgaria', dialCode: '+359' }, - { countyCode: 'BH', name: 'Bahrain', dialCode: '+973' }, - { countyCode: 'BI', name: 'Burundi', dialCode: '+257' }, - { countyCode: 'BJ', name: 'Benin', dialCode: '+229' }, - { countyCode: 'BL', name: 'Saint Barthelemy', dialCode: '+590' }, - { countyCode: 'BM', name: 'Bermuda', dialCode: '+1-441' }, - { countyCode: 'BN', name: 'Brunei Darussalam', dialCode: '+673' }, - { countyCode: 'BO', name: 'Bolivia', dialCode: '+591' }, - { countyCode: 'BR', name: 'Brazil', dialCode: '+55' }, - { countyCode: 'BS', name: 'Bahamas', dialCode: '+1-242' }, - { countyCode: 'BT', name: 'Bhutan', dialCode: '+975' }, - { countyCode: 'BW', name: 'Botswana', dialCode: '+267' }, - { countyCode: 'BY', name: 'Belarus', dialCode: '+375' }, - { countyCode: 'BZ', name: 'Belize', dialCode: '+501' }, - { countyCode: 'CD', name: 'Congo', dialCode: '+243' }, - { countyCode: 'CF', name: 'Central African Republic', dialCode: '+236' }, - { countyCode: 'CG', name: 'Congo', dialCode: '+242' }, - { countyCode: 'CH', name: 'Switzerland', dialCode: '+41' }, - { countyCode: 'CI', name: "Cote d'Ivoire", dialCode: '+225' }, - { countyCode: 'CK', name: 'Cook Islands', dialCode: '+682' }, - { countyCode: 'CL', name: 'Chile', dialCode: '+56' }, - { countyCode: 'CM', name: 'Cameroon', dialCode: '+237' }, - { countyCode: 'CN', name: 'China', dialCode: '+86' }, - { countyCode: 'CO', name: 'Colombia', dialCode: '+57' }, - { countyCode: 'CR', name: 'Costa Rica', dialCode: '+506' }, - { countyCode: 'CU', name: 'Cuba', dialCode: '+53' }, - { countyCode: 'CV', name: 'Cape Verde', dialCode: '+238' }, - { countyCode: 'CW', name: 'Curacao', dialCode: '+599' }, - { countyCode: 'CY', name: 'Cyprus', dialCode: '+357' }, - { countyCode: 'CZ', name: 'Czech Republic', dialCode: '+420' }, - { countyCode: 'DE', name: 'Germany', dialCode: '+49', suggested: true }, - { countyCode: 'DJ', name: 'Djibouti', dialCode: '+253' }, - { countyCode: 'DK', name: 'Denmark', dialCode: '+45' }, - { countyCode: 'DM', name: 'Dominica', dialCode: '+1-767' }, - { countyCode: 'DO', name: 'Dominican Republic', dialCode: '+1-809' }, - { countyCode: 'DZ', name: 'Algeria', dialCode: '+213' }, - { countyCode: 'EC', name: 'Ecuador', dialCode: '+593' }, - { countyCode: 'EE', name: 'Estonia', dialCode: '+372' }, - { countyCode: 'EG', name: 'Egypt', dialCode: '+20' }, - { countyCode: 'ER', name: 'Eritrea', dialCode: '+291' }, - { countyCode: 'ES', name: 'Spain', dialCode: '+34' }, - { countyCode: 'ET', name: 'Ethiopia', dialCode: '+251' }, - { countyCode: 'FI', name: 'Finland', dialCode: '+358' }, - { countyCode: 'FJ', name: 'Fiji', dialCode: '+679' }, - { countyCode: 'FK', name: 'Falkland Islands (Malvinas)', dialCode: '+500' }, - { countyCode: 'FM', name: 'Micronesia', dialCode: '+691' }, - { countyCode: 'FO', name: 'Faroe Islands', dialCode: '+298' }, - { countyCode: 'FR', name: 'France', dialCode: '+33', suggested: true }, - { countyCode: 'GA', name: 'Gabon', dialCode: '+241' }, - { countyCode: 'GB', name: 'United Kingdom', dialCode: '+44' }, - { countyCode: 'GD', name: 'Grenada', dialCode: '+1-473' }, - { countyCode: 'GE', name: 'Georgia', dialCode: '+995' }, - { countyCode: 'GF', name: 'French Guiana', dialCode: '+594' }, - { countyCode: 'GH', name: 'Ghana', dialCode: '+233' }, - { countyCode: 'GI', name: 'Gibraltar', dialCode: '+350' }, - { countyCode: 'GL', name: 'Greenland', dialCode: '+299' }, - { countyCode: 'GM', name: 'Gambia', dialCode: '+220' }, - { countyCode: 'GN', name: 'Guinea', dialCode: '+224' }, - { countyCode: 'GQ', name: 'Equatorial Guinea', dialCode: '+240' }, - { countyCode: 'GR', name: 'Greece', dialCode: '+30' }, - { countyCode: 'GT', name: 'Guatemala', dialCode: '+502' }, - { countyCode: 'GU', name: 'Guam', dialCode: '+1-671' }, - { countyCode: 'GW', name: 'Guinea-Bissau', dialCode: '+245' }, - { countyCode: 'GY', name: 'Guyana', dialCode: '+592' }, - { countyCode: 'HK', name: 'Hong Kong', dialCode: '+852' }, - { countyCode: 'HN', name: 'Honduras', dialCode: '+504' }, - { countyCode: 'HR', name: 'Croatia', dialCode: '+385' }, - { countyCode: 'HT', name: 'Haiti', dialCode: '+509' }, - { countyCode: 'HU', name: 'Hungary', dialCode: '3+6' }, - { countyCode: 'ID', name: 'Indonesia', dialCode: '+62' }, - { countyCode: 'IE', name: 'Ireland', dialCode: '+353' }, - { countyCode: 'IL', name: 'Israel', dialCode: '+972' }, - { countyCode: 'IN', name: 'India', dialCode: '+91' }, - { countyCode: 'IO', name: 'British Indian Ocean Territory', dialCode: '+246' }, - { countyCode: 'IQ', name: 'Iraq', dialCode: '+964' }, - { countyCode: 'IR', name: 'Iran', dialCode: '+98' }, - { countyCode: 'IS', name: 'Iceland', dialCode: '+354' }, - { countyCode: 'IT', name: 'Italy', dialCode: '+39' }, - { countyCode: 'JM', name: 'Jamaica', dialCode: '+1-876' }, - { countyCode: 'JO', name: 'Jordan', dialCode: '+962' }, - { countyCode: 'JP', name: 'Japan', dialCode: '+81', suggested: true }, - { countyCode: 'KE', name: 'Kenya', dialCode: '+254' }, - { countyCode: 'KG', name: 'Kyrgyzstan', dialCode: '+996' }, - { countyCode: 'KH', name: 'Cambodia', dialCode: '+855' }, - { countyCode: 'KI', name: 'Kiribati', dialCode: '+686' }, - { countyCode: 'KM', name: 'Comoros', dialCode: '+269' }, - { countyCode: 'KN', name: 'Saint Kitts and Nevis', dialCode: '+1-869' }, - { countyCode: 'KP', name: 'Korea', dialCode: '+850' }, - { countyCode: 'KR', name: 'Korea', dialCode: '+82' }, - { countyCode: 'KW', name: 'Kuwait', dialCode: '+965' }, - { countyCode: 'KY', name: 'Cayman Islands', dialCode: '+1-345' }, - { countyCode: 'LA', name: "Lao People's Democratic Republic", dialCode: '+856' }, - { countyCode: 'LB', name: 'Lebanon', dialCode: '+961' }, - { countyCode: 'LC', name: 'Saint Lucia', dialCode: '+1-758' }, - { countyCode: 'LI', name: 'Liechtenstein', dialCode: '+423' }, - { countyCode: 'LK', name: 'Sri Lanka', dialCode: '+94' }, - { countyCode: 'LR', name: 'Liberia', dialCode: '+231' }, - { countyCode: 'LS', name: 'Lesotho', dialCode: '+266' }, - { countyCode: 'LT', name: 'Lithuania', dialCode: '+370' }, - { countyCode: 'LU', name: 'Luxembourg', dialCode: '+352' }, - { countyCode: 'LV', name: 'Latvia', dialCode: '+371' }, - { countyCode: 'LY', name: 'Libya', dialCode: '+218' }, - { countyCode: 'MA', name: 'Morocco', dialCode: '+212' }, - { countyCode: 'MC', name: 'Monaco', dialCode: '+377' }, - { countyCode: 'MD', name: 'Moldova', dialCode: '+373' }, - { countyCode: 'ME', name: 'Montenegro', dialCode: '+382' }, - { countyCode: 'MG', name: 'Madagascar', dialCode: '+261' }, - { countyCode: 'MH', name: 'Marshall Islands', dialCode: '+692' }, - { countyCode: 'MK', name: 'Macedonia', dialCode: '+389' }, - { countyCode: 'ML', name: 'Mali', dialCode: '+223' }, - { countyCode: 'MM', name: 'Myanmar', dialCode: '+95' }, - { countyCode: 'MN', name: 'Mongolia', dialCode: '+976' }, - { countyCode: 'MO', name: 'Macao', dialCode: '+853' }, - { countyCode: 'MP', name: 'Northern Mariana Islands', dialCode: '+1-670' }, - { countyCode: 'MQ', name: 'Martinique', dialCode: '+596' }, - { countyCode: 'MR', name: 'Mauritania', dialCode: '+222' }, - { countyCode: 'MS', name: 'Montserrat', dialCode: '+1-664' }, - { countyCode: 'MT', name: 'Malta', dialCode: '+356' }, - { countyCode: 'MU', name: 'Mauritius', dialCode: '+230' }, - { countyCode: 'MV', name: 'Maldives', dialCode: '+960' }, - { countyCode: 'MW', name: 'Malawi', dialCode: '+265' }, - { countyCode: 'MX', name: 'Mexico', dialCode: '+52' }, - { countyCode: 'MY', name: 'Malaysia', dialCode: '+60' }, - { countyCode: 'MZ', name: 'Mozambique', dialCode: '+258' }, - { countyCode: 'NA', name: 'Namibia', dialCode: '+264' }, - { countyCode: 'NC', name: 'New Caledonia', dialCode: '+687' }, - { countyCode: 'NE', name: 'Niger', dialCode: '+227' }, - { countyCode: 'NG', name: 'Nigeria', dialCode: '+234' }, - { countyCode: 'NI', name: 'Nicaragua', dialCode: '+505' }, - { countyCode: 'NL', name: 'Netherlands', dialCode: '+31' }, - { countyCode: 'NO', name: 'Norway', dialCode: '+47' }, - { countyCode: 'NP', name: 'Nepal', dialCode: '+977' }, - { countyCode: 'NR', name: 'Nauru', dialCode: '+674' }, - { countyCode: 'NU', name: 'Niue', dialCode: '+683' }, - { countyCode: 'NZ', name: 'New Zealand', dialCode: '+64' }, - { countyCode: 'OM', name: 'Oman', dialCode: '+968' }, - { countyCode: 'PA', name: 'Panama', dialCode: '+507' }, - { countyCode: 'PE', name: 'Peru', dialCode: '+51' }, - { countyCode: 'PF', name: 'French Polynesia', dialCode: '+689' }, - { countyCode: 'PG', name: 'Papua New Guinea', dialCode: '+675' }, - { countyCode: 'PH', name: 'Philippines', dialCode: '+63' }, - { countyCode: 'PK', name: 'Pakistan', dialCode: '+92' }, - { countyCode: 'PL', name: 'Poland', dialCode: '+48' }, - { countyCode: 'PM', name: 'Saint Pierre and Miquelon', dialCode: '+508' }, - { countyCode: 'PN', name: 'Pitcairn', dialCode: '+870' }, - { countyCode: 'PS', name: 'Palestine', dialCode: '+970' }, - { countyCode: 'PT', name: 'Portugal', dialCode: '+351' }, - { countyCode: 'PW', name: 'Palau', dialCode: '+680' }, - { countyCode: 'PY', name: 'Paraguay', dialCode: '+595' }, - { countyCode: 'QA', name: 'Qatar', dialCode: '+974' }, - { countyCode: 'RO', name: 'Romania', dialCode: '+40' }, - { countyCode: 'RS', name: 'Serbia', dialCode: '+381' }, - { countyCode: 'RU', name: 'Russian Federation', dialCode: '+7' }, - { countyCode: 'RW', name: 'Rwanda', dialCode: '+250' }, - { countyCode: 'SA', name: 'Saudi Arabia', dialCode: '+966' }, - { countyCode: 'SB', name: 'Solomon Islands', dialCode: '+677' }, - { countyCode: 'SC', name: 'Seychelles', dialCode: '+248' }, - { countyCode: 'SD', name: 'Sudan', dialCode: '+249' }, - { countyCode: 'SE', name: 'Sweden', dialCode: '+46' }, - { countyCode: 'SG', name: 'Singapore', dialCode: '+65' }, - { countyCode: 'SH', name: 'Saint Helena', dialCode: '+290' }, - { countyCode: 'SI', name: 'Slovenia', dialCode: '+386' }, - { countyCode: 'SK', name: 'Slovakia', dialCode: '+421' }, - { countyCode: 'SL', name: 'Sierra Leone', dialCode: '+232' }, - { countyCode: 'SM', name: 'San Marino', dialCode: '+378' }, - { countyCode: 'SN', name: 'Senegal', dialCode: '+221' }, - { countyCode: 'SO', name: 'Somalia', dialCode: '+252' }, - { countyCode: 'SR', name: 'Suriname', dialCode: '+597' }, - { countyCode: 'SS', name: 'South Sudan', dialCode: '+211' }, - { countyCode: 'ST', name: 'Sao Tome and Principe', dialCode: '+239' }, - { countyCode: 'SV', name: 'El Salvador', dialCode: '+503' }, - { countyCode: 'SX', name: 'Sint Maarten (Dutch part)', dialCode: '+1-721' }, - { countyCode: 'SY', name: 'Syrian Arab Republic', dialCode: '+963' }, - { countyCode: 'SZ', name: 'Swaziland', dialCode: '+268' }, - { countyCode: 'TC', name: 'Turks and Caicos Islands', dialCode: '+1-649' }, - { countyCode: 'TD', name: 'Chad', dialCode: '+235' }, - { countyCode: 'TG', name: 'Togo', dialCode: '+228' }, - { countyCode: 'TH', name: 'Thailand', dialCode: '+66' }, - { countyCode: 'TJ', name: 'Tajikistan', dialCode: '+992' }, - { countyCode: 'TK', name: 'Tokelau', dialCode: '+690' }, - { countyCode: 'TL', name: 'Timor-Leste', dialCode: '+670' }, - { countyCode: 'TM', name: 'Turkmenistan', dialCode: '+993' }, - { countyCode: 'TN', name: 'Tunisia', dialCode: '+216' }, - { countyCode: 'TO', name: 'Tonga', dialCode: '+676' }, - { countyCode: 'TR', name: 'Turkey', dialCode: '+90' }, - { countyCode: 'TT', name: 'Trinidad and Tobago', dialCode: '+1-868' }, - { countyCode: 'TV', name: 'Tuvalu', dialCode: '+688' }, - { countyCode: 'TW', name: 'Taiwan', dialCode: '+886' }, - { countyCode: 'TZ', name: 'United Republic of Tanzania', dialCode: '+255' }, - { countyCode: 'UA', name: 'Ukraine', dialCode: '+380' }, - { countyCode: 'UG', name: 'Uganda', dialCode: '+256' }, - { countyCode: 'US', name: 'United States', dialCode: '+1', suggested: true }, - { countyCode: 'UY', name: 'Uruguay', dialCode: '+598' }, - { countyCode: 'UZ', name: 'Uzbekistan', dialCode: '+998' }, - { countyCode: 'VA', name: 'Holy See (Vatican City State)', dialCode: '+379' }, - { countyCode: 'VC', name: 'Saint Vincent and the Grenadines', dialCode: '+1-784' }, - { countyCode: 'VE', name: 'Venezuela', dialCode: '+58' }, - { countyCode: 'VG', name: 'British Virgin Islands', dialCode: '+1-284' }, - { countyCode: 'VI', name: 'US Virgin Islands', dialCode: '+1-340' }, - { countyCode: 'VN', name: 'Vietnam', dialCode: '+84' }, - { countyCode: 'VU', name: 'Vanuatu', dialCode: '+678' }, - { countyCode: 'WF', name: 'Wallis and Futuna', dialCode: '+681' }, - { countyCode: 'WS', name: 'Samoa', dialCode: '+685' }, - { countyCode: 'XK', name: 'Kosovo', dialCode: '+383' }, - { countyCode: 'YE', name: 'Yemen', dialCode: '+967' }, - { countyCode: 'YT', name: 'Mayotte', dialCode: '+262' }, - { countyCode: 'ZA', name: 'South Africa', dialCode: '+27' }, - { countyCode: 'ZM', name: 'Zambia', dialCode: '+260' }, - { countyCode: 'ZW', name: 'Zimbabwe', dialCode: '+263' } -]; - -export default countries; diff --git a/admin/vite/.env b/admin/vite/.env new file mode 100644 index 0000000..6548ee8 --- /dev/null +++ b/admin/vite/.env @@ -0,0 +1,7 @@ +## Version +VITE_APP_VERSION=v1.3.0 + +## Public URL +VITE_APP_BASE_URL= / +VITE_APP_API_HOST= + diff --git a/admin/vite/.gitignore b/admin/vite/.gitignore new file mode 100644 index 0000000..3374670 --- /dev/null +++ b/admin/vite/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* +.yarn + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +!package-lock.json \ No newline at end of file diff --git a/admin/vite/.prettierrc b/admin/vite/.prettierrc new file mode 100644 index 0000000..b5cde33 --- /dev/null +++ b/admin/vite/.prettierrc @@ -0,0 +1,9 @@ +{ + "bracketSpacing": true, + "printWidth": 140, + "singleQuote": true, + "trailingComma": "none", + "tabWidth": 2, + "useTabs": false, + "endOfLine": "lf" +} diff --git a/admin/vite/README.md b/admin/vite/README.md new file mode 100644 index 0000000..1b46b18 --- /dev/null +++ b/admin/vite/README.md @@ -0,0 +1,15 @@ +## Get Started + +SaasAble offers both a full version and a seed version. The seed version contains minimal code, making it a great starting point for your project. You can then migrate specific features or changes from the full version as needed. We recommend beginning with the seed version for a more streamlined setup + +1. Run `npm i` +2. Run `npm run start` +3. See the live preview in the local + +## Documentation + +To know about directory structure, routing, setup, theming, and many more, detailed documentation is available here: [Documentation](https://phoenixcoded.gitbook.io/saasable). + +## Supports + +If you still have any doubts, feel free to reach us here: [Support](https://support.phoenixcoded.net/). Please check this documentation before contacting support: [Support Documentation](https://phoenixcoded.gitbook.io/saasable/support). diff --git a/admin/vite/eslint.config.mjs b/admin/vite/eslint.config.mjs new file mode 100644 index 0000000..86914b3 --- /dev/null +++ b/admin/vite/eslint.config.mjs @@ -0,0 +1,89 @@ +import { fixupConfigRules } from '@eslint/compat'; +import prettier from 'eslint-plugin-prettier'; +import react from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +import jsxA11y from 'eslint-plugin-jsx-a11y'; +import js from '@eslint/js'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { FlatCompat } from '@eslint/eslintrc'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [ + ...fixupConfigRules(compat.extends('prettier')), + + { + plugins: { + prettier, + react, + 'react-hooks': reactHooks, + 'jsx-a11y': jsxA11y + }, + + languageOptions: { + ecmaVersion: 2020, + sourceType: 'module', + parserOptions: { + ecmaFeatures: { + jsx: true + } + } + }, + + settings: { + react: { + version: 'detect' + } + }, + + rules: { + 'react/jsx-filename-extension': 'off', + 'no-param-reassign': 'off', + 'react/prop-types': 'off', + 'react/require-default-props': 'off', + 'react/no-array-index-key': 'off', + 'react/react-in-jsx-scope': 'off', + 'react/jsx-props-no-spreading': 'off', + 'import/order': 'off', + 'no-console': 'off', + 'no-shadow': 'off', + 'import/no-cycle': 'off', + 'import/no-extraneous-dependencies': 'off', + 'jsx-a11y/label-has-associated-control': 'off', + 'jsx-a11y/no-autofocus': 'off', + 'react/jsx-uses-react': 'off', + 'react/jsx-uses-vars': 'error', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + 'no-unused-vars': 'off', + + 'no-restricted-imports': [ + 'error', + { + patterns: ['@mui/*/*/*', '!@mui/material/test-utils/*'] + } + ], + + 'no-unused-vars': [ + 'error', + { + vars: 'all', + args: 'none' + } + ], + + 'prettier/prettier': 'warn' + } + }, + { + ignores: ['node_modules/**'], + files: ['src/**/*.{js,jsx}'] + } +]; diff --git a/admin/vite/index.html b/admin/vite/index.html new file mode 100644 index 0000000..716f3ca --- /dev/null +++ b/admin/vite/index.html @@ -0,0 +1,14 @@ + + + + + + + + SaasAble React MUI Dashboard Template + + +
+ + + diff --git a/admin/vite/jsconfig.json b/admin/vite/jsconfig.json new file mode 100644 index 0000000..bb3515d --- /dev/null +++ b/admin/vite/jsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "eslint.config.mjs"], + "include": ["src", "**/*.js", "**/*.jsx", "src/**/*"], + "references": [{ "path": "./jsconfig.node.json" }] +} diff --git a/admin/vite/jsconfig.node.json b/admin/vite/jsconfig.node.json new file mode 100644 index 0000000..b20dc89 --- /dev/null +++ b/admin/vite/jsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.mjs"] +} \ No newline at end of file diff --git a/admin/vite/package-lock.json b/admin/vite/package-lock.json new file mode 100644 index 0000000..160bbb1 --- /dev/null +++ b/admin/vite/package-lock.json @@ -0,0 +1,6677 @@ +{ + "name": "saas-able-react-mui-admin-vite-free", + "version": "1.3.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "saas-able-react-mui-admin-vite-free", + "version": "1.3.0", + "dependencies": { + "@emotion/cache": "11.14.0", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.1", + "@fontsource/archivo": "5.2.6", + "@fontsource/figtree": "5.2.8", + "@fontsource/roboto": "5.2.6", + "@mui/material": "7.2.0", + "@mui/x-charts": "8.9.0", + "@tabler/icons-react": "3.34.1", + "@tanstack/react-table": "8.21.3", + "lodash-es": "4.17.21", + "notistack": "3.0.2", + "react": "19.1.0", + "react-device-detect": "2.2.3", + "react-dom": "19.1.0", + "react-hook-form": "7.61.0", + "react-router-dom": "7.6.0", + "simplebar-react": "3.3.2", + "stylis": "4.3.6", + "stylis-plugin-rtl": "2.1.1", + "swr": "2.3.4", + "vite-jsconfig-paths": "2.0.1" + }, + "devDependencies": { + "@eslint/compat": "1.3.1", + "@eslint/eslintrc": "3.3.1", + "@eslint/js": "9.32.0", + "@vitejs/plugin-react": "4.7.0", + "eslint": "9.32.0", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-prettier": "5.5.3", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-react-hooks": "5.2.0", + "eslint-plugin-react-refresh": "0.4.20", + "globals": "16.3.0", + "prettier": "3.6.2", + "vite": "7.0.6" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cush/relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cush/relative/-/relative-1.0.0.tgz", + "integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==", + "license": "MIT" + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "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==", + "license": "MIT" + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "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==", + "license": "MIT" + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/compat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.1.tgz", + "integrity": "sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.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": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fontsource/archivo": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/archivo/-/archivo-5.2.6.tgz", + "integrity": "sha512-xUc6Rzf1pW5NFsUDkasAVi0Wdo9k1p68NB5FHd2gFESPLQhv21OFIZPE3DOAgwfWSyO2E0lZf1zEKdZXd2ppxA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/figtree": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/figtree/-/figtree-5.2.8.tgz", + "integrity": "sha512-FC+t9RSdZDUK402+h+D7kKBXEo1L5xw/ff8SpTo9ZO0xHzqFJ0u78PmNyAju5D77oXPsR3wfs+rjZvWPx4diSA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/roboto": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-5.2.6.tgz", + "integrity": "sha512-hzarG7yAhMoP418smNgfY4fO7UmuUEm5JUtbxCoCcFHT0hOJB+d/qAEyoNjz7YkPU5OjM2LM8rJnW8hfm0JLaA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.1.tgz", + "integrity": "sha512-+mIK1Z0BhOaQ0vCgOkT1mSrIpEHLo338h4/duuL4TBLXPvUMit732mnwJY3W40Avy30HdeSfwUAAGRkKmwRaEQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/material": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz", + "integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/core-downloads-tracker": "^7.2.0", + "@mui/system": "^7.2.0", + "@mui/types": "^7.4.4", + "@mui/utils": "^7.2.0", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.1.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^7.2.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.1.tgz", + "integrity": "sha512-WU3YLkKXii/x8ZEKnrLKsPwplCVE11yZxUvlaaZSIzCcI3x2OdFC8eMlNy74hVeUsYQvzzX1Es/k4ARPlFvpPQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.2", + "@mui/utils": "^7.3.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.1.tgz", + "integrity": "sha512-Nqo6OHjvJpXJ1+9TekTE//+8RybgPQUKwns2Lh0sq+8rJOUSUKS3KALv4InSOdHhIM9Mdi8/L7LTF1/Ky6D6TQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.2", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.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 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.1.tgz", + "integrity": "sha512-mIidecvcNVpNJMdPDmCeoSL5zshKBbYPcphjuh6ZMjhybhqhZ4mX6k9zmIWh6XOXcqRQMg5KrcjnO0QstrNj3w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.2", + "@mui/private-theming": "^7.3.1", + "@mui/styled-engine": "^7.3.1", + "@mui/types": "^7.4.5", + "@mui/utils": "^7.3.1", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.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 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.5.tgz", + "integrity": "sha512-ZPwlAOE3e8C0piCKbaabwrqZbW4QvWz0uapVPWya7fYj6PeDkl5sSJmomT7wjOcZGPB48G/a6Ubidqreptxz4g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.2" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-/31y4wZqVWa0jzMnzo6JPjxwP6xXy4P3+iLbosFg/mJQowL1KIou0LC+lquWW60FKVbKz5ZUWBg2H3jausa0pw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.2", + "@mui/types": "^7.4.5", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/x-charts": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-8.9.0.tgz", + "integrity": "sha512-FQEjlVa285/WUTTuS84v4Nvj0OXQz1oxOl1ommhn6xbIilQXMOesAA4iFFYVz1ZBsywopVsWqwPSLgmkpWrzHg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.2.0", + "@mui/x-charts-vendor": "8.6.0", + "@mui/x-internal-gestures": "0.2.1", + "@mui/x-internals": "8.8.0", + "bezier-easing": "^2.1.0", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-charts-vendor": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-8.6.0.tgz", + "integrity": "sha512-TTtfhxXuwtoZfyno7+4y3ZhZeFqavFJecWbteLEby0lFqALWB9GGJpkc1TIHWr3GkWE5UHEbdADZ0pfrPenezA==", + "license": "MIT AND ISC", + "dependencies": { + "@babel/runtime": "^7.27.6", + "@types/d3-color": "^3.1.3", + "@types/d3-delaunay": "^6.0.4", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-scale": "^4.0.9", + "@types/d3-shape": "^3.1.7", + "@types/d3-time": "^3.0.4", + "@types/d3-timer": "^3.0.2", + "d3-color": "^3.1.0", + "d3-delaunay": "^6.0.4", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.2.0", + "d3-time": "^3.1.0", + "d3-timer": "^3.0.1", + "delaunator": "^5.0.1", + "robust-predicates": "^3.0.2" + } + }, + "node_modules/@mui/x-internal-gestures": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mui/x-internal-gestures/-/x-internal-gestures-0.2.1.tgz", + "integrity": "sha512-7Po6F4/RdUrFyRwiwvh5ZNeY/bi8wavTCUe+stKAyMliKpgcYiEtH7ywTgroOEq0o56fIpyPzwC4+bbGwYFnvA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6" + } + }, + "node_modules/@mui/x-internals": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.8.0.tgz", + "integrity": "sha512-qTRK5oINkAjZ7sIHpSnESLNq1xtQUmmfmGscYUSEP0uHoYh6pKkNWH9+7yzggRHuTv+4011VBwN9s+efrk+xZg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.2.0", + "reselect": "^5.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tabler/icons": { + "version": "3.34.1", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.34.1.tgz", + "integrity": "sha512-9gTnUvd7Fd/DmQgr3MKY+oJLa1RfNsQo8c/ir3TJAWghOuZXodbtbVp0QBY2DxWuuvrSZFys0HEbv1CoiI5y6A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "3.34.1", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.34.1.tgz", + "integrity": "sha512-Ld6g0NqOO05kyyHsfU8h787PdHBm7cFmOycQSIrGp45XcXYDuOK2Bs0VC4T2FWSKZ6bx5g04imfzazf/nqtk1A==", + "license": "MIT", + "dependencies": { + "@tabler/icons": "3.34.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": ">= 16" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", + "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "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, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001734", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", + "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssjanus": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssjanus/-/cssjanus-2.3.0.tgz", + "integrity": "sha512-ZZXXn51SnxRxAZ6fdY7mBDPmA4OZd83q/J9Gdqz3YmE9TUq+9tZl+tdOnCi7PpNygI6PEkehj9rgifv5+W8a5A==", + "license": "Apache-2.0", + "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==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/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, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.200", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", + "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", + "dev": true, + "license": "ISC" + }, + "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==", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-regex": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz", + "integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "license": "MIT" + }, + "node_modules/goober": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz", + "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/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==", + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=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, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/notistack": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/notistack/-/notistack-3.0.2.tgz", + "integrity": "sha512-0R+/arLYbK5Hh7mEfR2adt0tyXJcCC9KkA2hc56FeWik2QN6Bm/S4uW+BjzDARsJth5u06nTjelSw/VSnB1YEA==", + "license": "MIT", + "dependencies": { + "clsx": "^1.1.0", + "goober": "^2.0.33" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/notistack" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/notistack/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-device-detect": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.3.tgz", + "integrity": "sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw==", + "license": "MIT", + "dependencies": { + "ua-parser-js": "^1.0.33" + }, + "peerDependencies": { + "react": ">= 0.14.0", + "react-dom": ">= 0.14.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.61.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.0.tgz", + "integrity": "sha512-o8S/HcCeuaAQVib36fPCgOLaaQN/v7Anj8zlYjcLMcz+4FnNfMsoDAEvVCefLb3KDnS43wq3pwcifehhkwowuQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz", + "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.0.tgz", + "integrity": "sha512-GGufuHIVCJDbnIAXP3P9Sxzq3UUsddG3rrI3ut1q6m0FI6vxVBF3JoPQ38+W/blslLH4a5Yutp8drkEpXoddGQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.0.tgz", + "integrity": "sha512-DYgm6RDEuKdopSyGOWZGtDfSm7Aofb8CCzgkliTjtu/eDuB0gcsv6qdFhhi8HdtmA+KHkt5MfZ5K2PdzjugYsA==", + "license": "MIT", + "dependencies": { + "react-router": "7.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/recrawl-sync": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.3.tgz", + "integrity": "sha512-vSaTR9t+cpxlskkdUFrsEpnf67kSmPk66yAGT1fZPrDudxQjoMzPgQhSMImQ0pAw5k0NPirefQfhopSjhdUtpQ==", + "license": "MIT", + "dependencies": { + "@cush/relative": "^1.0.0", + "glob-regex": "^0.3.0", + "slash": "^3.0.0", + "sucrase": "^3.20.3", + "tslib": "^1.9.3" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, + "node_modules/rollup": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simplebar-core": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.2.tgz", + "integrity": "sha512-qKgTTuTqapjsFGkNhCjyPhysnbZGpQqNmjk0nOYjFN5ordC/Wjvg+RbYCyMSnW60l/Z0ZS82GbNltly6PMUH1w==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, + "node_modules/simplebar-react": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/simplebar-react/-/simplebar-react-3.3.2.tgz", + "integrity": "sha512-ZsgcQhKLtt5ra0BRIJeApfkTBQCa1vUPA/WXI4HcYReFt+oCEOvdVz6rR/XsGJcKxTlCRPmdGx1uJIUChupo+A==", + "license": "MIT", + "dependencies": { + "simplebar-core": "^1.3.2" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "cssjanus": "^2.0.1" + }, + "peerDependencies": { + "stylis": "4.x" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swr": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.4.tgz", + "integrity": "sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/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==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vite": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-jsconfig-paths": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vite-jsconfig-paths/-/vite-jsconfig-paths-2.0.1.tgz", + "integrity": "sha512-rabcTTfKs0MdAsQWcZjbIMo5fcp6jthZce7uFEPgVPgpSY+RNOwjzIJOPES6cB/GJZLSoLGfHM9kt5HNmJvp7A==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "recrawl-sync": "^2.0.3", + "tsconfig-paths": "^3.9.0" + }, + "peerDependencies": { + "vite": ">2.0.0-0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/admin/vite/package.json b/admin/vite/package.json new file mode 100644 index 0000000..834a38f --- /dev/null +++ b/admin/vite/package.json @@ -0,0 +1,59 @@ +{ + "name": "saas-able-react-mui-admin-vite-free", + "private": false, + "version": "1.3.0", + "author": { + "email": "phoenixcoded@gmail.com", + "name": "phoenixcoded" + }, + "type": "module", + "scripts": { + "start": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", + "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", + "prettier": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"" + }, + "dependencies": { + "@emotion/cache": "11.14.0", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.1", + "@fontsource/archivo": "5.2.6", + "@fontsource/figtree": "5.2.8", + "@fontsource/roboto": "5.2.6", + "@mui/material": "7.2.0", + "@mui/x-charts": "8.9.0", + "@tabler/icons-react": "3.34.1", + "@tanstack/react-table": "8.21.3", + "lodash-es": "4.17.21", + "notistack": "3.0.2", + "react": "19.1.0", + "react-device-detect": "2.2.3", + "react-dom": "19.1.0", + "react-hook-form": "7.61.0", + "react-router-dom": "7.6.0", + "simplebar-react": "3.3.2", + "stylis": "4.3.6", + "stylis-plugin-rtl": "2.1.1", + "swr": "2.3.4", + "vite-jsconfig-paths": "2.0.1" + }, + "devDependencies": { + "@eslint/compat": "1.3.1", + "@eslint/eslintrc": "3.3.1", + "@eslint/js": "9.32.0", + "@vitejs/plugin-react": "4.7.0", + "eslint": "9.32.0", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-prettier": "5.5.3", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-react-hooks": "5.2.0", + "eslint-plugin-react-refresh": "0.4.20", + "globals": "16.3.0", + "prettier": "3.6.2", + "vite": "7.0.6" + }, + "resolutions": {} +} diff --git a/admin/vite/public/favicon.svg b/admin/vite/public/favicon.svg new file mode 100644 index 0000000..fe8f414 --- /dev/null +++ b/admin/vite/public/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/admin/vite/src/App.jsx b/admin/vite/src/App.jsx new file mode 100644 index 0000000..8d96dd7 --- /dev/null +++ b/admin/vite/src/App.jsx @@ -0,0 +1,24 @@ +import { RouterProvider } from 'react-router-dom'; + +// @project +import Notistack from '@/components/third-party/Notistack'; +import { ConfigProvider } from '@/contexts/ConfigContext'; + +import router from '@/routes'; +import ThemeCustomization from '@/themes'; + +function App() { + return ( + <> + + + + + + + + + ); +} + +export default App; diff --git a/admin/vite/src/assets/images/blog/1.jpg b/admin/vite/src/assets/images/blog/1.jpg new file mode 100644 index 0000000..2de75b8 Binary files /dev/null and b/admin/vite/src/assets/images/blog/1.jpg differ diff --git a/admin/vite/src/assets/images/blog/2.jpg b/admin/vite/src/assets/images/blog/2.jpg new file mode 100644 index 0000000..779229a Binary files /dev/null and b/admin/vite/src/assets/images/blog/2.jpg differ diff --git a/admin/vite/src/assets/images/blog/3.jpg b/admin/vite/src/assets/images/blog/3.jpg new file mode 100644 index 0000000..2790769 Binary files /dev/null and b/admin/vite/src/assets/images/blog/3.jpg differ diff --git a/admin/vite/src/assets/images/blog/4.jpg b/admin/vite/src/assets/images/blog/4.jpg new file mode 100644 index 0000000..d87488f Binary files /dev/null and b/admin/vite/src/assets/images/blog/4.jpg differ diff --git a/admin/vite/src/assets/images/blog/5.jpg b/admin/vite/src/assets/images/blog/5.jpg new file mode 100644 index 0000000..2536de4 Binary files /dev/null and b/admin/vite/src/assets/images/blog/5.jpg differ diff --git a/admin/vite/src/assets/images/blog/6.jpg b/admin/vite/src/assets/images/blog/6.jpg new file mode 100644 index 0000000..075b7ce Binary files /dev/null and b/admin/vite/src/assets/images/blog/6.jpg differ diff --git a/admin/vite/src/assets/images/blog/7.jpg b/admin/vite/src/assets/images/blog/7.jpg new file mode 100644 index 0000000..538714e Binary files /dev/null and b/admin/vite/src/assets/images/blog/7.jpg differ diff --git a/admin/vite/src/assets/images/blog/8.jpg b/admin/vite/src/assets/images/blog/8.jpg new file mode 100644 index 0000000..a38cf57 Binary files /dev/null and b/admin/vite/src/assets/images/blog/8.jpg differ diff --git a/admin/vite/src/assets/images/cards/poster.png b/admin/vite/src/assets/images/cards/poster.png new file mode 100644 index 0000000..fc68b34 Binary files /dev/null and b/admin/vite/src/assets/images/cards/poster.png differ diff --git a/admin/vite/src/assets/images/components/fullscreen.webp b/admin/vite/src/assets/images/components/fullscreen.webp new file mode 100644 index 0000000..cbd2632 Binary files /dev/null and b/admin/vite/src/assets/images/components/fullscreen.webp differ diff --git a/admin/vite/src/assets/images/graphics/hosting/dashboard-dark.svg b/admin/vite/src/assets/images/graphics/hosting/dashboard-dark.svg new file mode 100644 index 0000000..1e6c307 --- /dev/null +++ b/admin/vite/src/assets/images/graphics/hosting/dashboard-dark.svg @@ -0,0 +1,472 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/vite/src/assets/images/graphics/hosting/dashboard-light.svg b/admin/vite/src/assets/images/graphics/hosting/dashboard-light.svg new file mode 100644 index 0000000..1d298ab --- /dev/null +++ b/admin/vite/src/assets/images/graphics/hosting/dashboard-light.svg @@ -0,0 +1,472 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/vite/src/assets/images/logo.png b/admin/vite/src/assets/images/logo.png new file mode 100644 index 0000000..fcc3046 Binary files /dev/null and b/admin/vite/src/assets/images/logo.png differ diff --git a/admin/vite/src/assets/images/social/apple-dark.svg b/admin/vite/src/assets/images/social/apple-dark.svg new file mode 100644 index 0000000..29cfb37 --- /dev/null +++ b/admin/vite/src/assets/images/social/apple-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/admin/vite/src/assets/images/social/apple-light.svg b/admin/vite/src/assets/images/social/apple-light.svg new file mode 100644 index 0000000..29d7b21 --- /dev/null +++ b/admin/vite/src/assets/images/social/apple-light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/admin/vite/src/assets/images/social/facebook.svg b/admin/vite/src/assets/images/social/facebook.svg new file mode 100644 index 0000000..f9406c2 --- /dev/null +++ b/admin/vite/src/assets/images/social/facebook.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/admin/vite/src/assets/images/social/google.svg b/admin/vite/src/assets/images/social/google.svg new file mode 100644 index 0000000..e542cec --- /dev/null +++ b/admin/vite/src/assets/images/social/google.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/admin/vite/src/assets/images/users/avatar-1.png b/admin/vite/src/assets/images/users/avatar-1.png new file mode 100644 index 0000000..b93f15e Binary files /dev/null and b/admin/vite/src/assets/images/users/avatar-1.png differ diff --git a/admin/vite/src/assets/images/users/avatar-2.png b/admin/vite/src/assets/images/users/avatar-2.png new file mode 100644 index 0000000..e7ebbb7 Binary files /dev/null and b/admin/vite/src/assets/images/users/avatar-2.png differ diff --git a/admin/vite/src/assets/images/users/avatar-3.png b/admin/vite/src/assets/images/users/avatar-3.png new file mode 100644 index 0000000..6dcebeb Binary files /dev/null and b/admin/vite/src/assets/images/users/avatar-3.png differ diff --git a/admin/vite/src/assets/images/users/avatar-4.png b/admin/vite/src/assets/images/users/avatar-4.png new file mode 100644 index 0000000..40d8538 Binary files /dev/null and b/admin/vite/src/assets/images/users/avatar-4.png differ diff --git a/admin/vite/src/assets/images/users/avatar-5.png b/admin/vite/src/assets/images/users/avatar-5.png new file mode 100644 index 0000000..54c8976 Binary files /dev/null and b/admin/vite/src/assets/images/users/avatar-5.png differ diff --git a/admin/vite/src/assets/videos/test.mp4 b/admin/vite/src/assets/videos/test.mp4 new file mode 100644 index 0000000..6fad6cf Binary files /dev/null and b/admin/vite/src/assets/videos/test.mp4 differ diff --git a/admin/vite/src/branding.json b/admin/vite/src/branding.json new file mode 100644 index 0000000..631312e --- /dev/null +++ b/admin/vite/src/branding.json @@ -0,0 +1,11 @@ +{ + "brandName": "SaasAble", + "company": { + "name": "Phoenixcoded", + "url": "https://phoenixcoded.authordesk.app/" + }, + "logo": { + "main":"", + "logoIcon": "" + } +} \ No newline at end of file diff --git a/admin/vite/src/components/Breadcrumbs.jsx b/admin/vite/src/components/Breadcrumbs.jsx new file mode 100644 index 0000000..11ddf63 --- /dev/null +++ b/admin/vite/src/components/Breadcrumbs.jsx @@ -0,0 +1,107 @@ +import { useEffect, useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import MuiBreadcrumbs from '@mui/material/Breadcrumbs'; +import Typography from '@mui/material/Typography'; + +// @project +import RouterLink from '@/components/Link'; +import { APP_DEFAULT_PATH } from '@/config'; +import menuItems from '@/menu'; +import { useGetBreadcrumbsMaster } from '@/states/breadcrumbs'; +import { generateFocusStyle } from '@/utils/generateFocusStyle'; +import { usePathname } from '@/utils/navigation'; + +// @assets +import { IconChevronRight } from '@tabler/icons-react'; + +// @types + +// @data +const homeBreadcrumb = { title: 'Home', url: APP_DEFAULT_PATH }; + +/*************************** BREADCRUMBS ***************************/ + +export default function Breadcrumbs() { + const theme = useTheme(); + const location = usePathname(); + const { breadcrumbsMaster } = useGetBreadcrumbsMaster(); + + const [breadcrumbItems, setBreadcrumbItems] = useState([]); + const [activeItem, setActiveItem] = useState(); + + useEffect(() => { + if (breadcrumbsMaster && breadcrumbsMaster.data?.length && breadcrumbsMaster.activePath === location) { + dataHandler(breadcrumbsMaster.data); + } else { + for (const menu of menuItems?.items) { + if (menu.type && menu.type === 'group') { + const matchedParents = findParentElements(menu.children || [], location); + dataHandler(matchedParents || []); + if (matchedParents) break; + } + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [breadcrumbsMaster, location]); + + const dataHandler = (data) => { + const active = data.at(-1); + const linkItems = data.slice(0, -1); + if (active && active.url != homeBreadcrumb.url) { + linkItems.unshift(homeBreadcrumb); + } + setActiveItem(active); + setBreadcrumbItems(linkItems); + }; + + function findParentElements(navItems, targetUrl, parents = []) { + for (const item of navItems) { + // Add the current item to the parents array + const newParents = [...parents, item]; + + // Check if the current item matches the target URL + if (item.url && targetUrl.includes(item.url)) { + return newParents; // Return the array of parent elements + } + + // If the item has children, recurse into them + if (item.children) { + const result = findParentElements(item.children, targetUrl, newParents); + if (result) { + return result; // Return the result if found in children + } + } + } + + return null; // Return null if no match is found + } + + return ( + }> + {breadcrumbItems.length && + breadcrumbItems.map((item, index) => ( + + {item.title} + + ))} + {activeItem && ( + + {activeItem.title} + + )} + + ); +} diff --git a/admin/vite/src/components/ComponentsWrapper.jsx b/admin/vite/src/components/ComponentsWrapper.jsx new file mode 100644 index 0000000..7815781 --- /dev/null +++ b/admin/vite/src/components/ComponentsWrapper.jsx @@ -0,0 +1,19 @@ +import PropTypes from 'prop-types'; +// @mui +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +/*************************** COMPONENTS WRAPPER ***************************/ + +export default function ComponentsWrapper({ children, title }) { + return ( + + + {title} + + {children} + + ); +} + +ComponentsWrapper.propTypes = { children: PropTypes.any, title: PropTypes.string }; diff --git a/admin/vite/src/components/Contact.jsx b/admin/vite/src/components/Contact.jsx new file mode 100644 index 0000000..1f9f3b0 --- /dev/null +++ b/admin/vite/src/components/Contact.jsx @@ -0,0 +1,186 @@ +import PropTypes from 'prop-types'; +import { useEffect, useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Button from '@mui/material/Button'; +import Card from '@mui/material/Card'; +import CardMedia from '@mui/material/CardMedia'; +import ClickAwayListener from '@mui/material/ClickAwayListener'; +import Divider from '@mui/material/Divider'; +import Fade from '@mui/material/Fade'; +import InputAdornment from '@mui/material/InputAdornment'; +import List from '@mui/material/List'; +import ListItemAvatar from '@mui/material/ListItemAvatar'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemText from '@mui/material/ListItemText'; +import OutlinedInput from '@mui/material/OutlinedInput'; +import Popper from '@mui/material/Popper'; +import Stack from '@mui/material/Stack'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +// @third-party +import { Controller } from 'react-hook-form'; + +// @project +import { contactSchema } from '@/utils/validation-schema/common'; + +// @icons +import { IconChevronDown, IconHelp } from '@tabler/icons-react'; + +// @types + +// @data +import countries from '@/data/countries'; + +/*************************** CONTACT ***************************/ + +export default function Contact({ + dialCode, + placeholder = 'ex. 9876x xxxxx', + helpText, + isDisabled = false, + isCountryDisabled = false, + fullWidth = false, + control, + isError = false, + onCountryChange +}) { + const theme = useTheme(); + + const [anchorEl, setAnchorEl] = useState(null); + const [selectedCountry, setSelectedCountry] = useState(countries[0]); + + const open = Boolean(anchorEl); + const id = open ? 'dialcode-popper' : undefined; + + const handleClick = (event) => { + setAnchorEl(anchorEl ? null : event.currentTarget); + }; + + useEffect(() => { + const data = countries.find((item) => item.dialCode === (dialCode || '+1')) || countries[0]; + setSelectedCountry(data); + if (!dialCode && onCountryChange) onCountryChange(data); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dialCode]); + + const countryChange = (country) => { + if (onCountryChange) { + onCountryChange(country); + } + setAnchorEl(null); + }; + + return ( + ( + + + + +
+ ) + })} + disabled={isDisabled} + aria-describedby="contact-field" + slotProps={{ input: { 'aria-label': 'contact' } }} + fullWidth={fullWidth} + startAdornment={ + <> + + + + + + {({ TransitionProps }) => ( + + + setAnchorEl(null)}> + + + + {countries.map((country, index) => ( + countryChange(country)} + > + + + + {country.name}
} /> + + ))} +
+ + + + + + )} + + + } + /> + )} + /> + ); +} + +Contact.propTypes = { + dialCode: PropTypes.any, + placeholder: PropTypes.string, + helpText: PropTypes.any, + isDisabled: PropTypes.bool, + isCountryDisabled: PropTypes.bool, + fullWidth: PropTypes.bool, + control: PropTypes.any, + isError: PropTypes.bool, + onCountryChange: PropTypes.any +}; diff --git a/admin/vite/src/components/DynamicIcon.jsx b/admin/vite/src/components/DynamicIcon.jsx new file mode 100644 index 0000000..de1c04b --- /dev/null +++ b/admin/vite/src/components/DynamicIcon.jsx @@ -0,0 +1,21 @@ +import PropTypes from 'prop-types'; +// @third-party +import * as TablerIcons from '@tabler/icons-react'; + +// @types + +/*************************** DYNAMIC - TABLER ICONS ***************************/ + +export default function DynamicIcon({ name, size = 24, color = 'black', stroke = 2 }) { + // Dynamically get the icon component based on the `name` prop + const IconComponent = TablerIcons[name]; + + // If the provided `name` does not match any icon in TablerIcons, return null to avoid rendering errors + if (!IconComponent) { + return null; + } + + return ; +} + +DynamicIcon.propTypes = { name: PropTypes.any, size: PropTypes.number, color: PropTypes.string, stroke: PropTypes.number }; diff --git a/admin/vite/src/components/Error404.jsx b/admin/vite/src/components/Error404.jsx new file mode 100644 index 0000000..ceaa931 --- /dev/null +++ b/admin/vite/src/components/Error404.jsx @@ -0,0 +1,50 @@ +import PropTypes from 'prop-types'; +// @mui +import { useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import Button from '@mui/material/Button'; +import Card from '@mui/material/Card'; +import Container from '@mui/material/Container'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +// @assets +import Error404 from '@/images/maintenance/Error404'; + +/*************************** ERROR 404 - PAGES ***************************/ + +export default function Error404Page({ primaryBtn, heading }) { + const theme = useTheme(); + const upMD = useMediaQuery(theme.breakpoints.up('md')); + const upXL = useMediaQuery(theme.breakpoints.up('xl')); + const downMD = useMediaQuery(theme.breakpoints.down('md')); + + const isDesktop = (upMD || upXL) && !downMD; + + return ( + + + + + + + {heading} + {primaryBtn && + + + ); +} + +/*************************** DRAWER CONTENT - NAVIGATION CARD ***************************/ + +export default function NavCard() { + return ( + + + + ); +} + +CardContent.propTypes = { title: PropTypes.string, description: PropTypes.string, icon: PropTypes.any }; diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavCollapse.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavCollapse.jsx new file mode 100644 index 0000000..9f475ca --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavCollapse.jsx @@ -0,0 +1,107 @@ +import PropTypes from 'prop-types'; +import { useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Collapse from '@mui/material/Collapse'; +import List from '@mui/material/List'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import Typography from '@mui/material/Typography'; + +// @project +import NavItem from './NavItem'; +import DynamicIcon from '@/components/DynamicIcon'; +import useMenuCollapse from '@/hooks/useMenuCollapse'; +import { usePathname } from '@/utils/navigation'; + +// @assets +import { IconChevronDown, IconChevronUp } from '@tabler/icons-react'; + +// @style +const verticalDivider = { + '&:after': { + content: "''", + position: 'absolute', + left: 16, + top: -2, + height: `calc(100% + 2px)`, + width: '1px', + opacity: 1, + bgcolor: 'divider' + } +}; + +/*************************** COLLAPSE - LOOP ***************************/ + +function NavCollapseLoop({ item }) { + return item.children?.map((item) => { + switch (item.type) { + case 'collapse': + return ; + case 'item': + return ; + default: + return ( + + Fix - Collapse or Item + + ); + } + }); +} + +/*************************** RESPONSIVE DRAWER - COLLAPSE ***************************/ + +export default function NavCollapse({ item, level = 0 }) { + const theme = useTheme(); + const [open, setOpen] = useState(false); + const [selected, setSelected] = useState(null); + + // Active item collapse on page load with sub-levels + const pathname = usePathname(); + + useMenuCollapse(item, pathname, false, setSelected, setOpen); + + const handleClick = () => { + setOpen(!open); + }; + + const iconcolor = theme.palette.text.primary; + + return ( + <> + + {level === 0 && ( + + + + )} + + {open ? : } + + + + + + + + ); +} + +NavCollapseLoop.propTypes = { item: PropTypes.any }; + +NavCollapse.propTypes = { item: PropTypes.any, level: PropTypes.number }; diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavGroup.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavGroup.jsx new file mode 100644 index 0000000..a7752bd --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavGroup.jsx @@ -0,0 +1,44 @@ +import PropTypes from 'prop-types'; +// @mui +import List from '@mui/material/List'; +import Typography from '@mui/material/Typography'; + +// @project +import NavCollapse from './NavCollapse'; +import NavItem from './NavItem'; + +/*************************** RESPONSIVE DRAWER - GROUP ***************************/ + +export default function NavGroup({ item }) { + const renderNavItem = (menuItem) => { + // Render items based on the type + switch (menuItem.type) { + case 'collapse': + return ; + case 'item': + return ; + default: + return ( + + Fix - Group Collapse or Items + + ); + } + }; + + return ( + + {item.title} + + } + sx={{ '&:not(:first-of-type)': { pt: 1, borderTop: '1px solid', borderColor: 'divider' } }} + > + {item.children?.map((menuItem) => renderNavItem(menuItem))} + + ); +} + +NavGroup.propTypes = { item: PropTypes.any }; diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavItem.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavItem.jsx new file mode 100644 index 0000000..fc2a097 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/NavItem.jsx @@ -0,0 +1,73 @@ +import PropTypes from 'prop-types'; +import { useEffect } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; + +// @project +import { handlerActiveItem, handlerDrawerOpen, useGetMenuMaster } from '@/states/menu'; +import DynamicIcon from '@/components/DynamicIcon'; +import RouterLink from '@/components/Link'; +import { usePathname } from '@/utils/navigation'; + +/*************************** RESPONSIVE DRAWER - ITEM ***************************/ + +export default function NavItem({ item, level = 0 }) { + const theme = useTheme(); + const { menuMaster } = useGetMenuMaster(); + const openItem = menuMaster.openedItem; + + const downMD = useMediaQuery(theme.breakpoints.down('md')); + + // Active menu item on page load + const pathname = usePathname(); + + useEffect(() => { + if (pathname === item.url) handlerActiveItem(item.id); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname]); + + const iconcolor = theme.palette.text.primary; + + const itemHandler = () => { + if (downMD) handlerDrawerOpen(false); + }; + + return ( + 0 && { + '&.Mui-selected': { + color: 'primary.main', + bgcolor: 'transparent', + '&:hover': { bgcolor: 'action.hover' }, + '&.Mui-focusVisible': { bgcolor: 'action.focus' }, + '& .MuiTypography-root': { fontWeight: 600 } + } + }) + }} + > + {level === 0 && ( + + + + )} + + + ); +} + +NavItem.propTypes = { item: PropTypes.any, level: PropTypes.number }; diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/index.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/index.jsx new file mode 100644 index 0000000..88c6f2a --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/ResponsiveDrawer/index.jsx @@ -0,0 +1,26 @@ +// @mui +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +// @project +import menuItems from '@/menu'; +import NavGroup from './NavGroup'; + +/*************************** DRAWER CONTENT - RESPONSIVE DRAWER ***************************/ + +export default function ResponsiveDrawer() { + const navGroups = menuItems.items.map((item, index) => { + switch (item.type) { + case 'group': + return ; + default: + return ( + + Fix - Navigation Group + + ); + } + }); + + return {navGroups}; +} diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/index.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/index.jsx new file mode 100644 index 0000000..f9afb7e --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/index.jsx @@ -0,0 +1,30 @@ +import useMediaQuery from '@mui/material/useMediaQuery'; +import Stack from '@mui/material/Stack'; + +// @project +import NavCard from './NavCard'; +import ResponsiveDrawer from './ResponsiveDrawer'; + +import { useGetMenuMaster } from '@/states/menu'; +import { MINI_DRAWER_WIDTH } from '@/config'; +import SimpleBar from '@/components/third-party/SimpleBar'; + +/*************************** DRAWER - CONTENT ***************************/ + +export default function DrawerContent() { + const upMD = useMediaQuery((theme) => theme.breakpoints.up('lg')); + + const { menuMaster } = useGetMenuMaster(); + const drawerOpen = menuMaster.isDashboardDrawerOpened; + + const contentHeight = `calc(100vh - ${MINI_DRAWER_WIDTH}px)`; + + return ( + + + + + + + ); +} diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/DrawerHeader/index.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerHeader/index.jsx new file mode 100644 index 0000000..75504a5 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerHeader/index.jsx @@ -0,0 +1,38 @@ +import PropTypes from 'prop-types'; +// @mui +import IconButton from '@mui/material/IconButton'; +import Stack from '@mui/material/Stack'; +import Box from '@mui/material/Box'; + +// @project +import { handlerDrawerOpen, useGetMenuMaster } from '@/states/menu'; +import Logo from '@/components/logo'; + +// @assets +import { IconLayoutSidebarLeftCollapse, IconLayoutSidebarRightCollapse } from '@tabler/icons-react'; + +/*************************** DRAWER HEADER ***************************/ + +export default function DrawerHeader({ open }) { + const { menuMaster } = useGetMenuMaster(); + const drawerOpen = menuMaster.isDashboardDrawerOpened; + + return ( + + + {open && } + handlerDrawerOpen(!drawerOpen)} + size="small" + color="secondary" + variant="outlined" + > + {!drawerOpen ? : } + + + + ); +} + +DrawerHeader.propTypes = { open: PropTypes.bool }; diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/MiniDrawerStyled.js b/admin/vite/src/layouts/AdminLayout/Drawer/MiniDrawerStyled.js new file mode 100644 index 0000000..6999fb8 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/MiniDrawerStyled.js @@ -0,0 +1,53 @@ +// @mui +import { styled } from '@mui/material/styles'; +import Drawer from '@mui/material/Drawer'; + +// @project +import { DRAWER_WIDTH } from '@/config'; + +// Mixin for common ) (open/closed) drawer state0.... +const commonDrawerStyles = (theme) => ({ + borderRight: `1px solid ${theme.palette.grey[300]}`, + overflowX: 'hidden' +}); + +// Mixin for opened drawer state +const openedMixin = (theme) => ({ + ...commonDrawerStyles(theme), + width: DRAWER_WIDTH, + + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen + }) +}); + +// Mixin for closed drawer state +const closedMixin = (theme) => ({ + ...commonDrawerStyles(theme), + width: 0, + + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen + }) +}); + +/*************************** DRAWER - MINI STYLED ***************************/ + +const MiniDrawerStyled = styled(Drawer, { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open }) => ({ + width: DRAWER_WIDTH, + flexShrink: 0, + whiteSpace: 'nowrap', + boxSizing: 'border-box', + ...(open && { + ...openedMixin(theme), + '& .MuiDrawer-paper': openedMixin(theme) + }), + ...(!open && { + ...closedMixin(theme), + '& .MuiDrawer-paper': closedMixin(theme) + }) +})); + +export default MiniDrawerStyled; diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/index.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/index.jsx new file mode 100644 index 0000000..308edec --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Drawer/index.jsx @@ -0,0 +1,69 @@ +import PropTypes from 'prop-types'; +import { useMemo } from 'react'; + +import useMediaQuery from '@mui/material/useMediaQuery'; +import Divider from '@mui/material/Divider'; +import Drawer from '@mui/material/Drawer'; +import Box from '@mui/material/Box'; + +// @project +import DrawerHeader from './DrawerHeader'; +import DrawerContent from './DrawerContent'; +import MiniDrawerStyled from './MiniDrawerStyled'; + +import { handlerDrawerOpen, useGetMenuMaster } from '@/states/menu'; +import { DRAWER_WIDTH } from '@/config'; + +/*************************** ADMIN LAYOUT - DRAWER ***************************/ + +export default function MainDrawer({ window }) { + const { menuMaster } = useGetMenuMaster(); + const drawerOpen = menuMaster.isDashboardDrawerOpened; + const downLG = useMediaQuery((theme) => theme.breakpoints.down('lg')); + + // Define container for drawer when window is specified + const container = window !== undefined ? () => window().document.body : undefined; + + // Memoize drawer content and header to prevent unnecessary re-renders + const drawerContent = useMemo(() => , []); + const drawerHeader = useMemo(() => , [drawerOpen]); + + return ( + + {/* Temporary drawer for small media */} + handlerDrawerOpen(!drawerOpen)} + slotProps={{ + paper: { + sx: { + boxSizing: 'border-box', + width: DRAWER_WIDTH, + borderRight: '1px solid', + borderRightColor: 'divider', + backgroundImage: 'none', + boxShadow: 'inherit' + } + } + }} + > + {drawerHeader} + + {drawerContent} + + + {/* Permanent mini-drawer for large media */} + {!downLG && ( + + {drawerHeader} + + {drawerContent} + + )} + + ); +} + +MainDrawer.propTypes = { window: PropTypes.func }; diff --git a/admin/vite/src/layouts/AdminLayout/Header/AppBarStyled.jsx b/admin/vite/src/layouts/AdminLayout/Header/AppBarStyled.jsx new file mode 100644 index 0000000..541c1f8 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Header/AppBarStyled.jsx @@ -0,0 +1,26 @@ +// @mui +import { styled } from '@mui/material/styles'; +import AppBar from '@mui/material/AppBar'; + +// @project +import { DRAWER_WIDTH } from '@/config'; + +/*************************** HEADER - APP BAR STYLED ***************************/ + +const AppBarStyled = styled(AppBar, { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open }) => ({ + zIndex: theme.zIndex.drawer + 1, // Ensure AppBar appears above the Drawer + transition: theme.transitions.create(['width', 'margin'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen + }), + ...(open && { + marginLeft: DRAWER_WIDTH, // Shift AppBar to the right by the drawer width + width: `calc(100% - ${DRAWER_WIDTH}px)`, + transition: theme.transitions.create(['width', 'margin'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen + }) + }) +})); + +export default AppBarStyled; diff --git a/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx new file mode 100644 index 0000000..280d276 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/Notification.jsx @@ -0,0 +1,317 @@ +import { Fragment, useState } from 'react'; + +// @mui +import { keyframes, useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import Badge from '@mui/material/Badge'; +import Button from '@mui/material/Button'; +import CardHeader from '@mui/material/CardHeader'; +import CardContent from '@mui/material/CardContent'; +import CardActions from '@mui/material/CardActions'; +import ClickAwayListener from '@mui/material/ClickAwayListener'; +import Fade from '@mui/material/Fade'; +import IconButton from '@mui/material/IconButton'; +import List from '@mui/material/List'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemText from '@mui/material/ListItemText'; +import ListSubheader from '@mui/material/ListSubheader'; +import Popper from '@mui/material/Popper'; +import Stack from '@mui/material/Stack'; +import Box from '@mui/material/Box'; + +// @project +import EmptyNotification from '@/components/header/empty-state/EmptyNotification'; +import MainCard from '@/components/MainCard'; +import NotificationItem from '@/components/NotificationItem'; +import SimpleBar from '@/components/third-party/SimpleBar'; + +// @assets +import { IconBell, IconCode, IconChevronDown, IconGitBranch, IconNote, IconGps } from '@tabler/icons-react'; + +import avatar1 from '@/assets/images/users/avatar-1.png'; +import avatar4 from '@/assets/images/users/avatar-4.png'; +import avatar5 from '@/assets/images/users/avatar-5.png'; + +const swing = keyframes` + 20% { + transform: rotate(15deg) scale(1); +} +40% { + transform: rotate(-10deg) scale(1.05); +} +60% { + transform: rotate(5deg) scale(1.1); +} +80% { + transform: rotate(-5deg) scale(1.05); +} +100% { + transform: rotate(0deg) scale(1); +} +`; + +/*************************** HEADER - NOTIFICATION ***************************/ + +export default function Notification() { + const theme = useTheme(); + const downSM = useMediaQuery(theme.breakpoints.down('sm')); + + const [anchorEl, setAnchorEl] = useState(null); + const [innerAnchorEl, setInnerAnchorEl] = useState(null); + const [allRead, setAllRead] = useState(false); + const [showEmpty, setShowEmpty] = useState(false); + + const open = Boolean(anchorEl); + const innerOpen = Boolean(innerAnchorEl); + const id = open ? 'notification-action-popper' : undefined; + const innerId = innerOpen ? 'notification-inner-popper' : undefined; + const buttonStyle = { borderRadius: 2, p: 1 }; + + const listcontent = ['All notification', 'Users', 'Account', 'Language', 'Role & Permission', 'Setting']; + + const [notifications, setNotifications] = useState([ + { + avatar: { alt: 'Travis Howard', src: avatar1 }, + badge: , + title: 'New Feature Deployed · Code Review Needed', + subTitle: 'Brenda Skiles', + dateTime: 'Jul 9' + }, + { + avatar: , + title: 'New Branch Created - "feature-user-auth"', + subTitle: 'Michael Carter', + dateTime: 'Jul 10', + isSeen: true + }, + { + avatar: , + title: 'Pull Request Opened "fix-dashboard-bug"', + subTitle: 'Sophia Green', + dateTime: 'Jul 11' + }, + { + avatar: { alt: 'Travis Howard', src: avatar4 }, + badge: , + title: 'Admin Approval · Document Submission Accepted', + subTitle: 'Salvatore Bogan', + dateTime: 'Jul 15', + isSeen: true + }, + { + avatar: , + title: 'Location Access Request, Pending Your Approval', + subTitle: 'System Notification', + dateTime: 'Jul 24', + isSeen: true + } + ]); + + const [notifications2, setNotifications2] = useState([ + { + avatar: { alt: 'Travis Howard', src: avatar1 }, + badge: , + title: 'Code Review Requested · Feature Deployment', + subTitle: 'Brenda Skiles', + dateTime: 'Jul 9' + }, + { + avatar: , + title: 'Location Access Granted [Security Update]', + subTitle: 'System Notification', + dateTime: 'Jul 24', + isSeen: true + }, + { + avatar: { alt: 'Alice Smith', src: avatar5 }, + badge: , + title: 'Document Submission Approval Received', + subTitle: 'Salvatore Bogan', + dateTime: 'Aug 12', + isSeen: true + }, + { + avatar: { alt: 'Travis Howard', src: avatar1 }, + badge: , + title: 'New Commit Pushed · Review Changes', + subTitle: 'Brenda Skiles', + dateTime: 'Jul 9' + }, + { + avatar: , + title: 'Unusual Login Attempt [Verify Activity]', + subTitle: 'Security Alert', + dateTime: 'Jul 24' + } + ]); + + const handleActionClick = (event) => { + setAnchorEl(anchorEl ? null : event.currentTarget); + }; + + const handleInnerActionClick = (event) => { + setInnerAnchorEl(innerAnchorEl ? null : event.currentTarget); + }; + + // Function to mark all notifications as read + const handleMarkAllAsRead = () => { + setNotifications((prevNotifications) => prevNotifications.map((notification) => ({ ...notification, isSeen: true }))); + setNotifications2((prevNotifications2) => prevNotifications2.map((notification) => ({ ...notification, isSeen: true }))); + setAllRead(true); + }; + + const handleClearAll = () => { + setNotifications([]); + setNotifications2([]); + setShowEmpty(true); // Set empty state to true when cleared + }; + + return ( + <> + + + + + + + {({ TransitionProps }) => ( + + + setAnchorEl(null)}> + + + + + {({ TransitionProps }) => ( + + + setInnerAnchorEl(null)}> + + {listcontent.map((item, index) => ( + + {item} + + ))} + + + + + )} + + {!showEmpty && ( + + )} + + } + /> + {showEmpty ? ( + + ) : ( + + + + + + Last 7 Days + + {notifications.map((notification, index) => ( + + + + ))} + + Older + + {notifications2.map((notification, index) => ( + + + + ))} + + + + + + + + )} + + + + + )} + + + ); +} diff --git a/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx new file mode 100644 index 0000000..10dd2a7 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/Profile.jsx @@ -0,0 +1,219 @@ +import { useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Avatar from '@mui/material/Avatar'; +import Button from '@mui/material/Button'; +import Chip from '@mui/material/Chip'; +import ClickAwayListener from '@mui/material/ClickAwayListener'; +import Divider from '@mui/material/Divider'; +import Fade from '@mui/material/Fade'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import Popper from '@mui/material/Popper'; +import Stack from '@mui/material/Stack'; +import Switch from '@mui/material/Switch'; +import Box from '@mui/material/Box'; + +// @third-party +import { enqueueSnackbar } from 'notistack'; + +// @project +import { ThemeI18n } from '@/config'; +import MainCard from '@/components/MainCard'; +import Profile from '@/components/Profile'; +import { AvatarSize, ChipIconPosition } from '@/enum'; +import useConfig from '@/hooks/useConfig'; + +// @assets +import { IconChevronRight, IconLanguage, IconLogout, IconSettings, IconSunMoon, IconTextDirectionLtr } from '@tabler/icons-react'; + +import profile from '@/assets/images/users/avatar-1.png'; + +/*************************** HEADER - PROFILE DATA ***************************/ + +const profileData = { + avatar: { src: profile, size: AvatarSize.XS }, + title: 'Erika Collins', + caption: 'Super Admin' +}; + +const languageList = [ + { key: ThemeI18n.EN, value: 'English' }, + { key: ThemeI18n.FR, value: 'French' }, + { key: ThemeI18n.RO, value: 'Romanian' }, + { key: ThemeI18n.ZH, value: 'Chinese' } +]; + +/*************************** HEADER - PROFILE ***************************/ + +export default function ProfileSection() { + const theme = useTheme(); + const { i18n } = useConfig(); + + const [anchorEl, setAnchorEl] = useState(null); + const [innerAnchorEl, setInnerAnchorEl] = useState(null); + + const open = Boolean(anchorEl); + const innerOpen = Boolean(innerAnchorEl); + const id = open ? 'profile-action-popper' : undefined; + const innerId = innerOpen ? 'profile-inner-popper' : undefined; + const buttonStyle = { borderRadius: 2, p: 1 }; + + const handleActionClick = (event) => { + setAnchorEl(anchorEl ? null : event.currentTarget); + }; + + const handleInnerActionClick = (event) => { + setInnerAnchorEl(innerAnchorEl ? null : event.currentTarget); + }; + + const logoutAccount = () => { + setAnchorEl(null); + }; + + const i18nHandler = (event, key) => { + handleInnerActionClick(event); + if (key != i18n) enqueueSnackbar('Upgrade to pro for language change'); + }; + + return ( + <> + + + + + + + + + + {({ TransitionProps }) => ( + + + setAnchorEl(null)}> + + + + + enqueueSnackbar('Upgrade to pro for dark theme')} /> + } + sx={{ py: 0.5, pl: 1, '& .MuiListItemSecondaryAction-root': { right: 8 } }} + > + + + + + + enqueueSnackbar('Upgrade to pro for RTL')} />} + sx={{ py: 1, pl: 1, '& .MuiListItemSecondaryAction-root': { right: 8 } }} + > + + + + + + + + + + + item.key === i18n)[0]?.value.slice(0, 3)} + variant="text" + size="small" + color="secondary" + icon={} + position={ChipIconPosition.RIGHT} + sx={{ textTransform: 'capitalize' }} + /> + + {({ TransitionProps }) => ( + + + setInnerAnchorEl(null)}> + + {languageList.map((item, index) => ( + i18nHandler(event, item.key)} + > + {item.value} + + ))} + + + + + )} + + + + + + + + + + + + + + + + + )} + + + ); +} diff --git a/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/SearchBar.jsx b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/SearchBar.jsx new file mode 100644 index 0000000..7b945e7 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/SearchBar.jsx @@ -0,0 +1,205 @@ +import { Fragment, useEffect, useRef, useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import ClickAwayListener from '@mui/material/ClickAwayListener'; +import Fade from '@mui/material/Fade'; +import InputAdornment from '@mui/material/InputAdornment'; +import List from '@mui/material/List'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemText from '@mui/material/ListItemText'; +import ListSubheader from '@mui/material/ListSubheader'; +import OutlinedInput from '@mui/material/OutlinedInput'; +import Popper from '@mui/material/Popper'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +// @project +import EmptySearch from '@/components/header/empty-state/EmptySearch'; +import MainCard from '@/components/MainCard'; +import NotificationItem from '@/components/NotificationItem'; +import { AvatarSize } from '@/enum'; + +// @assets +import { IconCommand, IconSearch } from '@tabler/icons-react'; + +import avatar1 from '@/assets/images/users/avatar-1.png'; +import avatar2 from '@/assets/images/users/avatar-2.png'; + +/*************************** HEADER - SEARCH DATA ***************************/ + +const profileData = [ + { alt: 'Aplican Warner', src: avatar1, title: 'Aplican Warner', subTitle: 'Admin' }, + { alt: 'Apliaye Aweoa', src: avatar2, title: 'Apliaye Aweoa', subTitle: 'Admin' } +]; + +const listCotent = [ + { title: 'Role', items: ['Applican', 'App User'] }, + { title: 'Files', items: ['Applican', 'Applican'] } +]; + +/*************************** HEADER - SEARCH BAR ***************************/ + +export default function SearchBar() { + const theme = useTheme(); + const downSM = useMediaQuery(theme.breakpoints.down('sm')); + + const buttonStyle = { borderRadius: 2, p: 1 }; + const [anchorEl, setAnchorEl] = useState(null); + const [isEmptySearch, setIsEmptySearch] = useState(true); + const [isPopperOpen, setIsPopperOpen] = useState(false); + const inputRef = useRef(null); + + // Function to open the popper + const openPopper = (event) => { + setAnchorEl(inputRef.current); + setIsPopperOpen(true); + }; + + const handleActionClick = (event) => { + if (isPopperOpen) { + // If popper is open, close it + setIsPopperOpen(false); + setAnchorEl(null); + } else { + openPopper(event); + } + }; + + const handleInputChange = (event) => { + const isEmpty = event.target.value.trim() === ''; + setIsEmptySearch(isEmpty); + + if (!isPopperOpen && !isEmpty) { + openPopper(event); + } + }; + + const handleKeyDown = (event) => { + if (event.key === 'Enter' && !isPopperOpen) { + openPopper(event); + } else if (event.key === 'Escape' && isPopperOpen) { + setIsPopperOpen(false); + setAnchorEl(null); + } else if (event.ctrlKey && event.key === 'k') { + event.preventDefault(); + if (!isPopperOpen) { + openPopper(event); + } + } + }; + + const renderSubheader = (title, withMarginTop = false) => ( + + {title} + + ); + + const renderListItem = (item, index) => ( + + + + ); + + useEffect(() => { + const handleGlobalKeyDown = (event) => { + if (event.ctrlKey && event.key === 'k') { + event.preventDefault(); + // Check if the search input is not focused before opening the popper + if (document.activeElement !== inputRef.current) { + openPopper(event); + inputRef.current?.focus(); + } + } + }; + + window.addEventListener('keydown', handleGlobalKeyDown); + return () => { + window.removeEventListener('keydown', handleGlobalKeyDown); + }; + }, [isPopperOpen]); + + return ( + <> + + + + } + endAdornment={ + + + + + K + + + } + aria-describedby="Search" + slotProps={{ input: { 'aria-label': 'search' } }} + onClick={handleActionClick} + onKeyDown={handleKeyDown} + onChange={handleInputChange} + sx={{ minWidth: { xs: 200, sm: 240 } }} + /> + + {({ TransitionProps }) => ( + + + { + setIsPopperOpen(false); + setAnchorEl(null); + }} + > + {isEmptySearch ? ( + + ) : ( + + {renderSubheader('Users')} + {profileData.map((user, index) => ( + + + + ))} + {listCotent.map((list, item) => ( + + {renderSubheader(list.title, true)} + {list.items.map((item, index) => renderListItem(item, index))} + + ))} + + )} + + + + )} + + + ); +} diff --git a/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/index.jsx b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/index.jsx new file mode 100644 index 0000000..69b84a8 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Header/HeaderContent/index.jsx @@ -0,0 +1,28 @@ +// @mui +import Stack from '@mui/material/Stack'; +import Box from '@mui/material/Box'; + +// @project +import Notification from './Notification'; +import Profile from './Profile'; +import SearchBar from './SearchBar'; +import Breadcrumbs from '@/components/Breadcrumbs'; + +/*************************** HEADER CONTENT ***************************/ + +export default function HeaderContent() { + return ( + <> + + + + + + + + + + + + ); +} diff --git a/admin/vite/src/layouts/AdminLayout/Header/index.jsx b/admin/vite/src/layouts/AdminLayout/Header/index.jsx new file mode 100644 index 0000000..a5c60d2 --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/Header/index.jsx @@ -0,0 +1,74 @@ +import { useMemo } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import AppBar from '@mui/material/AppBar'; +import IconButton from '@mui/material/IconButton'; +import Toolbar from '@mui/material/Toolbar'; + +// @project +import AppBarStyled from './AppBarStyled'; +import HeaderContent from './HeaderContent'; +import { handlerDrawerOpen, useGetMenuMaster } from '@/states/menu'; +import { DRAWER_WIDTH } from '@/config'; + +// @assets +import { IconLayoutSidebarRightCollapse, IconMenu2 } from '@tabler/icons-react'; + +/*************************** ADMIN LAYOUT - HEADER ***************************/ + +export default function Header() { + const theme = useTheme(); + const downLG = useMediaQuery(theme.breakpoints.down('lg')); + + const { menuMaster } = useGetMenuMaster(); + const drawerOpen = menuMaster.isDashboardDrawerOpened; + + // Memoized header content to avoid unnecessary re-renders + const headerContent = useMemo(() => , []); + + // Common header content + const mainHeader = ( + + handlerDrawerOpen(!drawerOpen)} + size="small" + color="secondary" + variant="outlined" + sx={{ display: { xs: 'inline-flex', lg: !drawerOpen ? 'inline-flex' : 'none' }, mr: 1 }} + > + <> + {!drawerOpen && !downLG && } + {downLG && } + + + {headerContent} + + ); + + // AppBar props, including styles that vary based on drawer state and screen size + const appBar = { + color: 'inherit', + position: 'fixed', + elevation: 0, + sx: { + borderBottom: `1px solid ${theme.palette.grey[300]}`, + zIndex: 1200, + width: { xs: '100%', lg: drawerOpen ? `calc(100% - ${DRAWER_WIDTH}px)` : 1 } + } + }; + + return ( + <> + {!downLG ? ( + + {mainHeader} + + ) : ( + {mainHeader} + )} + + ); +} diff --git a/admin/vite/src/layouts/AdminLayout/index.jsx b/admin/vite/src/layouts/AdminLayout/index.jsx new file mode 100644 index 0000000..a61605f --- /dev/null +++ b/admin/vite/src/layouts/AdminLayout/index.jsx @@ -0,0 +1,57 @@ +import { useEffect } from 'react'; +import { Outlet } from 'react-router-dom'; + +import useMediaQuery from '@mui/material/useMediaQuery'; +import Container from '@mui/material/Container'; +import Toolbar from '@mui/material/Toolbar'; +import Stack from '@mui/material/Stack'; +import Box from '@mui/material/Box'; + +// @project +import Drawer from './Drawer'; +import Header from './Header'; +import { handlerDrawerOpen, useGetMenuMaster } from '@/states/menu'; +import Breadcrumbs from '@/components/Breadcrumbs'; +import Loader from '@/components/Loader'; + +import { DRAWER_WIDTH } from '@/config'; + +/*************************** ADMIN LAYOUT ***************************/ + +export default function DashboardLayout() { + const { menuMasterLoading } = useGetMenuMaster(); + + const downXL = useMediaQuery((theme) => theme.breakpoints.down('xl')); + + useEffect(() => { + handlerDrawerOpen(!downXL); + }, [downXL]); + + if (menuMasterLoading) return ; + + return ( + +
+ + + + + + + + + + + + ); +} diff --git a/admin/vite/src/layouts/AuthLayout/index.jsx b/admin/vite/src/layouts/AuthLayout/index.jsx new file mode 100644 index 0000000..4a48c99 --- /dev/null +++ b/admin/vite/src/layouts/AuthLayout/index.jsx @@ -0,0 +1,55 @@ +import { Outlet } from 'react-router-dom'; + +// @mui +import CardMedia from '@mui/material/CardMedia'; +import Grid from '@mui/material/Grid'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +// @project +import LogoMain from '@/components/logo/LogoMain'; +import GetImagePath from '@/utils/GetImagePath'; + +// @assets +import dashboardLightIcon from '@/assets/images/graphics/hosting/dashboard-light.svg'; +import dashboardDarkIcon from '@/assets/images/graphics/hosting/dashboard-dark.svg'; + +const dashBoardImage = { light: dashboardLightIcon, dark: dashboardDarkIcon }; + +/*************************** AUTH LAYOUT ***************************/ + +export default function AuthLayout() { + return ( + + + + + + + + + + SaaS platform for seamless data management and user insights. Unlock growth with real-time analytics and flexible features. + + + + + + + + + ); +} diff --git a/admin/vite/src/main.jsx b/admin/vite/src/main.jsx new file mode 100644 index 0000000..5049bb8 --- /dev/null +++ b/admin/vite/src/main.jsx @@ -0,0 +1,19 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import './index.css'; +import App from './App'; + +/* simpebar styles */ +import 'simplebar-react/dist/simplebar.min.css'; + +// Archivo +import '@fontsource/archivo/400.css'; +import '@fontsource/archivo/500.css'; +import '@fontsource/archivo/600.css'; +import '@fontsource/archivo/700.css'; + +createRoot(document.getElementById('root')).render( + + + +); diff --git a/admin/vite/src/menu/index.jsx b/admin/vite/src/menu/index.jsx new file mode 100644 index 0000000..55b0ec9 --- /dev/null +++ b/admin/vite/src/menu/index.jsx @@ -0,0 +1,13 @@ +// @project +import manage from './manage'; +import other from './other'; +import pages from './pages'; +import uiElements from './ui-elements'; + +/*************************** MENU ITEMS ***************************/ + +const menuItems = { + items: [manage, uiElements, pages, other] +}; + +export default menuItems; diff --git a/admin/vite/src/menu/manage.jsx b/admin/vite/src/menu/manage.jsx new file mode 100644 index 0000000..ec761e5 --- /dev/null +++ b/admin/vite/src/menu/manage.jsx @@ -0,0 +1,19 @@ +/*************************** MENU ITEMS - APPLICATIONS ***************************/ + +const manage = { + id: 'group-manage', + title: 'Manage', + icon: 'IconBrandAsana', + type: 'group', + children: [ + { + id: 'dashboard', + title: 'Dashboard', + type: 'item', + url: '/dashboard', + icon: 'IconLayoutGrid' + } + ] +}; + +export default manage; diff --git a/admin/vite/src/menu/other.jsx b/admin/vite/src/menu/other.jsx new file mode 100644 index 0000000..c868e36 --- /dev/null +++ b/admin/vite/src/menu/other.jsx @@ -0,0 +1,83 @@ +/*************************** MENU ITEMS - APPLICATIONS ***************************/ + +const other = { + id: 'group-other', + title: 'Other', + icon: 'IconDotsVertical', + type: 'group', + children: [ + { + id: 'changelog', + title: 'Changelog', + type: 'item', + url: 'https://phoenixcoded.gitbook.io/saasable/changelog', + target: true, + icon: 'IconHistory' + }, + { + id: 'documentation', + title: 'Documentation', + type: 'item', + url: 'https://phoenixcoded.gitbook.io/saasable', + target: true, + icon: 'IconNotes' + }, + { + id: 'support', + title: 'Support', + type: 'item', + url: 'https://codedthemes.support-hub.io/', + target: true, + icon: 'IconLifebuoy' + }, + + { + id: 'menu-levels', + title: 'Menu Levels', + type: 'collapse', + icon: 'IconMenu2', + children: [ + { + id: 'menu-level-1.1', + title: 'Level 1', + type: 'item', + url: '#' + }, + { + id: 'menu-level-1.2', + title: 'Level 1', + type: 'collapse', + children: [ + { + id: 'menu-level-2.1', + title: 'Level 2', + type: 'item', + url: '#' + }, + { + id: 'menu-level-2.2', + title: 'Level 2', + type: 'collapse', + children: [ + { + id: 'menu-level-3.1', + title: 'Level 3', + type: 'item', + url: '#' + }, + { + id: 'menu-level-3.2', + title: 'Level 3', + type: 'item', + url: '#' + } + ] + } + ] + } + ] + } + ] +}; + +export default other; diff --git a/admin/vite/src/menu/pages.jsx b/admin/vite/src/menu/pages.jsx new file mode 100644 index 0000000..89b960b --- /dev/null +++ b/admin/vite/src/menu/pages.jsx @@ -0,0 +1,41 @@ +/*************************** MENU ITEMS - PAGES ***************************/ + +const pages = { + id: 'group-page', + title: 'Page', + icon: 'IconDotsVertical', + type: 'group', + children: [ + { + id: 'authentication', + title: 'Authentication', + type: 'collapse', + icon: 'IconLogin2', + children: [ + { + id: 'login', + title: 'Login', + type: 'item', + url: '/auth/login', + target: true + }, + { + id: 'register', + title: 'Register', + type: 'item', + url: '/auth/register', + target: true + } + ] + }, + { + id: 'sample-page', + title: 'Sample Page', + type: 'item', + url: '/sample-page', + icon: 'IconBrandChrome' + } + ] +}; + +export default pages; diff --git a/admin/vite/src/menu/ui-elements.jsx b/admin/vite/src/menu/ui-elements.jsx new file mode 100644 index 0000000..8a89ec8 --- /dev/null +++ b/admin/vite/src/menu/ui-elements.jsx @@ -0,0 +1,38 @@ +/*************************** MENU ITEMS - APPLICATIONS ***************************/ + +const uiElements = { + id: 'group-ui-elements', + title: 'Ui Elements', + icon: 'IconDotsVertical', + type: 'group', + children: [ + { + id: 'components', + title: 'Components', + type: 'collapse', + icon: 'IconAppWindow', + children: [ + { + id: 'color', + title: 'Color', + type: 'item', + url: '/utils/color' + }, + { + id: 'shadow', + title: 'Shadow', + type: 'item', + url: '/utils/shadow' + }, + { + id: 'typography', + title: 'Typography', + type: 'item', + url: '/utils/typography' + } + ] + } + ] +}; + +export default uiElements; diff --git a/admin/vite/src/routes/MainRoutes.jsx b/admin/vite/src/routes/MainRoutes.jsx new file mode 100644 index 0000000..09582cd --- /dev/null +++ b/admin/vite/src/routes/MainRoutes.jsx @@ -0,0 +1,38 @@ +import { lazy } from 'react'; +import { Navigate } from 'react-router-dom'; + +// @project +import Loadable from '@/components/Loadable'; +import AdminLayout from '@/layouts/AdminLayout'; + +// Dashboard +const AnalyticsPage = Loadable(lazy(() => import('@/views/admin/dashboard'))); + +// Utils +const ColorPage = Loadable(lazy(() => import('@/views/components/utils/colors'))); +const ShadowPage = Loadable(lazy(() => import('@/views/components/utils/shadow'))); +const TypographyPage = Loadable(lazy(() => import('@/views/components/utils/typography'))); + +// Sample Page +const SamplePage = Loadable(lazy(() => import('@/views/admin/sample-page'))); + +const MainRoutes = { + path: '/', + element: , + children: [ + { index: true, element: }, + + { path: 'dashboard', element: }, + { + path: 'utils', + children: [ + { path: 'color', element: }, + { path: 'shadow', element: }, + { path: 'typography', element: } + ] + }, + { path: 'sample-page', element: } + ] +}; + +export default MainRoutes; diff --git a/admin/vite/src/routes/PagesRoutes.jsx b/admin/vite/src/routes/PagesRoutes.jsx new file mode 100644 index 0000000..05cbd21 --- /dev/null +++ b/admin/vite/src/routes/PagesRoutes.jsx @@ -0,0 +1,24 @@ +import { lazy } from 'react'; +import { Navigate } from 'react-router-dom'; + +// @project +import Loadable from '@/components/Loadable'; +import AuthLayout from '@/layouts/AuthLayout'; + +// auth +const LoginPage = Loadable(lazy(() => import('@/views/auth/login'))); +const RegisterPage = Loadable(lazy(() => import('@/views/auth/register'))); + +/*************************** PAGES ROUTES ***************************/ + +const PagesRoutes = { + path: 'auth', + element: , + children: [ + { index: true, element: }, + { path: 'login', element: }, + { path: 'register', element: } + ] +}; + +export default PagesRoutes; diff --git a/admin/vite/src/routes/index.jsx b/admin/vite/src/routes/index.jsx new file mode 100644 index 0000000..302ff67 --- /dev/null +++ b/admin/vite/src/routes/index.jsx @@ -0,0 +1,13 @@ +import { createBrowserRouter } from 'react-router-dom'; + +// @routes +import MainRoutes from './MainRoutes'; +import PagesRoutes from './PagesRoutes'; + +/*************************** ROUTING RENDER ***************************/ + +const router = createBrowserRouter([PagesRoutes, MainRoutes], { + basename: import.meta.env.VITE_APP_BASE_URL +}); + +export default router; diff --git a/admin/vite/src/sections/auth/AuthLogin.jsx b/admin/vite/src/sections/auth/AuthLogin.jsx new file mode 100644 index 0000000..54871a5 --- /dev/null +++ b/admin/vite/src/sections/auth/AuthLogin.jsx @@ -0,0 +1,154 @@ +import PropTypes from 'prop-types'; +import { useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Alert from '@mui/material/Alert'; +import Button from '@mui/material/Button'; +import CircularProgress from '@mui/material/CircularProgress'; +import FormHelperText from '@mui/material/FormHelperText'; +import InputAdornment from '@mui/material/InputAdornment'; +import InputLabel from '@mui/material/InputLabel'; +import Link from '@mui/material/Link'; +import OutlinedInput from '@mui/material/OutlinedInput'; +import Stack from '@mui/material/Stack'; +import Box from '@mui/material/Box'; + +// @third-party +import { useForm } from 'react-hook-form'; + +// @project +import { APP_DEFAULT_PATH } from '@/config'; +import RouterLink from '@/components/Link'; +import { useRouter } from '@/utils/navigation'; +import { emailSchema, passwordSchema } from '@/utils/validation-schema/common'; + +// @icons +import { IconEye, IconEyeOff } from '@tabler/icons-react'; + +// Mock user credentials +const userCredentials = [ + { title: 'Super Admin', email: 'super_admin@saasable.io', password: 'Super@123' }, + { title: 'Admin', email: 'admin@saasable.io', password: 'Admin@123' }, + { title: 'User', email: 'user@saasable.io', password: 'User@123' } +]; + +function isChildObjectContained(parent, child) { + return Object.entries(child).every(([key, value]) => parent.hasOwnProperty(key) && parent[key] === value); +} + +/*************************** AUTH - LOGIN ***************************/ + +export default function AuthLogin({ inputSx }) { + const router = useRouter(); + const theme = useTheme(); + + const [isPasswordVisible, setIsPasswordVisible] = useState(false); + const [isProcessing, setIsProcessing] = useState(false); + const [loginError, setLoginError] = useState(''); + + // Initialize react-hook-form + const { + register, + watch, + handleSubmit, + reset, + formState: { errors } + } = useForm({ defaultValues: { email: 'super_admin@saasable.io', password: 'Super@123' } }); + + const formData = watch(); + + // Handle form submission + const onSubmit = (formData) => { + setIsProcessing(true); + setLoginError(''); + + router.push(APP_DEFAULT_PATH); + }; + + const commonIconProps = { size: 16, color: theme.palette.grey[700] }; + + return ( + <> + + {userCredentials.map((credential) => ( + + ))} + +
+ + + Email + + {errors.email?.message && {errors.email.message}} + + + + Password + setIsPasswordVisible(!isPasswordVisible)}> + {isPasswordVisible ? : } + + } + sx={inputSx} + /> + + {errors.password?.message && {errors.password.message}} + + Forgot Password? + + + + + + + + {loginError && ( + + {loginError} + + )} +
+ + ); +} + +AuthLogin.propTypes = { inputSx: PropTypes.any }; diff --git a/admin/vite/src/sections/auth/AuthRegister.jsx b/admin/vite/src/sections/auth/AuthRegister.jsx new file mode 100644 index 0000000..a9baed1 --- /dev/null +++ b/admin/vite/src/sections/auth/AuthRegister.jsx @@ -0,0 +1,164 @@ +import PropTypes from 'prop-types'; +import { useState, useRef } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Alert from '@mui/material/Alert'; +import Button from '@mui/material/Button'; +import CircularProgress from '@mui/material/CircularProgress'; +import FormHelperText from '@mui/material/FormHelperText'; +import Grid from '@mui/material/Grid'; +import InputAdornment from '@mui/material/InputAdornment'; +import InputLabel from '@mui/material/InputLabel'; +import OutlinedInput from '@mui/material/OutlinedInput'; + +// @third-party +import { useForm } from 'react-hook-form'; + +// @project +import Contact from '@/components/Contact'; +import { useRouter } from '@/utils/navigation'; +import { emailSchema, passwordSchema, firstNameSchema, lastNameSchema } from '@/utils/validation-schema/common'; + +// @icons +import { IconEye, IconEyeOff } from '@tabler/icons-react'; + +// @types + +/*************************** AUTH - REGISTER ***************************/ + +export default function AuthRegister({ inputSx }) { + const router = useRouter(); + + const theme = useTheme(); + const [isOpen, setIsOpen] = useState(false); + const [isConfirmOpen, setIsConfirmOpen] = useState(false); + const [isProcessing, setIsProcessing] = useState(false); + const [registerError, setRegisterError] = useState(''); + + // Initialize react-hook-form + const { + register, + handleSubmit, + watch, + control, + setValue, + formState: { errors } + } = useForm({ defaultValues: { dialcode: '+1' } }); + + const password = useRef({}); + password.current = watch('password', ''); + + // Handle form submission + const onSubmit = (formData) => { + setIsProcessing(true); + setRegisterError(''); + router.push('/auth/login'); + }; + + const commonIconProps = { size: 16, color: theme.palette.grey[700] }; + + return ( +
+ + + First Name + + {errors.firstname?.message && {errors.firstname?.message}} + + + Last Name + + {errors.lastname?.message && {errors.lastname?.message}} + + + Email + + {errors.email?.message && {errors.email?.message}} + + + Contact + setValue('dialcode', data.dialCode)} + control={control} + isError={Boolean(errors.contact)} + /> + {errors.contact?.message && {errors.contact?.message}} + + + + Password + setIsOpen(!isOpen)}> + {isOpen ? : } + + } + sx={inputSx} + /> + {errors.password?.message && {errors.password?.message}} + + + Confirm Password + value === password.current || 'The passwords do not match' })} + type={isConfirmOpen ? 'text' : 'password'} + placeholder="Enter confirm password" + fullWidth + error={Boolean(errors.confirmPassword)} + endAdornment={ + setIsConfirmOpen(!isConfirmOpen)}> + {isConfirmOpen ? : } + + } + sx={inputSx} + /> + {errors.confirmPassword?.message && {errors.confirmPassword?.message}} + + + + {registerError && ( + + {registerError} + + )} +
+ ); +} + +AuthRegister.propTypes = { inputSx: PropTypes.any }; diff --git a/admin/vite/src/sections/auth/AuthSocial.jsx b/admin/vite/src/sections/auth/AuthSocial.jsx new file mode 100644 index 0000000..65f431a --- /dev/null +++ b/admin/vite/src/sections/auth/AuthSocial.jsx @@ -0,0 +1,64 @@ +import PropTypes from 'prop-types'; + +// @mui +import Button from '@mui/material/Button'; +import CardMedia from '@mui/material/CardMedia'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +// @project +import GetImagePath from '@/utils/GetImagePath'; +import { SocialTypes } from '@/enum'; + +// @assets +import googleIcon from '@/assets/images/social/google.svg'; +import facebookIcon from '@/assets/images/social/facebook.svg'; +import appleLightIcon from '@/assets/images/social/apple-light.svg'; + +/*************************** SOCIAL BUTTON - DATA ***************************/ + +const authButtons = [ + { + label: 'Google', + icon: googleIcon, + title: 'Sign in with Google' + }, + { + label: 'Facebook', + icon: facebookIcon, + title: 'Sign in with Facebook' + }, + { + label: 'Apple', + icon: appleLightIcon, + title: 'Sign in with Apple' + } +]; + +/*************************** AUTH - SOCIAL ***************************/ + +export default function AuthSocial({ type = SocialTypes.VERTICAL, buttonSx }) { + return ( + + {authButtons.map((item, index) => ( + + ))} + + ); +} + +AuthSocial.propTypes = { type: PropTypes.any, SocialTypes: PropTypes.any, VERTICAL: PropTypes.any, buttonSx: PropTypes.any }; diff --git a/admin/vite/src/sections/auth/Copyright.jsx b/admin/vite/src/sections/auth/Copyright.jsx new file mode 100644 index 0000000..639dcf6 --- /dev/null +++ b/admin/vite/src/sections/auth/Copyright.jsx @@ -0,0 +1,48 @@ +// @mui +import Divider from '@mui/material/Divider'; +import Link from '@mui/material/Link'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +// @project +import branding from '@/branding.json'; + +/*************************** AUTH - COPYRIGHT ***************************/ + +export default function Copyright() { + const copyrightSX = { display: { xs: 'none', sm: 'flex' } }; + + const linkProps = { + variant: 'caption', + color: 'text.secondary', + target: '_blank', + underline: 'hover', + sx: { '&:hover': { color: 'primary.main' } } + }; + + return ( + + + + © 2024 {branding.brandName} + + + + Privacy Policy + + + + Terms & Conditions + + + + + + + © 2024 {branding.brandName} + + + + ); +} diff --git a/admin/vite/src/sections/components/color/ColorBox.jsx b/admin/vite/src/sections/components/color/ColorBox.jsx new file mode 100644 index 0000000..10e72e2 --- /dev/null +++ b/admin/vite/src/sections/components/color/ColorBox.jsx @@ -0,0 +1,45 @@ +import PropTypes from 'prop-types'; +// @mui +import Grid from '@mui/material/Grid'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +// @project +import MainCard from '@/components/MainCard'; + +/*************************** COLOR - CARD ***************************/ + +export default function ColorBox({ value, color, muiLabel, figmaLabel, figmaValue, main = false }) { + return ( + + + + + {value} + {figmaLabel} + + + + {muiLabel} + {figmaValue} + + + + ); +} + +ColorBox.propTypes = { + value: PropTypes.string, + color: PropTypes.string, + muiLabel: PropTypes.string, + figmaLabel: PropTypes.string, + figmaValue: PropTypes.string, + main: PropTypes.bool +}; diff --git a/admin/vite/src/sections/components/color/index.js b/admin/vite/src/sections/components/color/index.js new file mode 100644 index 0000000..b6cff13 --- /dev/null +++ b/admin/vite/src/sections/components/color/index.js @@ -0,0 +1 @@ +export { default as ColorBox } from './ColorBox'; diff --git a/admin/vite/src/sections/dashboard/AnalyticsOverviewCard.jsx b/admin/vite/src/sections/dashboard/AnalyticsOverviewCard.jsx new file mode 100644 index 0000000..71a8352 --- /dev/null +++ b/admin/vite/src/sections/dashboard/AnalyticsOverviewCard.jsx @@ -0,0 +1,96 @@ +// @mui +import { useTheme } from '@mui/material/styles'; +import Grid from '@mui/material/Grid'; + +// @project +import OverviewCard from '@/components/cards/OverviewCard'; +import { getRadiusStyles } from '@/utils/getRadiusStyles'; + +// @assets +import { IconArrowDown, IconArrowUp } from '@tabler/icons-react'; + +/*************************** CARDS - BORDER WITH RADIUS ***************************/ + +export function applyBorderWithRadius(radius, theme) { + return { + overflow: 'hidden', + '--Grid-borderWidth': '1px', + borderTop: 'var(--Grid-borderWidth) solid', + borderLeft: 'var(--Grid-borderWidth) solid', + borderColor: 'divider', + '& > div': { + overflow: 'hidden', + borderRight: 'var(--Grid-borderWidth) solid', + borderBottom: 'var(--Grid-borderWidth) solid', + borderColor: 'divider', + [theme.breakpoints.down('md')]: { + '&:nth-of-type(1)': getRadiusStyles(radius, 'topLeft'), + '&:nth-of-type(2)': getRadiusStyles(radius, 'topRight'), + '&:nth-of-type(3)': getRadiusStyles(radius, 'bottomLeft'), + '&:nth-of-type(4)': getRadiusStyles(radius, 'bottomRight') + }, + [theme.breakpoints.up('md')]: { + '&:first-of-type': getRadiusStyles(radius, 'topLeft', 'bottomLeft'), + '&:last-of-type': getRadiusStyles(radius, 'topRight', 'bottomRight') + } + } + }; +} + +/*************************** OVERVIEW CARD -DATA ***************************/ + +const overviewAnalytics = [ + { + title: 'Unique Visitors', + value: '23,876', + compare: 'Compare to last week', + chip: { + label: '24.5%', + avatar: + } + }, + { + title: 'Page View', + value: '30,450', + compare: 'Compare to last week', + chip: { + label: '20.5%', + avatar: + } + }, + { + title: 'Events', + value: '34,789', + compare: 'Compare to last week', + chip: { + label: '20.5%', + color: 'error', + avatar: + } + }, + { + title: 'Live Visitor', + value: '45,687', + compare: 'Compare to last week', + chip: { + label: '24.5%', + avatar: + } + } +]; + +/*************************** OVERVIEW - CARDS ***************************/ + +export default function AnalyticsOverviewCard() { + const theme = useTheme(); + + return ( + + {overviewAnalytics.map((item, index) => ( + + + + ))} + + ); +} diff --git a/admin/vite/src/sections/dashboard/AnalyticsOverviewChart.jsx b/admin/vite/src/sections/dashboard/AnalyticsOverviewChart.jsx new file mode 100644 index 0000000..1dce330 --- /dev/null +++ b/admin/vite/src/sections/dashboard/AnalyticsOverviewChart.jsx @@ -0,0 +1,274 @@ +import { useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import { LineChart } from '@mui/x-charts/LineChart'; +import Stack from '@mui/material/Stack'; +import Tab from '@mui/material/Tab'; +import Tabs from '@mui/material/Tabs'; +import Typography from '@mui/material/Typography'; + +// @project +import MainCard from '@/components/MainCard'; +import Legend from '@/components/third-party/chart/Legend'; +import { TabsType, ViewMode } from '@/enum'; + +/*************************** CHART - DATA ***************************/ + +const yearlyPoints = [ + new Date(2014, 0, 1), + new Date(2014, 2, 1), + new Date(2014, 5, 1), + new Date(2014, 8, 1), + new Date(2014, 11, 1), + new Date(2015, 0, 1), + new Date(2015, 2, 1), + new Date(2015, 5, 1), + new Date(2015, 8, 1), + new Date(2015, 11, 1), + new Date(2016, 0, 1), + new Date(2016, 2, 1), + new Date(2016, 5, 1), + new Date(2016, 8, 1), + new Date(2016, 11, 1), + new Date(2017, 0, 1), + new Date(2017, 2, 1), + new Date(2017, 5, 1), + new Date(2017, 8, 1), + new Date(2017, 11, 1), + new Date(2018, 0, 1), + new Date(2018, 2, 1), + new Date(2018, 5, 1), + new Date(2018, 8, 1), + new Date(2018, 11, 1), + new Date(2019, 0, 1), + new Date(2019, 2, 1), + new Date(2019, 5, 1), + new Date(2019, 8, 1), + new Date(2019, 11, 1), + new Date(2020, 0, 1), + new Date(2020, 2, 1), + new Date(2020, 5, 1), + new Date(2020, 8, 1), + new Date(2020, 11, 1), + new Date(2021, 0, 1), + new Date(2021, 2, 1), + new Date(2021, 5, 1), + new Date(2021, 8, 1), + new Date(2021, 11, 1), + new Date(2022, 0, 1), + new Date(2022, 2, 1), + new Date(2022, 5, 1), + new Date(2022, 8, 1), + new Date(2022, 11, 1), + new Date(2023, 0, 1), + new Date(2023, 2, 1), + new Date(2023, 5, 1), + new Date(2023, 8, 1), + new Date(2023, 11, 1) +]; + +const yearlyData = { + pageViewData: [ + 190, 230, 240, 230, 240, 230, 250, 270, 300, 320, 340, 360, 400, 420, 450, 470, 490, 500, 480, 450, 420, 380, 420, 380, 190, 230, 240, + 230, 240, 230, 250, 270, 300, 320, 400, 440, 480, 520, 540, 580, 620, 640, 680, 720, 650, 680, 720, 840, 950, 800 + ], + uniqueVisitorData: [ + 900, 920, 930, 860, 840, 820, 800, 840, 860, 840, 800, 780, 760, 790, 740, 710, 670, 650, 690, 750, 780, 760, 730, 680, 650, 620, 500, + 470, 430, 400, 380, 360, 340, 320, 300, 280, 260, 240, 220, 260, 300, 340, 380, 420, 460, 360, 450, 520, 450, 600 + ] +}; + +const monthlyPoints = [ + new Date(2023, 0, 1), + new Date(2023, 0, 15), + new Date(2023, 0, 31), + new Date(2023, 1, 1), + new Date(2023, 1, 15), + new Date(2023, 1, 28), + new Date(2023, 2, 1), + new Date(2023, 2, 15), + new Date(2023, 2, 31), + new Date(2023, 3, 1), + new Date(2023, 3, 15), + new Date(2023, 3, 30), + new Date(2023, 4, 1), + new Date(2023, 4, 15), + new Date(2023, 4, 31), + new Date(2023, 5, 1), + new Date(2023, 5, 15), + new Date(2023, 5, 30), + new Date(2023, 6, 1), + new Date(2023, 6, 15), + new Date(2023, 6, 31), + new Date(2023, 7, 1), + new Date(2023, 7, 15), + new Date(2023, 7, 31), + new Date(2023, 8, 1), + new Date(2023, 8, 15), + new Date(2023, 8, 30), + new Date(2023, 9, 1), + new Date(2023, 9, 15), + new Date(2023, 9, 31), + new Date(2023, 10, 1), + new Date(2023, 10, 15), + new Date(2023, 10, 30), + new Date(2023, 11, 1), + new Date(2023, 11, 15), + new Date(2023, 11, 31) +]; + +const monthlyData = { + pageViewData: [ + 190, 230, 240, 230, 300, 230, 250, 270, 230, 320, 340, 450, 400, 420, 485, 470, 490, 500, 480, 450, 420, 380, 420, 380, 400, 600, 575, + 540, 550, 520, 580, 570, 600, 600, 720, 780 + ], + uniqueVisitorData: [ + 900, 920, 930, 860, 840, 820, 800, 840, 860, 840, 800, 780, 760, 790, 740, 710, 670, 650, 690, 750, 780, 760, 730, 680, 650, 680, 630, + 510, 460, 460, 405, 460, 415, 430, 410, 500 + ] +}; + +const dailyPoints = [ + new Date(2024, 0, 1), + new Date(2024, 0, 2), + new Date(2024, 0, 3), + new Date(2024, 0, 4), + new Date(2024, 0, 5), + new Date(2024, 0, 6), + new Date(2024, 0, 7) +]; + +const dailyData = { + pageViewData: [10, 5, 12, 8, 35, 14, 30], + uniqueVisitorData: [15, 20, 22, 18, 21, 30, 38] +}; + +const timeFilter = ['Daily', 'Monthly', 'Yearly']; + +const valueFormatter = (date, view) => { + switch (view) { + case ViewMode.DAILY: + return date.toLocaleDateString('en-us', { weekday: 'short' }); + case ViewMode.MONTHLY: + return date.toLocaleDateString('en-US', { month: 'short' }); + case ViewMode.YEARLY: + default: + return date.getFullYear().toString(); + } +}; + +const tickInterval = (date, view) => { + switch (view) { + case ViewMode.MONTHLY: + return date.getDate() === 15; + case ViewMode.YEARLY: + return date.getMonth() === 5; + case ViewMode.DAILY: + default: + return true; + } +}; + +const dataMap = { [ViewMode.MONTHLY]: monthlyData, [ViewMode.DAILY]: dailyData, [ViewMode.YEARLY]: yearlyData }; + +/*************************** CHART - 1 ***************************/ + +export default function Chart1() { + const theme = useTheme(); + + const [view, setView] = useState(ViewMode.MONTHLY); + const [visibilityOption, setVisibilityOption] = useState({ + page_views: true, + unique_visitor: true + }); + + const handleViewChange = (_event, newValue) => { + setView(newValue); + }; + + const toggleVisibility = (id) => { + setVisibilityOption((prev) => ({ ...prev, [id]: !prev[id] })); + }; + + const seriesData = [ + { + id: 'page_views', + data: dataMap[view].pageViewData, + color: theme.palette.primary.light, + visible: visibilityOption['page_views'], + label: 'Page View' + }, + { + id: 'unique_visitor', + data: dataMap[view].uniqueVisitorData, + color: theme.palette.primary.main, + visible: visibilityOption['unique_visitor'], + label: 'Unique Visitor' + } + ]; + + const visibleSeries = seriesData.filter((s) => s.visible); + const lagendItems = seriesData.map((series) => ({ label: series.label, color: series.color, visible: series.visible, id: series.id })); + + const xData = view === ViewMode.MONTHLY ? monthlyPoints : view === ViewMode.DAILY ? dailyPoints : yearlyPoints; + + // Dynamic styles for visible series + const dynamicSeriesStyles = visibleSeries.reduce((acc, series) => { + acc[`& .MuiAreaElement-series-${series.id}`] = { fill: `url(#${series.id})`, opacity: series.id === 'page_views' ? 0 : 0.15 }; + return acc; + }, {}); + + return ( + + + + + + Analysis + + + Analyze user engagement and improve your product with real-time analytics. + + + + {timeFilter.map((filter, index) => ( + + ))} + + + + + + + ({ ...series, showMark: false, curve: 'linear', area: true }))} + height={261} + grid={{ horizontal: true }} + margin={{ top: 25, right: 0, bottom: -4, left: 0 }} + xAxis={[ + { + data: xData, + scaleType: 'point', + disableLine: true, + disableTicks: true, + valueFormatter: (value) => valueFormatter(value, view), + tickInterval: (time) => tickInterval(time, view) + } + ]} + yAxis={[{ scaleType: 'linear', disableLine: true, disableTicks: true, label: 'Visits' }]} + hideLegend + sx={{ '& .MuiLineElement-root': { strokeDasharray: '0', strokeWidth: 2 }, ...dynamicSeriesStyles }} + > + + {visibleSeries.map((series, index) => ( + + + + + ))} + + + + ); +} diff --git a/admin/vite/src/sections/dashboard/AnalyticsTopRef.jsx b/admin/vite/src/sections/dashboard/AnalyticsTopRef.jsx new file mode 100644 index 0000000..2f2e5ca --- /dev/null +++ b/admin/vite/src/sections/dashboard/AnalyticsTopRef.jsx @@ -0,0 +1,251 @@ +import PropTypes from 'prop-types'; +import { useState } from 'react'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Grid from '@mui/material/Grid'; +import Stack from '@mui/material/Stack'; +import Tab from '@mui/material/Tab'; +import Tabs from '@mui/material/Tabs'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +// @project +import ProgressCard from '@/components/cards/ProgressCard'; +import { TabsType } from '@/enum'; +import { getRadiusStyles } from '@/utils/getRadiusStyles'; + +/*************************** TABS - DATA ***************************/ + +const sevenDaysData = [ + { title: 'Direct', value: '16,890', progress: { value: 45 } }, + { title: 'Google.com', value: '4,909', progress: { value: 56 } }, + { title: 'Remix.com', value: '550', progress: { value: 74 } }, + { title: 'dev.to', value: '140', progress: { value: 25 } }, + { title: 'acpc.api.ic.io', value: '8,675', progress: { value: 45 } }, + { title: 'wewe.uv.us', value: '4,900', progress: { value: 95 } } +]; + +const monthData = [ + { title: 'Direct', value: '67,560', progress: { value: 75 } }, + { title: 'Google.com', value: '19,636', progress: { value: 45 } }, + { title: 'Remix.com', value: '2,220', progress: { value: 10 } }, + { title: 'dev.to', value: '560', progress: { value: 89 } }, + { title: 'acpc.api.ic.io', value: '34,700', progress: { value: 95 } }, + { title: 'wewe.uv.us', value: '19,600', progress: { value: 74 } } +]; + +const yearData = [ + { title: 'Direct', value: '8,10,720', progress: { value: 52 } }, + { title: 'Google.com', value: '2,35,632', progress: { value: 45 } }, + { title: 'Remix.com', value: '26,640', progress: { value: 85 } }, + { title: 'dev.to', value: '6,720', progress: { value: 42 } }, + { title: 'acpc.api.ic.io', value: '4,16,400', progress: { value: 55 } }, + { title: 'wewe.uv.us', value: '2,35,200', progress: { value: 45 } } +]; + +const routesData = [ + { title: 'Home', value: '16,890', progress: { value: 15 } }, + { title: 'Pricing', value: '4,909', progress: { value: 78 } }, + { title: 'Change-log', value: '550', progress: { value: 25 } }, + { title: 'Feature', value: '140', progress: { value: 47 } }, + { title: 'Service', value: '8,675', progress: { value: 20 } }, + { title: 'Pricing', value: '4,900', progress: { value: 74 } } +]; + +const pageData = [ + { title: 'Home', value: '67,560', progress: { value: 45 } }, + { title: 'Pricing', value: '19,636', progress: { value: 25 } }, + { title: 'Change-log', value: '2,220', progress: { value: 74 } }, + { title: 'Feature', value: '560', progress: { value: 44 } }, + { title: 'Service', value: '34,700', progress: { value: 41 } }, + { title: 'Pricing', value: '19,600', progress: { value: 95 } } +]; + +const affiliateData = [ + { title: 'No-Refference', value: '16,890', progress: { value: 44 } }, + { title: 'Medium', value: '4,909', progress: { value: 90 } }, + { title: 'remaixblock.com', value: '550', progress: { value: 20 } }, + { title: 'remaix-pge-block-hero', value: '140', progress: { value: 85 } }, + { title: 'remaix-pge-block-banner', value: '8,675', progress: { value: 75 } }, + { title: 'dev.io', value: '4,900', progress: { value: 78 } } +]; + +const campaignData = [ + { title: 'No-Refference', value: '67,560', progress: { value: 25 } }, + { title: 'Medium', value: '19,636', progress: { value: 74 } }, + { title: 'remaixblock.com', value: '2,220', progress: { value: 65 } }, + { title: 'remaix-pge-block-hero', value: '560', progress: { value: 45 } }, + { title: 'remaix-pge-block-banner', value: '34,700', progress: { value: 85 } }, + { title: 'dev.io', value: '19,600', progress: { value: 47 } } +]; + +const marketingData = [ + { title: 'No-Refference', value: '8,10,720', progress: { value: 41 } }, + { title: 'Medium', value: '2,35,632', progress: { value: 35 } }, + { title: 'remaixblock.com', value: '26,640', progress: { value: 55 } }, + { title: 'remaix-pge-block-hero', value: '6,720', progress: { value: 75 } }, + { title: 'remaix-pge-block-banner', value: '4,16,400', progress: { value: 100 } }, + { title: 'dev.io', value: '2,35,200', progress: { value: 20 } } +]; + +/*************************** TABS - A11Y ***************************/ + +function a11yProps(value) { + return { value: value, id: `simple-tab-${value}`, 'aria-controls': `simple-tabpanel-${value}` }; +} + +/*************************** TABS - PANEL ***************************/ + +function TabPanel({ children, value, index, ...other }) { + return ( + + ); +} + +/*************************** TABS - CONTENT ***************************/ + +function TabContent({ data }) { + return ( + + {data.map((item, index) => ( + + ))} + + ); +} + +/*************************** CARDS - BORDER WITH RADIUS ***************************/ + +export function applyBorderWithRadius(radius, theme) { + return { + overflow: 'hidden', + '--Grid-borderWidth': '1px', + borderTop: 'var(--Grid-borderWidth) solid', + borderLeft: 'var(--Grid-borderWidth) solid', + borderColor: 'divider', + '& > div': { + overflow: 'hidden', + borderRight: 'var(--Grid-borderWidth) solid', + borderBottom: 'var(--Grid-borderWidth) solid', + borderColor: 'divider', + [theme.breakpoints.only('xs')]: { + '&:first-of-type': getRadiusStyles(radius, 'topLeft', 'topRight'), + '&:last-of-type': getRadiusStyles(radius, 'bottomLeft', 'bottomRight') + }, + [theme.breakpoints.between('sm', 'md')]: { + '&:nth-of-type(1)': getRadiusStyles(radius, 'topLeft'), + '&:nth-of-type(2)': getRadiusStyles(radius, 'topRight'), + '&:nth-of-type(3)': getRadiusStyles(radius, 'bottomLeft', 'bottomRight') + }, + [theme.breakpoints.up('md')]: { + '&:first-of-type': getRadiusStyles(radius, 'topLeft', 'bottomLeft'), + '&:last-of-type': getRadiusStyles(radius, 'topRight', 'bottomRight') + } + } + }; +} + +/*************************** CARDS - TOP REFERRERS ***************************/ +export default function TopReferrers() { + const theme = useTheme(); + const [httpReferrers, setHttpReferrers] = useState('days'); + const [pages, setPages] = useState('routes'); + const [sources, setSources] = useState('affiliate'); + + // Separate handleChange functions + const handleHTTPReferrers = (event, newValue) => { + setHttpReferrers(newValue); + }; + + const handlePages = (event, newValue) => { + setPages(newValue); + }; + + const handleSources = (event, newValue) => { + setSources(newValue); + }; + + return ( + <> + + + + Top HTTP Referrers + + + + + + + + + + + + + + + + + + + + + Top Pages + + + + + + + + + + + + + + + + + Top Sources + + + + + + + + + + + + + + + + + + + + + ); +} + +TabPanel.propTypes = { + children: PropTypes.any, + value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + index: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + other: PropTypes.any +}; + +TabContent.propTypes = { data: PropTypes.array }; diff --git a/admin/vite/src/states/breadcrumbs.js b/admin/vite/src/states/breadcrumbs.js new file mode 100644 index 0000000..622fb21 --- /dev/null +++ b/admin/vite/src/states/breadcrumbs.js @@ -0,0 +1,57 @@ +import { useEffect, useMemo } from 'react'; + +// @third-party +import useSWR, { mutate } from 'swr'; + +// @project +import { usePathname } from '@/utils/navigation'; + +const initialState = { + activePath: '', + data: [] +}; + +export const endpoints = { + key: 'api/breadcrumbs', + master: 'master' +}; + +export function useGetBreadcrumbsMaster() { + // to fetch initial state based on endpoints + + const { data, isLoading } = useSWR(endpoints.key + endpoints.master, () => initialState, { + revalidateIfStale: false, + revalidateOnFocus: false, + revalidateOnReconnect: false + }); + + // reset cache if currentPath doesn't match activePath + const currentPath = usePathname(); + useEffect(() => { + if (data && data.activePath !== currentPath) { + mutate(endpoints.key + endpoints.master, initialState, false); + } + }, [currentPath, data]); + + const memoizedValue = useMemo( + () => ({ + breadcrumbsMaster: data, + breadcrumbsMasterLoading: isLoading + }), + [data, isLoading] + ); + + return memoizedValue; +} + +export function handlerBreadcrumbs(activePath, data) { + // to update `openedItem` local state based on key + + mutate( + endpoints.key + endpoints.master, + (currentBreadcrumbsMaster = initialState) => { + return { ...currentBreadcrumbsMaster, activePath, data }; + }, + false + ); +} diff --git a/admin/vite/src/states/menu.js b/admin/vite/src/states/menu.js new file mode 100644 index 0000000..102e373 --- /dev/null +++ b/admin/vite/src/states/menu.js @@ -0,0 +1,58 @@ +import { useMemo } from 'react'; + +// @third-party +import useSWR, { mutate } from 'swr'; + +const initialState = { + openedItem: '', + isDashboardDrawerOpened: false +}; + +export const endpoints = { + key: 'api/menu', + master: 'master' +}; + +export function useGetMenuMaster() { + // to fetch initial state based on endpoints + + const { data, isLoading } = useSWR(endpoints.key + endpoints.master, () => initialState, { + revalidateIfStale: false, + revalidateOnFocus: false, + revalidateOnReconnect: false + }); + + const memoizedValue = useMemo( + () => ({ + menuMaster: data, + menuMasterLoading: isLoading + }), + [data, isLoading] + ); + + return memoizedValue; +} + +export function handlerDrawerOpen(isDashboardDrawerOpened) { + // to update `isDashboardDrawerOpened` local state based on key + + mutate( + endpoints.key + endpoints.master, + (currentMenuMaster = initialState) => { + return { ...currentMenuMaster, isDashboardDrawerOpened }; + }, + false + ); +} + +export function handlerActiveItem(openedItem) { + // to update `openedItem` local state based on key + + mutate( + endpoints.key + endpoints.master, + (currentMenuMaster = initialState) => { + return { ...currentMenuMaster, openedItem }; + }, + false + ); +} diff --git a/admin/vite/src/states/snackbar.js b/admin/vite/src/states/snackbar.js new file mode 100644 index 0000000..db3c6ee --- /dev/null +++ b/admin/vite/src/states/snackbar.js @@ -0,0 +1,119 @@ +import { useMemo } from 'react'; + +// @third-party +import useSWR, { mutate } from 'swr'; + +const endpoints = { + key: 'snackbar' +}; + +const initialState = { + action: false, + open: false, + message: 'Note archived', + anchorOrigin: { + vertical: 'bottom', + horizontal: 'right' + }, + variant: 'default', + alert: { + color: 'primary', + variant: 'filled' + }, + transition: 'Zoom', + close: false, + actionButton: false, + maxStack: 3, + dense: false, + iconVariant: 'useemojis', + hideIconVariant: false +}; + +export function useGetSnackbar() { + const { data } = useSWR(endpoints.key, () => initialState, { + revalidateIfStale: false, + revalidateOnFocus: false, + revalidateOnReconnect: false + }); + + const memoizedValue = useMemo(() => ({ snackbar: data }), [data]); + + return memoizedValue; +} + +export function openSnackbar(snackbar) { + // to update local state based on key + + const { action, open, message, anchorOrigin, variant, alert, transition, close, actionButton } = snackbar; + + mutate( + endpoints.key, + (currentSnackbar) => { + const safeSnackbar = currentSnackbar || initialState; + return { + ...safeSnackbar, + action: action || initialState.action, + open: open || initialState.open, + message: message || initialState.message, + anchorOrigin: anchorOrigin || initialState.anchorOrigin, + variant: variant || initialState.variant, + alert: { + color: alert?.color || initialState.alert.color, + variant: alert?.variant || initialState.alert.variant + }, + transition: transition || initialState.transition, + close: close || initialState.close, + actionButton: actionButton || initialState.actionButton + }; + }, + false + ); +} + +export function closeSnackbar() { + // to update local state based on key + mutate( + endpoints.key, + (currentSnackbar) => { + const safeSnackbar = currentSnackbar || initialState; + return { ...safeSnackbar, open: false }; + }, + false + ); +} + +export function handlerIncrease(maxStack) { + // to update local state based on key + mutate( + endpoints.key, + (currentSnackbar) => { + const safeSnackbar = currentSnackbar || initialState; + return { ...safeSnackbar, maxStack }; + }, + false + ); +} + +export function handlerDense(dense) { + // to update local state based on key + mutate( + endpoints.key, + (currentSnackbar) => { + const safeSnackbar = currentSnackbar || initialState; + return { ...safeSnackbar, dense }; + }, + false + ); +} + +export function handlerIconVariants(iconVariant) { + // to update local state based on key + mutate( + endpoints.key, + (currentSnackbar) => { + const safeSnackbar = currentSnackbar || initialState; + return { ...safeSnackbar, iconVariant, hideIconVariant: iconVariant === 'hide' }; + }, + false + ); +} diff --git a/admin/vite/src/themes/index.jsx b/admin/vite/src/themes/index.jsx new file mode 100644 index 0000000..6c95512 --- /dev/null +++ b/admin/vite/src/themes/index.jsx @@ -0,0 +1,57 @@ +'use client'; +import PropTypes from 'prop-types'; + +import { useMemo } from 'react'; + +// @mui +import { createTheme, ThemeProvider } from '@mui/material/styles'; +import CssBaseline from '@mui/material/CssBaseline'; + +// @project +import palette from './palette'; +import componentsOverride from './overrides'; +import Shadows from './shadow'; +import typography from './typography'; + +import useConfig from '@/hooks/useConfig'; + +/*************************** DEFAULT THEME - MAIN ***************************/ + +export default function ThemeCustomization({ children }) { + const { mode, themeDirection } = useConfig(); + + const themePalette = useMemo(() => palette(mode), [mode]); + + const themeDefault = createTheme({ + breakpoints: { + values: { + xs: 0, + sm: 768, + md: 1024, + lg: 1266, + xl: 1440 + } + }, + direction: themeDirection, + palette: themePalette, + customShadows: {} + }); + + // create duplicate theme due to responsive typography and fontFamily + const theme = createTheme({ + ...themeDefault, + typography: typography(themeDefault), + customShadows: Shadows(themeDefault) + }); + + theme.components = componentsOverride(theme); + + return ( + + + {children} + + ); +} + +ThemeCustomization.propTypes = { children: PropTypes.any }; diff --git a/admin/vite/src/themes/overrides/Alert.js b/admin/vite/src/themes/overrides/Alert.js new file mode 100644 index 0000000..f4bdb88 --- /dev/null +++ b/admin/vite/src/themes/overrides/Alert.js @@ -0,0 +1,13 @@ +/*************************** OVERRIDES - ALERT ***************************/ + +export default function Alert() { + return { + MuiAlert: { + styleOverrides: { + icon: { + fontSize: 20 + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Avatar.jsx b/admin/vite/src/themes/overrides/Avatar.jsx new file mode 100644 index 0000000..e13fcb2 --- /dev/null +++ b/admin/vite/src/themes/overrides/Avatar.jsx @@ -0,0 +1,110 @@ +// @project +import { AvatarSize } from '@/enum'; + +// @assets +import { IconUser } from '@tabler/icons-react'; + +const colors = ['primary', 'secondary', 'success', 'error', 'warning', 'info']; + +/*************************** AVATAR - SIZE ***************************/ + +const badgeSX = { border: '2px solid', borderRadius: '50%' }; + +const avatarSizes = (theme) => ({ + [AvatarSize.BADGE]: { + fontSize: 10, + lineHeight: 14, + fontWeight: 400, + width: 20, + height: 20, + '& ~ span.MuiBadge-dot': { ...badgeSX, borderWidth: 1 }, + '& svg': { width: 14, height: 14 } + }, + [AvatarSize.XXS]: { + ...theme.typography.caption, + width: 24, + height: 24, + '& ~ span.MuiBadge-dot': { ...badgeSX, borderWidth: 1 }, + '& svg': { width: 14, height: 14 } + }, + [AvatarSize.XS]: { + ...theme.typography.caption, + width: 32, + height: 32, + '& ~ span.MuiBadge-dot': { width: 10, height: 10, ...badgeSX }, + '& svg': { width: 16, height: 16 } + }, + [AvatarSize.SM]: { + ...theme.typography.caption, + width: 40, + height: 40, + '& ~ span.MuiBadge-dot': { width: 12, height: 12, ...badgeSX }, + '& svg': { width: 16, height: 16 } + }, + [AvatarSize.MD]: { ...theme.typography.body2, width: 48, height: 48, '& ~ span.MuiBadge-dot': { width: 14, height: 14, ...badgeSX } }, + [AvatarSize.LG]: { ...theme.typography.body1, width: 56, height: 56, '& ~ span.MuiBadge-dot': { width: 16, height: 16, ...badgeSX } }, + [AvatarSize.XL]: { + ...theme.typography.h6, + fontWeight: 400, + width: 64, + height: 64, + '& ~ span.MuiBadge-dot': { width: 18, height: 18, ...badgeSX }, + '& svg': { width: 32, height: 32 } + } +}); + +/*************************** OVERRIDES - AVATAR ***************************/ + +export default function Avatar(theme) { + const sizeVariants = (theme) => { + const styles = avatarSizes(theme); + + return Object.values(AvatarSize).map((size) => ({ + props: { size }, + style: styles[size] + })); + }; + + const colorVariants = colors.map((color) => { + const paletteColor = theme.palette[color]; + + return { + props: { color }, + style: { + color: paletteColor.main, + backgroundColor: paletteColor.light + } + }; + }); + + return { + MuiAvatar: { + defaultProps: { + children: , + color: 'primary', + size: AvatarSize.SM + }, + styleOverrides: { + root: { + variants: [ + { + props: { color: 'default' }, + style: { + color: theme.palette.primary.darker, + backgroundColor: theme.palette.primary.lighter + } + }, + ...colorVariants, + ...sizeVariants(theme), + { + props: { variant: 'rounded' }, + style: { + borderRadius: 8 + } + } + ] + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/AvatarGroup.js b/admin/vite/src/themes/overrides/AvatarGroup.js new file mode 100644 index 0000000..2c9b41f --- /dev/null +++ b/admin/vite/src/themes/overrides/AvatarGroup.js @@ -0,0 +1,18 @@ +/*************************** OVERRIDES - AVATAR GROUP ***************************/ + +export default function AvatarGroup() { + return { + MuiAvatarGroup: { + defaultProps: { + slotProps: { + additionalAvatar: { + color: 'default' + } + } + }, + styleOverrides: { + avatar: { width: 32, height: 32 } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Backdrop.js b/admin/vite/src/themes/overrides/Backdrop.js new file mode 100644 index 0000000..d742a3e --- /dev/null +++ b/admin/vite/src/themes/overrides/Backdrop.js @@ -0,0 +1,16 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +/*************************** OVERRIDES - BACKDROP ***************************/ + +export default function Backdrop(theme) { + return { + MuiBackdrop: { + styleOverrides: { + root: { + backgroundColor: alpha(theme.palette.grey[900], 0.2) + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/BarLabel.jsx b/admin/vite/src/themes/overrides/BarLabel.jsx new file mode 100644 index 0000000..0fc689a --- /dev/null +++ b/admin/vite/src/themes/overrides/BarLabel.jsx @@ -0,0 +1,13 @@ +/*************************** OVERRIDES - BAR LABEL ***************************/ + +export default function BarLabel(theme) { + return { + MuiBarLabel: { + styleOverrides: { + root: { + fill: theme.palette.text.secondary + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Breadcrumbs.jsx b/admin/vite/src/themes/overrides/Breadcrumbs.jsx new file mode 100644 index 0000000..c849fcd --- /dev/null +++ b/admin/vite/src/themes/overrides/Breadcrumbs.jsx @@ -0,0 +1,15 @@ +/*************************** COMPONENT - BREADCRUMBS ***************************/ + +export default function Breadcrumbs(theme) { + return { + MuiBreadcrumbs: { + styleOverrides: { + separator: { + color: theme.palette.text.secondary, + marginLeft: 4, + marginRight: 4 + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Button.js b/admin/vite/src/themes/overrides/Button.js new file mode 100644 index 0000000..df6f622 --- /dev/null +++ b/admin/vite/src/themes/overrides/Button.js @@ -0,0 +1,122 @@ +// @project +import { generateFocusStyle } from '@/utils/generateFocusStyle'; + +// Define the list of colors that the Radio component will support +const colors = ['primary', 'secondary', 'success', 'error', 'warning', 'info']; + +/*************************** OVERRIDES - BUTTON ***************************/ + +export default function Button(theme) { + const boxShadow = { + boxShadow: theme.customShadows.button, + '&:hover': { + boxShadow: theme.customShadows.button + } + }; + + const textColorVariants = colors.map((color) => { + const paletteColor = theme.palette[color]; + return { + props: { variant: 'text', color }, + style: { + ...theme.applyStyles('dark', { color: paletteColor.light }) + } + }; + }); + + const outlinedColorVariants = colors.map((color) => { + const paletteColor = theme.palette[color]; + return { + props: { variant: 'outlined', color }, + style: { + ...boxShadow, + borderColor: paletteColor.lighter, + ...(color === 'secondary' && { + borderColor: theme.palette.divider, + color: theme.palette.text.primary + }) + } + }; + }); + + return { + MuiButton: { + defaultProps: { + disableFocusRipple: true + }, + styleOverrides: { + root: { + borderRadius: 8, + '&.Mui-disabled': { + cursor: 'not-allowed', + pointerEvents: 'auto', + '&:hover': { + backgroundColor: 'transparent', + '&.MuiButton-contained': { + backgroundColor: theme.palette.action.disabledBackground + } + } + }, + '&:focus-visible': { + ...generateFocusStyle(theme.palette.primary.main) + }, + // loading styles + '&.MuiButton-loading': { + '.MuiButton-loadingIndicator': { position: 'relative' }, + + // Styles specific to loadingPositionEnd + '&.MuiButton-loadingPositionEnd': { + '.MuiButton-loadingIndicator': { right: 'unset', marginLeft: 8 }, + '.MuiButton-endIcon': { display: 'none' } + }, + + // Styles specific to loadingPositionStart + '&.MuiButton-loadingPositionStart': { + '.MuiButton-loadingIndicator': { left: 'unset', marginRight: 8 }, + '.MuiButton-startIcon': { display: 'none' } + } + }, + variants: [ + ...textColorVariants, + ...outlinedColorVariants, + { + props: { variant: 'text', color: 'secondary' }, + style: { + color: theme.palette.text.primary + } + } + ] + }, + contained: { ...boxShadow }, + startIcon: { + marginLeft: 0, + marginRight: 4 + }, + endIcon: { + marginLeft: 4 + }, + sizeSmall: { + height: 36, + fontSize: 12, + lineHeight: '16px', + letterSpacing: 0, + padding: 10 + }, + sizeMedium: { + height: 42, + fontSize: 14, + lineHeight: '18px', + letterSpacing: 0, + padding: 12 + }, + sizeLarge: { + height: 48, + fontSize: 16, + lineHeight: '20px', + letterSpacing: 0, + padding: '16px 18px' + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/CardActions.jsx b/admin/vite/src/themes/overrides/CardActions.jsx new file mode 100644 index 0000000..531a3d5 --- /dev/null +++ b/admin/vite/src/themes/overrides/CardActions.jsx @@ -0,0 +1,11 @@ +/*************************** OVERRIDES - CARD ACTIONS ***************************/ + +export default function CardActions(theme) { + return { + MuiCardActions: { + styleOverrides: { + root: { padding: 20, borderTop: `1px solid ${theme.palette.divider}` } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/CardContent.jsx b/admin/vite/src/themes/overrides/CardContent.jsx new file mode 100644 index 0000000..993a54c --- /dev/null +++ b/admin/vite/src/themes/overrides/CardContent.jsx @@ -0,0 +1,9 @@ +/*************************** OVERRIDES - CARD CONTENT ***************************/ + +export default function CardContent() { + return { + MuiCardContent: { + styleOverrides: { root: { padding: 20 } } + } + }; +} diff --git a/admin/vite/src/themes/overrides/CardHeader.jsx b/admin/vite/src/themes/overrides/CardHeader.jsx new file mode 100644 index 0000000..7db3f72 --- /dev/null +++ b/admin/vite/src/themes/overrides/CardHeader.jsx @@ -0,0 +1,14 @@ +/*************************** OVERRIDES - CARD HEADER ***************************/ + +export default function CardHeader(theme) { + return { + MuiCardHeader: { + styleOverrides: { + root: { padding: 20, borderBottom: `1px solid ${theme.palette.divider}` }, + action: { margin: 0 }, + content: {}, + title: { '& ~ span.MuiCardHeader-subheader': { marginTop: 4 } } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/ChartsAxis.js b/admin/vite/src/themes/overrides/ChartsAxis.js new file mode 100644 index 0000000..f90828d --- /dev/null +++ b/admin/vite/src/themes/overrides/ChartsAxis.js @@ -0,0 +1,18 @@ +/*************************** OVERRIDES - CHARTS AXIS ***************************/ + +export default function ChartsAxis(theme) { + return { + MuiChartsAxis: { + styleOverrides: { + root: { + '& .MuiChartsAxis-tickLabel': { + fill: theme.palette.text.secondary + }, + '& .MuiChartsAxis-line': { + stroke: theme.palette.divider + } + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/ChartsAxisHighlight.js b/admin/vite/src/themes/overrides/ChartsAxisHighlight.js new file mode 100644 index 0000000..2cd800b --- /dev/null +++ b/admin/vite/src/themes/overrides/ChartsAxisHighlight.js @@ -0,0 +1,13 @@ +/*************************** OVERRIDES - CHARTS AXIS HIGHLIGHT ***************************/ + +export default function ChartsAxiasHighlight(theme) { + return { + MuiChartsAxisHighlight: { + styleOverrides: { + root: { + stroke: theme.palette.grey[600] + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/ChartsTooltip.js b/admin/vite/src/themes/overrides/ChartsTooltip.js new file mode 100644 index 0000000..7efc404 --- /dev/null +++ b/admin/vite/src/themes/overrides/ChartsTooltip.js @@ -0,0 +1,24 @@ +/*************************** OVERRIDES - CHARTS TOOLTIP ***************************/ + +export default function ChartsTooltip(theme) { + return { + MuiChartsTooltip: { + styleOverrides: { + root: { + '& .MuiChartsTooltip-paper': { + border: `1px solid ${theme.palette.divider}`, + borderRadius: 8, + boxShadow: theme.customShadows.section + }, + '& .MuiChartsTooltip-row': { + '&:first-of-type .MuiChartsTooltip-cell': { paddingTop: 14 }, + '&:last-of-type .MuiChartsTooltip-cell': { paddingBottom: 14 } + }, + '& .MuiChartsTooltip-cell': { paddingTop: 6, paddingBottom: 6 }, + '& .MuiChartsTooltip-labelCell': { '& .MuiTypography-root': { color: theme.palette.text.secondary } }, + '& .MuiChartsTooltip-valueCell': { '& .MuiTypography-root': { ...theme.typography.subtitle1 } } + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Chip.jsx b/admin/vite/src/themes/overrides/Chip.jsx new file mode 100644 index 0000000..65e8dda --- /dev/null +++ b/admin/vite/src/themes/overrides/Chip.jsx @@ -0,0 +1,279 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +// @project +import { ChipIconPosition } from '@/enum'; +import { generateFocusStyle } from '@/utils/generateFocusStyle'; + +// @assets +import { IconX } from '@tabler/icons-react'; + +/*************************** OVERRIDES - CHIP ***************************/ + +export default function Chip(theme) { + return { + MuiChip: { + defaultProps: { + variant: 'light', // Default variant is 'light' + deleteIcon: + }, + styleOverrides: { + root: { + height: '100%', + '&.Mui-focusVisible': { + ...generateFocusStyle(theme.palette.primary.main) + }, + variants: [ + { + props: { variant: 'text' }, // Variant for text Chip + style: ({ ownerState }) => { + const paletteColor = theme.palette[ownerState.color]; + return { + backgroundColor: 'transparent', // Transparent background for text variant + ...(paletteColor && { + color: paletteColor.main + }), + '& .MuiChip-label': { + padding: 0 + }, + '& .MuiChip-icon': { + marginRight: 2, + marginLeft: 0 + }, + '& .MuiChip-avatar': { + marginLeft: 0, + marginRight: 4, + ...(paletteColor && { + color: paletteColor.main, + backgroundColor: paletteColor.light + }) + }, + '&[position="right"]': { + '& .MuiChip-icon': { + marginLeft: 2, // Adjust margin when icon is on the right + marginRight: 0 + }, + '& .MuiChip-avatar': { + marginLeft: 4, // Adjust margin when avatar is on the right + marginRight: 0 + } + } + }; + } + }, + { + props: { variant: 'light' }, // Variant for light Chip + style: ({ ownerState }) => { + const paletteColor = theme.palette[ownerState.color]; + return { + ...(paletteColor && { + color: paletteColor.main, + backgroundColor: paletteColor.lighter, + ...theme.applyStyles('dark', { backgroundColor: alpha(paletteColor.lighter, 0.4) }) + }), + '& .MuiChip-label': { + padding: '2px 8px' // Padding for the label + }, + '& .MuiChip-icon': { + marginLeft: 2, + marginRight: -8 // Adjust margins for the icon + }, + '& .MuiChip-avatar': { + margin: 4, + marginRight: -4, + ...(paletteColor && { + color: paletteColor.lighter, + backgroundColor: paletteColor.main, + ...theme.applyStyles('dark', { color: paletteColor.main, backgroundColor: paletteColor.lighter }) + }) + }, + '& .MuiChip-deleteIcon': { + margin: 4, + marginLeft: -4, + ...(paletteColor && { + color: paletteColor.main, + backgroundColor: paletteColor.lighter, + '&:hover': { color: paletteColor.dark }, + ...theme.applyStyles('dark', { backgroundColor: 'transparent', '&:hover': { color: paletteColor.darker } }) + }) + }, + '&.Mui-focusVisible': { + ...(paletteColor && { backgroundColor: paletteColor.main }) + } + }; + } + }, + { + props: { variant: 'filled' }, // Variant for filled Chip + style: ({ ownerState }) => { + const paletteColor = theme.palette[ownerState.color]; + return { + ...theme.applyStyles('dark', { ...(paletteColor && { backgroundColor: paletteColor.light }) }), + '& .MuiChip-label': { + padding: '2px 8px' // Padding for the label + }, + '& .MuiChip-icon': { + marginLeft: 2, + marginRight: -8 // Adjust margins for the icon + }, + '& .MuiChip-avatar': { + margin: 4, + marginRight: -4, + ...(paletteColor && { + color: paletteColor.main, + backgroundColor: paletteColor.lighter, + ...theme.applyStyles('dark', { color: paletteColor.darker }) + }) + } + }; + } + }, + { + props: { variant: 'outlined' }, // Variant for outlined Chip + style: ({ ownerState }) => { + const paletteColor = theme.palette[ownerState.color]; + return { + ...theme.applyStyles('dark', { + ...(paletteColor && { + color: paletteColor.light, + borderColor: paletteColor.light, + '& .MuiChip-deleteIcon': { color: paletteColor.light } + }) + }), + '& .MuiChip-label': { + padding: '1px 7px' // Padding for the label + }, + '& .MuiChip-icon': { + width: 18, + height: 18, + marginLeft: 2, + marginRight: -8 // Adjust margins for the icon + }, + '& .MuiChip-avatar': { + margin: 4, + marginRight: -4, + ...(paletteColor && { + color: paletteColor.main, + backgroundColor: paletteColor.lighter, + ...theme.applyStyles('dark', { color: theme.palette.background.default, backgroundColor: paletteColor.light }) + }) + } + }; + } + }, + { + props: { position: ChipIconPosition.RIGHT }, // Custom position for icon/avatar + style: { + '& .MuiChip-icon': { + order: 2, // Set order to position icon on the right + marginRight: 2, + marginLeft: -8 + }, + '& .MuiChip-avatar': { + order: 2, // Set order to position avatar on the right + marginLeft: -4, + marginRight: 4 + } + } + }, + { + props: { variant: 'tag' }, // Variant for tag Chip + style: ({ ownerState }) => { + const paletteColor = theme.palette[ownerState.color]; + + return { + backgroundColor: 'transparent', + borderRadius: 6, + border: `1px solid ${theme.palette.grey[200]}`, + '&:active': { + boxShadow: 'none' + }, + ...(paletteColor === undefined && { + color: theme.palette.text.secondary, + '&:hover': { backgroundColor: theme.palette.grey[50] } + }), + ...(paletteColor && { + borderColor: paletteColor.lighter, + color: paletteColor.main, + ...theme.applyStyles('dark', { color: paletteColor.light }), + '&:hover': { backgroundColor: alpha(paletteColor.lighter, 0.2) } + }), + '& .MuiChip-label': { + fontWeight: 400, + padding: '1px 5px' // Padding for the label + }, + '& .MuiChip-avatar': { + borderRadius: 6, + marginLeft: -2, + '& + .MuiChip-label': { + padding: '3px 6px' + }, + ...(paletteColor === undefined && { + color: theme.palette.text.secondary, + backgroundColor: theme.palette.grey[300] + }), + ...(paletteColor && { + color: paletteColor.dark, + backgroundColor: paletteColor.light, + ...theme.applyStyles('dark', { color: theme.palette.background.default }) + }) + }, + '&.MuiChip-deletable': { + '& .MuiChip-label': { + padding: '3px 6px' + } + }, + '& .MuiChip-deleteIcon': { + marginRight: 2, + marginLeft: -2, + ...(paletteColor === undefined && { color: alpha(theme.palette.text.secondary, 0.8) }), + ...(paletteColor && { + color: alpha(paletteColor.main, 0.8), + ...theme.applyStyles('dark', { color: paletteColor.light }), + '&:hover': { color: paletteColor.dark } + }) + }, + '&.Mui-focusVisible': { + backgroundColor: 'transparent' + } + }; + } + } + ] + }, + avatar: { + borderRadius: '50%', // Circular avatar + padding: 2 + }, + icon: { + fontSize: 10, + lineHeight: 14, + fontWeight: 400, + width: 20, + height: 20, + borderRadius: '50%', // Circular icon + padding: 3 + }, + avatarSmall: { + width: 16, + height: 16, + padding: 1.5, + ...theme.typography.caption // Small avatar typography + }, + avatarMedium: { + width: 18, + height: 18, + ...theme.typography.body2 // Medium avatar typography + }, + avatarLarge: { + width: 20, + height: 20, + ...theme.typography.body1 // Large avatar typography + }, + labelSmall: theme.typography.caption1, // Small label typography + labelMedium: theme.typography.subtitle2, // Medium label typography + labelLarge: theme.typography.subtitle1 // Large label typography + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/FormControlLabel.js b/admin/vite/src/themes/overrides/FormControlLabel.js new file mode 100644 index 0000000..0c09071 --- /dev/null +++ b/admin/vite/src/themes/overrides/FormControlLabel.js @@ -0,0 +1,25 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +/*************************** OVERRIDES - FORM CONTROL LABEL ***************************/ + +export default function FormControlLabel(theme) { + return { + MuiFormControlLabel: { + styleOverrides: { + root: { + '&.Mui-disabled': { + cursor: 'not-allowed' + } + }, + label: { + '&.Mui-disabled': { + color: alpha(theme.palette.text.disabled, 0.8) + } + }, + labelPlacementStart: { marginRight: 0, '& .MuiSwitch-root': { marginLeft: 12 } }, + labelPlacementEnd: { '& .MuiSwitch-root': { marginRight: 12 } } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/FormHelperText.js b/admin/vite/src/themes/overrides/FormHelperText.js new file mode 100644 index 0000000..b1f1835 --- /dev/null +++ b/admin/vite/src/themes/overrides/FormHelperText.js @@ -0,0 +1,19 @@ +/*************************** OVERRIDES - FORM HELPER TEXT ***************************/ + +export default function FormHelperText(theme) { + return { + MuiFormHelperText: { + styleOverrides: { + root: { + marginTop: 6, + marginLeft: 0, + marginRight: 0, + color: theme.palette.grey[700], + '&.Mui-error': { + color: theme.palette.error.main + } + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/IconButton.js b/admin/vite/src/themes/overrides/IconButton.js new file mode 100644 index 0000000..8ad675a --- /dev/null +++ b/admin/vite/src/themes/overrides/IconButton.js @@ -0,0 +1,84 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +// @project +import { generateFocusStyle } from '@/utils/generateFocusStyle'; + +const colors = ['primary', 'secondary', 'success', 'error', 'warning', 'info']; + +/*************************** COMPONENT - ICON BUTTON ***************************/ + +export default function IconButton(theme) { + const createColorVariant = (color, variant, styleFn) => { + const paletteColor = theme.palette[color]; + + return { + props: { variant, color }, + style: styleFn(paletteColor) + }; + }; + + const commonDisabledStyles = { + '&.Mui-disabled': { + color: theme.palette.action.disabled, + backgroundColor: theme.palette.action.disabledBackground + } + }; + + const colorTextVariants = colors.map((color) => + createColorVariant(color, undefined, (paletteColor) => ({ + color: paletteColor.main + })) + ); + + const colorContainedVariants = colors.map((color) => + createColorVariant(color, 'contained', (paletteColor) => ({ + color: paletteColor.contrastText, + backgroundColor: paletteColor.main, + '&:hover': { + backgroundColor: paletteColor.dark + }, + ...commonDisabledStyles + })) + ); + + const colorOutlinedVariants = colors.map((color) => + createColorVariant(color, 'outlined', (paletteColor) => ({ + color: paletteColor.main, + border: `1px solid ${paletteColor.lighter}`, + ...(color === 'secondary' && { color: theme.palette.text.primary, borderColor: theme.palette.divider }), + '&.Mui-disabled': { + color: theme.palette.action.disabled, + backgroundColor: alpha(theme.palette.grey[700], 0.04), + borderColor: theme.palette.action.disabledBackground + } + })) + ); + + return { + MuiIconButton: { + defaultProps: { + disableFocusRipple: true, + color: 'primary' + }, + styleOverrides: { + root: { + borderRadius: 8, + '& .MuiTouchRipple-root span': { + borderRadius: 8 + }, + '&.Mui-disabled': { + pointerEvents: 'auto', + cursor: 'not-allowed' + }, + '&:focus-visible': { + ...generateFocusStyle(theme.palette.primary.main) + }, + variants: [...colorTextVariants, ...colorContainedVariants, ...colorOutlinedVariants] + }, + sizeSmall: { width: 36, height: 36 }, + sizeMedium: { width: 42, height: 42 } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/InputAdornment.js b/admin/vite/src/themes/overrides/InputAdornment.js new file mode 100644 index 0000000..cf5a8f1 --- /dev/null +++ b/admin/vite/src/themes/overrides/InputAdornment.js @@ -0,0 +1,16 @@ +/*************************** COMPONENT - INPUT ADORNMENT ***************************/ + +export default function InputAdornment(theme) { + return { + MuiInputAdornment: { + styleOverrides: { + root: { + color: theme.palette.text.secondary, + '& svg': { width: 16, height: 16, color: theme.palette.text.secondary } + }, + positionStart: { marginRight: 6 }, + positionEnd: { marginLeft: 6 } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/InputLabel.js b/admin/vite/src/themes/overrides/InputLabel.js new file mode 100644 index 0000000..ec0b53f --- /dev/null +++ b/admin/vite/src/themes/overrides/InputLabel.js @@ -0,0 +1,21 @@ +/*************************** OVERRIDES - INPUT LABEL ***************************/ + +export default function InputLabel(theme) { + return { + MuiInputLabel: { + styleOverrides: { + root: { + ...theme.typography.body2, + color: theme.palette.text.primary, + marginBottom: 6, + '&.Mui-error': { + color: theme.palette.error.main + } + }, + asterisk: { + color: theme.palette.error.main + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/LinearProgress.jsx b/admin/vite/src/themes/overrides/LinearProgress.jsx new file mode 100644 index 0000000..39d1b34 --- /dev/null +++ b/admin/vite/src/themes/overrides/LinearProgress.jsx @@ -0,0 +1,36 @@ +/*************************** COMPONENT - LINEAR PROGRESS ***************************/ + +export default function LinearProgress(theme) { + return { + MuiLinearProgress: { + defaultProps: { + variant: 'determinate' + }, + styleOverrides: { + root: ({ ownerState }) => { + const paletteColor = theme.palette[ownerState.color]; + return { + '& .MuiLinearProgress-bar': { + backgroundColor: paletteColor.main + }, + borderRadius: 24, + backgroundColor: theme.palette.grey[100], + variants: [ + { + props: { type: 'light' }, + style: { + '& .MuiLinearProgress-bar': { + opacity: 0.6 + } + } + } + ] + }; + }, + bar: { + borderRadius: 24 + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/ListItemButton.jsx b/admin/vite/src/themes/overrides/ListItemButton.jsx new file mode 100644 index 0000000..c9adce3 --- /dev/null +++ b/admin/vite/src/themes/overrides/ListItemButton.jsx @@ -0,0 +1,18 @@ +/*************************** OVERRIDES - MENU ***************************/ + +export default function ListItemButton(theme) { + return { + MuiListItemButton: { + styleOverrides: { + root: { + padding: '10px 8px', + borderRadius: 4, + '&.Mui-selected': { + backgroundColor: theme.palette.primary.lighter, + '&:hover': { backgroundColor: theme.palette.primary.light } + } + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/ListItemIcon.jsx b/admin/vite/src/themes/overrides/ListItemIcon.jsx new file mode 100644 index 0000000..5e8fb94 --- /dev/null +++ b/admin/vite/src/themes/overrides/ListItemIcon.jsx @@ -0,0 +1,11 @@ +/*************************** OVERRIDES - MENU ***************************/ + +export default function ListItemIcon() { + return { + MuiListItemIcon: { + styleOverrides: { + root: { minWidth: 26, color: 'inherit' } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/ListItemText.jsx b/admin/vite/src/themes/overrides/ListItemText.jsx new file mode 100644 index 0000000..f0f3667 --- /dev/null +++ b/admin/vite/src/themes/overrides/ListItemText.jsx @@ -0,0 +1,14 @@ +/*************************** OVERRIDES - LIST ITEM TEXT ***************************/ + +export default function ListItemText() { + return { + MuiListItemText: { + defaultProps: { + primaryTypographyProps: { variant: 'body2' } + }, + styleOverrides: { + root: { marginTop: 0, marginBottom: 0 } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/OutlinedInput.jsx b/admin/vite/src/themes/overrides/OutlinedInput.jsx new file mode 100644 index 0000000..dc097a3 --- /dev/null +++ b/admin/vite/src/themes/overrides/OutlinedInput.jsx @@ -0,0 +1,63 @@ +// @project +import { generateFocusStyle } from '@/utils/generateFocusStyle'; + +/*************************** COMPONENT - OUTLINED INPUT ***************************/ + +export default function OutlinedInput(theme) { + return { + MuiOutlinedInput: { + defaultProps: { + size: 'small' + }, + styleOverrides: { + root: { + borderRadius: 8, + boxShadow: theme.customShadows.button, + background: theme.palette.background.default, + paddingLeft: 10, + paddingRight: 10, + '&.MuiInputBase-colorPrimary': { + '&:not(.Mui-error):not(.Mui-disabled):not(.Mui-focused):hover': { + '& .MuiOutlinedInput-notchedOutline': { borderColor: theme.palette.primary.main } + }, + '&:not(.Mui-error).Mui-focused': { + '& .MuiOutlinedInput-notchedOutline': { borderWidth: '1px', boxShadow: theme.customShadows.focus } + } + }, + '&.Mui-disabled': { + cursor: 'not-allowed', + input: { cursor: 'not-allowed' }, + '& .MuiOutlinedInput-notchedOutline': { borderColor: theme.palette.divider }, + '& .MuiInputAdornment-root': { color: theme.palette.secondary.main, opacity: 0.6 } + }, + '&.Mui-error': { + '&.Mui-focused': { + '& .MuiOutlinedInput-notchedOutline': { ...generateFocusStyle(theme.palette.error.main), borderWidth: '1px' } + } + }, + variants: [ + { + props: { size: 'small' }, + style: { ...theme.typography.body2, '& input': { paddingTop: 7.94, paddingBottom: 7.94 } } + } + ] + }, + notchedOutline: { borderColor: theme.palette.divider }, + colorSecondary: { + '&:not(.Mui-error):not(.Mui-disabled):not(.Mui-focused):hover': { + '& .MuiOutlinedInput-notchedOutline': { borderColor: theme.palette.grey[600] } + }, + '&:not(.Mui-error).Mui-focused': { + '& .MuiOutlinedInput-notchedOutline': { + border: '1px solid', + borderColor: theme.palette.grey[600], + boxShadow: theme.customShadows.focus + } + } + }, + multiline: { padding: 10 }, + input: { paddingLeft: 0, paddingRight: 0 } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Popper.js b/admin/vite/src/themes/overrides/Popper.js new file mode 100644 index 0000000..e978f00 --- /dev/null +++ b/admin/vite/src/themes/overrides/Popper.js @@ -0,0 +1,13 @@ +/*************************** OVERRIDES - POPPER ***************************/ + +export default function Popper() { + return { + MuiPopper: { + styleOverrides: { + root: { + zIndex: 1201 + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Switch.js b/admin/vite/src/themes/overrides/Switch.js new file mode 100644 index 0000000..5103ad7 --- /dev/null +++ b/admin/vite/src/themes/overrides/Switch.js @@ -0,0 +1,108 @@ +const colors = ['primary', 'secondary', 'success', 'error', 'warning', 'info']; + +/*************************** SWITCH - SIZE ***************************/ + +function getSizeStyle(size) { + switch (size) { + case 'small': + return { width: 34, height: 20, base: 14, thumb: 16, trackRadius: 16 }; + default: + return { width: 38, height: 22, base: 16, thumb: 18, trackRadius: 16 }; + } +} + +function switchStyle(size) { + const sizes = getSizeStyle(size); + + return { + width: sizes.width, + height: sizes.height, + '& .MuiSwitch-switchBase': { + padding: 2, + '&.Mui-checked': { + transform: `translateX(${sizes.base}px)` + } + }, + '& .MuiSwitch-thumb': { + width: sizes.thumb, + height: sizes.thumb + }, + '& .MuiSwitch-track': { + borderRadius: sizes.trackRadius + } + }; +} + +/*************************** OVERRIDES - SWITCH ***************************/ + +export default function Switch(theme) { + const colorVariants = colors.map((color) => { + const paletteColor = theme.palette[color]; + + return { + props: { color }, + style: { + '& .MuiSwitch-switchBase': { + '&.Mui-checked': { + '& ~ .MuiSwitch-track': { + backgroundColor: paletteColor.main + } + }, + '&:not(.Mui-checked) ~ .MuiSwitch-track': { + backgroundColor: theme.palette.secondary.lighter + } + } + } + }; + }); + + return { + MuiSwitch: { + styleOverrides: { + root: { + color: theme.palette.text.primary, + padding: 0, + display: 'flex', + variants: [...colorVariants] + }, + track: { + opacity: 1, + backgroundColor: theme.palette.secondary.lighter, + boxSizing: 'border-box' + }, + thumb: { + borderRadius: '50%', + transition: theme.transitions.create(['width'], { + duration: 200 + }) + }, + switchBase: { + '&.Mui-checked': { + color: theme.palette.background.default, + '& ~ .MuiSwitch-track': { + opacity: 1 + }, + '&.Mui-disabled': { + color: theme.palette.background.paper, + '~.MuiSwitch-track': { + opacity: 0.1 + } + } + }, + '&.Mui-disabled': { + color: theme.palette.background.paper, + '~.MuiSwitch-track': { + opacity: 0.3 + }, + cursor: 'not-allowed', + pointerEvents: 'auto', + '&:hover': { + backgroundColor: 'transparent' + } + } + }, + sizeSmall: { ...switchStyle('small'), '& ~ .MuiFormControlLabel-label': theme.typography.body2 } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Tab.js b/admin/vite/src/themes/overrides/Tab.js new file mode 100644 index 0000000..3c2cf07 --- /dev/null +++ b/admin/vite/src/themes/overrides/Tab.js @@ -0,0 +1,51 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +/*************************** OVERRIDES - TAB ***************************/ + +export default function Tab(theme) { + return { + MuiTab: { + defaultProps: { + disableFocusRipple: true + }, + styleOverrides: { + root: { + ...theme.typography.h6, + fontWeight: 400, + minWidth: 'auto', + minHeight: 42, + padding: '10px 16px', + color: alpha(theme.palette.text.secondary, 0.6), + '&:hover': { + color: theme.palette.text.secondary + }, + '&:focus-visible': { + boxShadow: 'none', + backgroundColor: alpha(theme.palette.grey[500], 0.25) + }, + '&.Mui-disabled': { + color: alpha(theme.palette.text.secondary, 0.3), + pointerEvents: 'auto', + cursor: 'not-allowed', + '&:hover': { + color: alpha(theme.palette.text.secondary, 0.3), + backgroundColor: 'transparent' + } + }, + '& .MuiTouchRipple-root span': { + backgroundColor: alpha(theme.palette.secondary.main, 0.3) + } + }, + textColorSecondary: { + '&.Mui-selected': { + color: theme.palette.text.primary, + '&:hover': { + backgroundColor: alpha(theme.palette.grey[200], 0.25) + } + } + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Tabs.js b/admin/vite/src/themes/overrides/Tabs.js new file mode 100644 index 0000000..59d8b5c --- /dev/null +++ b/admin/vite/src/themes/overrides/Tabs.js @@ -0,0 +1,89 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +// @project +import { TabsType } from '@/enum'; + +const segmentedBorderRadius = 8; + +/*************************** OVERRIDES - TABS ***************************/ + +export default function Tabs(theme) { + return { + MuiTabs: { + defaultProps: { + indicatorColor: 'secondary', + textColor: 'secondary' + }, + + styleOverrides: { + root: { + minHeight: 42, + variants: [ + { + props: { type: TabsType.SEGMENTED, variant: 'fullWidth' }, + style: { + width: '100%' + } + }, + { + props: { type: TabsType.SEGMENTED }, + style: { + display: 'inline-flex', + borderRadius: segmentedBorderRadius, + overflow: 'hidden', + minHeight: 38, + '& .MuiTabs-indicator': { + display: 'none' + }, + '& .MuiTab-root': { + ...theme.typography.body2, + color: theme.palette.text.secondary, + textTransform: 'none', + minHeight: 38, + padding: '9px 12px', + borderRadius: 0, + border: `1px solid ${theme.palette.grey[200]}`, + '&:first-of-type': { + borderTopLeftRadius: segmentedBorderRadius, + borderBottomLeftRadius: segmentedBorderRadius + }, + '&:last-of-type': { + borderTopRightRadius: segmentedBorderRadius, + borderBottomRightRadius: segmentedBorderRadius + }, + '&:not(:first-of-type)': { + borderLeft: 'none' // Prevent double border between tab + }, + '&.Mui-selected': { + backgroundColor: theme.palette.grey[100], + '&:hover': { + backgroundColor: theme.palette.grey[200] + } + }, + '&:hover': { + backgroundColor: alpha(theme.palette.grey[200], 0.25) + }, + '&.Mui-disabled': { + color: theme.palette.action.disabled + } + }, + '& .Mui-focusVisible': { + backgroundColor: alpha(theme.palette.grey[500], 0.25), + '&.Mui-selected': { + backgroundColor: alpha(theme.palette.secondary.light, 0.5) + } + } + } + } + ] + }, + indicator: ({ ownerState }) => ({ + ...(ownerState.indicatorColor === 'secondary' && { + backgroundColor: theme.palette.text.primary + }) + }) + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/Tooltip.js b/admin/vite/src/themes/overrides/Tooltip.js new file mode 100644 index 0000000..8c1cd5f --- /dev/null +++ b/admin/vite/src/themes/overrides/Tooltip.js @@ -0,0 +1,21 @@ +/*************************** COMPONENT - TOOLTIP ***************************/ + +export default function Tooltip(theme) { + return { + MuiTooltip: { + styleOverrides: { + tooltip: { + ...theme.typography.caption, + color: theme.palette.secondary.darker, + backgroundColor: theme.palette.secondary.lighter, + padding: 6, + borderRadius: 8, + boxShadow: theme.customShadows.tooltip, + '& svg': { + opacity: 0.7 + } + } + } + } + }; +} diff --git a/admin/vite/src/themes/overrides/index.js b/admin/vite/src/themes/overrides/index.js new file mode 100644 index 0000000..7b7fde6 --- /dev/null +++ b/admin/vite/src/themes/overrides/index.js @@ -0,0 +1,69 @@ +// @third-party +import { merge } from 'lodash-es'; + +// @project +import Alert from './Alert'; +import Avatar from './Avatar'; +import AvatarGroup from './AvatarGroup'; +import Backdrop from './Backdrop'; +import BarLabel from './BarLabel'; +import Breadcrumbs from './Breadcrumbs'; +import Button from './Button'; +import CardActions from './CardActions'; +import CardContent from './CardContent'; +import CardHeader from './CardHeader'; +import ChartsAxis from './ChartsAxis'; +import ChartsAxiasHighlight from './ChartsAxisHighlight'; +import ChartsTooltip from './ChartsTooltip'; +import Chip from './Chip'; +import FormControlLabel from './FormControlLabel'; +import FormHelperText from './FormHelperText'; +import IconButton from './IconButton'; +import InputAdornment from './InputAdornment'; +import InputLabel from './InputLabel'; +import LinearProgress from './LinearProgress'; +import ListItemButton from './ListItemButton'; +import ListItemIcon from './ListItemIcon'; +import ListItemText from './ListItemText'; +import OutlinedInput from './OutlinedInput'; +import Popper from './Popper'; +import Switch from './Switch'; +import Tab from './Tab'; +import Tabs from './Tabs'; +import Tooltip from './Tooltip'; + +/*************************** OVERRIDES - MAIN ***************************/ + +export default function ComponentsOverrides(theme) { + return merge( + Alert(), + Avatar(theme), + AvatarGroup(), + Backdrop(theme), + BarLabel(theme), + Breadcrumbs(theme), + Button(theme), + CardActions(theme), + CardContent(), + CardHeader(theme), + ChartsAxis(theme), + ChartsAxiasHighlight(theme), + ChartsTooltip(theme), + Chip(theme), + FormControlLabel(theme), + FormHelperText(theme), + IconButton(theme), + InputAdornment(theme), + InputLabel(theme), + LinearProgress(theme), + ListItemButton(theme), + ListItemIcon(), + ListItemText(), + OutlinedInput(theme), + Popper(), + Switch(theme), + Tab(theme), + Tabs(theme), + Tooltip(theme) + ); +} diff --git a/admin/vite/src/themes/palette.js b/admin/vite/src/themes/palette.js new file mode 100644 index 0000000..49de26c --- /dev/null +++ b/admin/vite/src/themes/palette.js @@ -0,0 +1,93 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +/*************************** DEFAULT - PALETTE ***************************/ + +export default function palette(mode) { + const textPrimary = '#1B1B1F'; // Hosting/neutral/10 - on surface + const textSecondary = '#46464F'; // Hosting/neutral variant/30 - on surface variant + + const secondaryMain = '#5A5C78'; // Hosting/secondary/40 - secondary + + const divider = '#EFEDF4'; // Hosting/neutral/94 - surface container + const background = '#FFF'; + + const disabled = '#777680'; // Hosting/neutral variant/50 - outline + const disabledBackground = '#E4E1E6'; // Hosting/neutral/90 - surface container highest + + const lightPalette = { + primary: { + lighter: '#E0E0FF', // Hosting/primary/90 - primary container / primary fixed + light: '#BDC2FF', // Hosting/primary/80 - primary fixed dim + main: '#606BDF', // Hosting/primary/40 - primary + dark: '#3944B8', // Hosting/primary/30 - on primary fixed variant + darker: '#000668' // Hosting/primary/10 - on primary container / on primary fixed + }, + secondary: { + lighter: '#E0E0FF', // Hosting/secondary/90 - secondary container / secondary fixed + light: '#C3C4E4', // Hosting/secondary/80 - secondary fixed dim + main: secondaryMain, // Hosting/secondary/40 - secondary + dark: '#43455F', // Hosting/secondary/30 - on secondary fixed variant + darker: '#171A31' // Hosting/secondary/10 - on secondary container / on secondary fixed + }, + error: { + lighter: '#FFEDEA', // error/90 - error container / error fixed + light: '#FFDAD6', // error/80 - error fixed dim + main: '#DE3730', // error/40 - error + dark: '#BA1A1A', // error/30 - on error fixed variant + darker: '#690005' // error/10 - on error container / on error fixed + }, + warning: { + lighter: '#FFEEE1', // warning/90 - warning container / warning fixed + light: '#FFDCBE', // warning/80 - warning fixed dim + main: '#AE6600', // warning/40 - warning + dark: '#8B5000', // warning/30 - on warning fixed variant + darker: '#4A2800' // warning/10 - on warning container / on warning fixed + }, + success: { + lighter: '#C8FFC0', // success/90 - success container / success fixed + light: '#B6F2AF', // success/80 - success fixed dim + main: '#22892F', // success/40 - success + dark: '#006E1C', // success/30 - on success fixed variant + darker: '#00390A' // success/10 - on success container / on success fixed + }, + info: { + lighter: '#D4F7FF', // info/90 - info container / info fixed + light: '#A1EFFF', // info/80 - info fixed dim + main: '#008394', // info/40 - info + dark: '#006876', // info/30 - on info fixed variant + darker: '#00363E' // info/10 - on info container / on info fixed + }, + grey: { + 50: '#FBF8FF', // Hosting/neutral/98 - surface / surface bright + 100: '#F5F2FA', // Hosting/neutral/96 - surface container low + 200: divider, // Hosting/neutral/94 - surface container + 300: '#EAE7EF', // Hosting/neutral/92 - surface container high + 400: disabledBackground, // Hosting/neutral/90 - surface container highest + 500: '#DBD9E0', // Hosting/neutral/87 - surface dim + 600: '#C7C5D0', // Hosting/neutral variant/80 - outline variant + 700: disabled, // Hosting/neutral variant/50 - outline + 800: textSecondary, // Hosting/neutral variant/30 - on surface variant + 900: textPrimary // Hosting/neutral/10 - on surface + }, + text: { + primary: textPrimary, // Hosting/neutral/10 - on surface + secondary: textSecondary, // Hosting/neutral variant/30 - on surface variant + disabled: disabled + }, + divider, + background: { + default: background + }, + action: { + hover: alpha(secondaryMain, 0.05), + disabled: alpha(disabled, 0.6), + disabledBackground: alpha(disabledBackground, 0.9) + } + }; + + return { + mode, + ...lightPalette + }; +} diff --git a/admin/vite/src/themes/shadow.js b/admin/vite/src/themes/shadow.js new file mode 100644 index 0000000..217991f --- /dev/null +++ b/admin/vite/src/themes/shadow.js @@ -0,0 +1,16 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +/*************************** DEFAULT THEME - SHADOWS ***************************/ + +export default function Shadows(theme) { + const shadowColor = theme.palette.text.primary; + const primaryColor = theme.palette.primary.main; + + return { + button: `0px 0.711px 1.422px 0px ${alpha(shadowColor, 0.05)}`, + section: `0px 1px 2px 0px ${alpha(shadowColor, 0.07)}`, + tooltip: `0px 12px 16px -4px ${alpha(shadowColor, 0.08)}, 0px 4px 6px -2px ${alpha(shadowColor, 0.03)}`, + focus: `0px 0px 0px 3px ${alpha(primaryColor, 0.2)}` + }; +} diff --git a/admin/vite/src/themes/theme/README.md b/admin/vite/src/themes/theme/README.md new file mode 100644 index 0000000..336349e --- /dev/null +++ b/admin/vite/src/themes/theme/README.md @@ -0,0 +1 @@ +# PALETTE COLORS diff --git a/admin/vite/src/themes/typography.js b/admin/vite/src/themes/typography.js new file mode 100644 index 0000000..20457bd --- /dev/null +++ b/admin/vite/src/themes/typography.js @@ -0,0 +1,102 @@ +// @project +import { ThemeFonts } from '@/config'; + +/*************************** DEFAULT - TYPOGRAPHY ***************************/ + +export default function typography() { + return { + fontFamily: ThemeFonts.FONT_ARCHIVO, + letterSpacing: 0, + + // heading - h1 + h1: { + fontWeight: 500, + fontSize: 40, + lineHeight: '44px' + }, + + // heading - h2 + h2: { + fontWeight: 500, + fontSize: 32, + lineHeight: '36px' + }, + + // heading - h3 + h3: { + fontWeight: 500, + fontSize: 28, + lineHeight: '32px' + }, + + // heading - h4 + h4: { + fontWeight: 500, + fontSize: 24, + lineHeight: '28px' + }, + + // heading - h5 + h5: { + fontWeight: 500, + fontSize: 20, + lineHeight: '24px' + }, + + // heading - h6 + h6: { + fontWeight: 500, + fontSize: 18, + lineHeight: '22px' + }, + + // subtitle - 1 + subtitle1: { + fontWeight: 500, + fontSize: 16, + lineHeight: '20px' + }, + + // subtitle - 2 + subtitle2: { + fontWeight: 500, + fontSize: 14, + lineHeight: '18px' + }, + + // paragraph - 1 + body1: { + fontWeight: 400, + fontSize: 16, + lineHeight: '20px' + }, + + // paragraph - 2 + body2: { + fontWeight: 400, + fontSize: 14, + lineHeight: '18px' + }, + + // caption - regular + caption: { + fontWeight: 400, + fontSize: 12, + lineHeight: '16px', + letterSpacing: 0 + }, + + // caption - medium + caption1: { + fontWeight: 500, + fontSize: 12, + lineHeight: '16px', + letterSpacing: 0 + }, + + // button + button: { + textTransform: 'capitalize' + } + }; +} diff --git a/admin/vite/src/utils/GetImagePath.jsx b/admin/vite/src/utils/GetImagePath.jsx new file mode 100644 index 0000000..2c16be1 --- /dev/null +++ b/admin/vite/src/utils/GetImagePath.jsx @@ -0,0 +1,18 @@ +// @mui +import { useTheme } from '@mui/material/styles'; + +// @types + +/*************************** IMAGE - TYPE IDENTIFY ***************************/ + +function isImageComponentProps(value) { + return value.light !== undefined && value.dark !== undefined; +} + +/*************************** COMMON - IMAGE PATH ***************************/ + +export default function GetImagePath(image) { + const theme = useTheme(); + + return isImageComponentProps(image) ? image[theme.palette.mode] : image; +} diff --git a/admin/vite/src/utils/generateFocusStyle.js b/admin/vite/src/utils/generateFocusStyle.js new file mode 100644 index 0000000..6b73414 --- /dev/null +++ b/admin/vite/src/utils/generateFocusStyle.js @@ -0,0 +1,8 @@ +// @mui +import { alpha } from '@mui/material/styles'; + +/*************************** COMMON - FOCUS STYLE ***************************/ + +export const generateFocusStyle = (color) => ({ + boxShadow: `0px 0px 0px 3px ${alpha(color, 0.2)}` +}); diff --git a/admin/vite/src/utils/getRadiusStyles.js b/admin/vite/src/utils/getRadiusStyles.js new file mode 100644 index 0000000..611fc1d --- /dev/null +++ b/admin/vite/src/utils/getRadiusStyles.js @@ -0,0 +1,40 @@ +/*************************** CARD RADIUS - STYLES ***************************/ + +export function getRadiusStyles(radius, ...corners) { + const borderRadiusStyles = { + '& .MuiPaper-root': {} + }; + + corners.forEach((corner) => { + switch (corner) { + case 'topLeft': + borderRadiusStyles.borderTopLeftRadius = radius; + borderRadiusStyles['& .MuiPaper-root'] = { + borderTopLeftRadius: radius + }; + break; + case 'topRight': + borderRadiusStyles.borderTopRightRadius = radius; + borderRadiusStyles['& .MuiPaper-root'] = { + borderTopRightRadius: radius + }; + break; + case 'bottomLeft': + borderRadiusStyles.borderBottomLeftRadius = radius; + borderRadiusStyles['& .MuiPaper-root'] = { + borderBottomLeftRadius: radius + }; + break; + case 'bottomRight': + borderRadiusStyles.borderBottomRightRadius = radius; + borderRadiusStyles['& .MuiPaper-root'] = { + borderBottomRightRadius: radius + }; + break; + default: + break; + } + }); + + return borderRadiusStyles; +} diff --git a/admin/vite/src/utils/navigation.js b/admin/vite/src/utils/navigation.js new file mode 100644 index 0000000..21fcdbe --- /dev/null +++ b/admin/vite/src/utils/navigation.js @@ -0,0 +1,70 @@ +import { useNavigate, useLocation, useParams } from 'react-router-dom'; + +export const useRouter = () => { + const navigate = useNavigate(); + const location = useLocation(); + const params = useParams(); + + const push = (path) => { + try { + const appOrigin = window.location.origin; + const url = new URL(path, appOrigin); + + if (url.origin === appOrigin) { + // Internal route: use SPA navigation + navigate(url.pathname + url.search + url.hash); + } else { + // External URL: full page reload + window.location.href = path; + } + } catch { + // Fallback: assume it's relative + navigate(path); + } + }; + + const replace = (path) => { + try { + const appOrigin = window.location.origin; + const url = new URL(path, appOrigin); + + if (url.origin === appOrigin) { + navigate(url.pathname + url.search + url.hash, { replace: true }); + } else { + window.location.replace(path); + } + } catch { + navigate(path, { replace: true }); + } + }; + + return { + pathname: location.pathname, + query: Object.fromEntries(new URLSearchParams(location.search)), + asPath: location.pathname + location.search, + push, + replace, + back: () => navigate(-1), + params + }; +}; + +export const usePathname = () => { + const location = useLocation(); + return location.pathname; +}; + +export const useSearchParams = () => { + const location = useLocation(); + const searchParams = new URLSearchParams(location.search); + const navigate = useNavigate(); + + return { + get: (key) => searchParams.get(key), + set: (key, value) => { + const newParams = new URLSearchParams(searchParams); + newParams.set(key, value); + navigate(`${location.pathname}?${newParams.toString()}`); + } + }; +}; diff --git a/admin/vite/src/utils/validation-schema/common.js b/admin/vite/src/utils/validation-schema/common.js new file mode 100644 index 0000000..5d85123 --- /dev/null +++ b/admin/vite/src/utils/validation-schema/common.js @@ -0,0 +1,73 @@ +export const emailSchema = { + required: 'Email is required', + pattern: { value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i, message: 'Invalid email address' } +}; + +export const passwordSchema = { + required: 'Password is required', + minLength: { value: 8, message: 'Password must be at least 8 characters' }, + validate: { + noSpaces: (value) => !/\s/.test(value) || 'Password cannot contain spaces', + hasUpperCase: (value) => /[A-Z]/.test(value) || 'Password must have at least one uppercase letter', + hasNumber: (value) => /[0-9]/.test(value) || 'Password must have at least one number', + hasSpecialChar: (value) => /[!@#$%^&*(),.?":{}|<>]/.test(value) || 'Password must have at least one special character' + } +}; + +export const firstNameSchema = { + required: 'First name is required', + pattern: { value: /^[a-zA-Z\s]+$/, message: 'Invalid first name' }, + validate: { + trim: (value) => { + const trimmedValue = value.trim(); + return trimmedValue.length > 0 || 'First name cannot be empty or contain only spaces'; + } + }, + onBlur: (e) => { + e.target.value = e.target.value.trim(); + } +}; + +export const lastNameSchema = { + required: 'Last name is required', + pattern: { value: /^[a-zA-Z\s]+$/, message: 'Invalid last name' }, + validate: { + trim: (value) => { + const trimmedValue = value.trim(); + return trimmedValue.length > 0 || 'Last name cannot be empty or contain only spaces'; + } + }, + onBlur: (e) => { + e.target.value = e.target.value.trim(); + } +}; + +export const usernameSchema = { + required: 'Username is required', + pattern: { + value: /^[a-zA-Z0-9._]+$/, // Alphanumeric, underscores, and dots + message: 'Username can only contain letters, numbers, dots, and underscores' + }, + validate: { + trim: (value) => { + const trimmedValue = value.trim(); + return trimmedValue.length > 0 || 'Username cannot be empty or contain only spaces'; + }, + noSpaces: (value) => { + return !/\s/.test(value) || 'Username cannot contain spaces'; + } + }, + onBlur: (e) => { + e.target.value = e.target.value.trim(); + } +}; + +export const contactSchema = { + required: 'Contact number is required', + pattern: { value: /^[0-9()\-\.]{7,15}$/, message: 'Invalid contact number' } +}; + +export const otpSchema = { + required: 'OTP is required', + minLength: { value: 6, message: 'OTP must be exactly 6 characters' } +}; diff --git a/admin/vite/src/views/admin/dashboard.jsx b/admin/vite/src/views/admin/dashboard.jsx new file mode 100644 index 0000000..d037786 --- /dev/null +++ b/admin/vite/src/views/admin/dashboard.jsx @@ -0,0 +1,25 @@ +// @mui +import Grid from '@mui/material/Grid'; + +// @project +import AnalyticsOverviewCard from '@/sections/dashboard/AnalyticsOverviewCard'; +import AnalyticsOverviewChart from '@/sections/dashboard/AnalyticsOverviewChart'; +import AnalyticsTopRef from '@/sections/dashboard/AnalyticsTopRef'; + +/*************************** ANALYTICS - OVERVIEW ***************************/ + +export default function AnalyticsOverview() { + return ( + + + + + + + + + + + + ); +} diff --git a/admin/vite/src/views/admin/sample-page.jsx b/admin/vite/src/views/admin/sample-page.jsx new file mode 100644 index 0000000..cf3676a --- /dev/null +++ b/admin/vite/src/views/admin/sample-page.jsx @@ -0,0 +1,22 @@ +// @mui +import Typography from '@mui/material/Typography'; + +// @project +import ComponentsWrapper from '@/components/ComponentsWrapper'; +import PresentationCard from '@/components/cards/PresentationCard'; + +/*************************** SAMPLE PAGE ***************************/ + +export default function SamplePage() { + return ( + + + + SaasAble offers both a full version and a seed version. The seed version contains minimal code, making it a great starting point + for your project. You can then migrate specific features or changes from the full version as needed. We recommend beginning with + the seed version for a more streamlined setup. + + + + ); +} diff --git a/admin/vite/src/views/auth/login.jsx b/admin/vite/src/views/auth/login.jsx new file mode 100644 index 0000000..d83ffb3 --- /dev/null +++ b/admin/vite/src/views/auth/login.jsx @@ -0,0 +1,57 @@ +// @mui +import Divider from '@mui/material/Divider'; +import Link from '@mui/material/Link'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +// @project +import RouterLink from '@/components/Link'; +import AuthLogin from '@/sections/auth/AuthLogin'; +import AuthSocial from '@/sections/auth/AuthSocial'; +import Copyright from '@/sections/auth/Copyright'; + +/*************************** AUTH - LOGIN ***************************/ + +export default function Login() { + return ( + + + + Sign In + + Welcome back! Select the method of login. + + + + {/* Social login buttons */} + + + + + or continue with email + + + + {/* Login form */} + + + + Don’t have an account?{' '} + + Sign Up + + + + + {/* Copyright section*/} + + + ); +} diff --git a/admin/vite/src/views/auth/register.jsx b/admin/vite/src/views/auth/register.jsx new file mode 100644 index 0000000..c6e19e7 --- /dev/null +++ b/admin/vite/src/views/auth/register.jsx @@ -0,0 +1,52 @@ +// @mui +import Divider from '@mui/material/Divider'; +import Link from '@mui/material/Link'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +// @project +import RouterLink from '@/components/Link'; +import { SocialTypes } from '@/enum'; +import AuthRegister from '@/sections/auth/AuthRegister'; +import AuthSocial from '@/sections/auth/AuthSocial'; +import Copyright from '@/sections/auth/Copyright'; + +/*************************** AUTH - REGISTER ***************************/ + +export default function Register() { + return ( + + + + Sign Up + + Sign Up for free. No credit card required. + + + + {/* Social login buttons */} + + + + + or continue with email + + + + {/* Login form */} + + + + Already have an account?{' '} + + Sign In + + + + + {/* Copyright section*/} + + + ); +} diff --git a/admin/vite/src/views/components/utils/colors.jsx b/admin/vite/src/views/components/utils/colors.jsx new file mode 100644 index 0000000..d95cb21 --- /dev/null +++ b/admin/vite/src/views/components/utils/colors.jsx @@ -0,0 +1,404 @@ +import PropTypes from 'prop-types'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Grid from '@mui/material/Grid'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +// @project +import { Themes } from '@/config'; +import ComponentsWrapper from '@/components/ComponentsWrapper'; +import useConfig from '@/hooks/useConfig'; +import { ColorBox } from '@/sections/components/color'; + +// get theme wise color string +function getColorString(themes) { + switch (themes) { + case Themes.THEME_HOSTING: + default: + return 'HOSTING'; + } +} + +// get theme wise primary/secondary color offset +function getColorCode(themes, index) { + const lightModeCodes = [90, 80, 40, 30, 10]; + + const code1 = lightModeCodes; + + switch (themes) { + case Themes.THEME_HOSTING: + default: + return code1[index]; + } +} + +// get theme wise grey color offset +function getGreyCode(themes, index) { + const lightModeCodes = [98, 96, 94, 92, 90, 87, 80, 50, 30, 10]; + + const code1 = lightModeCodes; + + switch (themes) { + case Themes.THEME_HOSTING: + default: + return code1[index]; + } +} + +/*************************** COLOR - PALETTE ***************************/ + +function ColorPalette({ title, palette }) { + return ( + + {title} + + {palette.map((item, index) => ( + + ))} + + + ); +} + +/*************************** UTILS - COLOR ***************************/ + +export default function UtilsColor() { + const theme = useTheme(); + + const { currentTheme } = useConfig(); + const colorString = getColorString(currentTheme); + + const primaryPalette = [ + { + value: theme.palette.primary.lighter, + color: 'primary.darker', + muiLabel: 'primary.lighter', + figmaLabel: 'Primary Container / Primary Fixed', + figmaValue: `${colorString}/primary/${getColorCode(currentTheme, 0)}` // setup swr and use function for dynamic value + }, + { + value: theme.palette.primary.light, + color: 'primary.dark', + muiLabel: 'primary.light', + figmaLabel: 'Primary Fixed Dim', + figmaValue: `${colorString}/primary/${getColorCode(currentTheme, 1)}` + }, + { + value: theme.palette.primary.main, + color: 'background.default', + muiLabel: 'primary.main', + figmaLabel: 'Primary', + main: true, + figmaValue: `${colorString}/primary/${getColorCode(currentTheme, 2)}` + }, + { + value: theme.palette.primary.dark, + color: 'primary.light', + muiLabel: 'primary.dark', + figmaLabel: 'On Primary Fixed Variant', + figmaValue: `${colorString}/primary/${getColorCode(currentTheme, 3)}` + }, + { + value: theme.palette.primary.darker, + color: 'primary.lighter', + muiLabel: 'primary.darker', + figmaLabel: 'On Primary Container / On Primary Fixed', + figmaValue: `${colorString}/primary/${getColorCode(currentTheme, 4)}` + } + ]; + + const secondaryPalette = [ + { + value: theme.palette.secondary.lighter, + color: 'secondary.darker', + muiLabel: 'secondary.lighter', + figmaLabel: 'Secondary Container / Secondary Fixed', + figmaValue: `${colorString}/secondary/${getColorCode(currentTheme, 0)}` + }, + { + value: theme.palette.secondary.light, + color: 'secondary.dark', + muiLabel: 'secondary.light', + figmaLabel: 'Secondary Fixed Dim', + figmaValue: `${colorString}/secondary/${getColorCode(currentTheme, 1)}` + }, + { + value: theme.palette.secondary.main, + color: 'background.default', + muiLabel: 'secondary.main', + figmaLabel: 'Secondary', + main: true, + figmaValue: `${colorString}/secondary/${getColorCode(currentTheme, 2)}` + }, + { + value: theme.palette.secondary.dark, + color: 'secondary.light', + muiLabel: 'secondary.dark', + figmaLabel: 'On Secondary Fixed Variant', + figmaValue: `${colorString}/secondary/${getColorCode(currentTheme, 3)}` + }, + { + value: theme.palette.secondary.darker, + color: 'secondary.lighter', + muiLabel: 'secondary.darker', + figmaLabel: 'On Secondary Container / On Secondary Fixed', + figmaValue: `${colorString}/secondary/${getColorCode(currentTheme, 4)}` + } + ]; + + const greyPalette = [ + { + value: theme.palette.grey[50], + color: 'grey.900', + muiLabel: 'grey.50', + figmaLabel: 'Surface / Surface Bright', + figmaValue: `${colorString}/neutral/${getGreyCode(currentTheme, 0)}` + }, + { + value: theme.palette.grey[100], + color: 'grey.900', + muiLabel: 'grey.100', + figmaLabel: 'Surface Container Low', + figmaValue: `${colorString}/neutral/${getGreyCode(currentTheme, 1)}` + }, + { + value: theme.palette.grey[200], + color: 'grey.900', + muiLabel: 'grey.200', + figmaLabel: 'Surface Container', + figmaValue: `${colorString}/neutral/${getGreyCode(currentTheme, 2)}` + }, + { + value: theme.palette.grey[300], + color: 'grey.900', + muiLabel: 'grey.300', + figmaLabel: 'Surface Container High', + figmaValue: `${colorString}/neutral/${getGreyCode(currentTheme, 3)}` + }, + { + value: theme.palette.grey[400], + color: 'grey.900', + muiLabel: 'grey.400', + figmaLabel: 'Surface Container Highest', + figmaValue: `${colorString}/neutral/${getGreyCode(currentTheme, 4)}` + }, + { + value: theme.palette.grey[500], + color: 'grey.900', + muiLabel: 'grey.500', + figmaLabel: 'Surface Container Highest', + figmaValue: `${colorString}/neutral/${getGreyCode(currentTheme, 5)}` + }, + { + value: theme.palette.grey[600], + color: 'grey.800', + muiLabel: 'divider/grey.600', + figmaLabel: 'Outline Variant', + figmaValue: `${colorString}/neutral variant/${getGreyCode(currentTheme, 6)}` + }, + { + value: theme.palette.grey[700], + color: 'grey.600', + muiLabel: 'grey.700', + figmaLabel: 'Outline', + figmaValue: `${colorString}/neutral variant/${getGreyCode(currentTheme, 7)}` + }, + { + value: theme.palette.grey[800], + color: 'grey.600', + muiLabel: 'text.secondary/grey.800', + figmaLabel: 'On Surface Variant', + figmaValue: `${colorString}/neutral variant/${getGreyCode(currentTheme, 8)}` + }, + { + value: theme.palette.grey[900], + color: 'grey.50', + muiLabel: 'text.primary/grey.900', + figmaLabel: 'On Surface', + figmaValue: `${colorString}/neutral/${getGreyCode(currentTheme, 9)}` + }, + { + value: theme.palette.background.default, + color: 'text.priamry', + muiLabel: 'background.default', + figmaLabel: 'On Priamry/Secondary', + figmaValue: 'Common' + } + ]; + + const errorPalette = [ + { + value: theme.palette.error.lighter, + color: 'error.darker', + muiLabel: 'error.lighter', + figmaLabel: 'On Error / Error Container Low', + figmaValue: `error/${getColorCode(currentTheme, 0)}` + }, + { + value: theme.palette.error.light, + color: 'error.dark', + muiLabel: 'error.light', + figmaLabel: 'Error Container High / Outline', + figmaValue: `error/${getColorCode(currentTheme, 1)}` + }, + { + value: theme.palette.error.main, + color: 'background.default', + muiLabel: 'error.main', + figmaLabel: 'Error', + figmaValue: `error/${getColorCode(currentTheme, 2)}` + }, + { + value: theme.palette.error.dark, + color: 'error.light', + muiLabel: 'error.dark', + figmaLabel: 'On Container/ Error Container', + figmaValue: `error/${getColorCode(currentTheme, 3)}` + }, + { + value: theme.palette.error.darker, + color: 'error.lighter', + muiLabel: 'error.darker', + figmaLabel: 'On Container Low / Container High', + figmaValue: `error/${getColorCode(currentTheme, 4)}` + } + ]; + + const warningPalette = [ + { + value: theme.palette.warning.lighter, + color: 'warning.darker', + muiLabel: 'warning.lighter', + figmaLabel: 'On Warning / Warning Container Low', + figmaValue: `warning/${getColorCode(currentTheme, 0)}` + }, + { + value: theme.palette.warning.light, + color: 'warning.dark', + muiLabel: 'warning.light', + figmaLabel: 'Warning Container High / Outline', + figmaValue: `warning/${getColorCode(currentTheme, 1)}` + }, + { + value: theme.palette.warning.main, + color: 'background.default', + muiLabel: 'warning.main', + figmaLabel: 'Warning', + figmaValue: `warning/${getColorCode(currentTheme, 2)}` + }, + { + value: theme.palette.warning.dark, + color: 'warning.light', + muiLabel: 'warning.dark', + figmaLabel: 'On Container/ Warning Container', + figmaValue: `warning/${getColorCode(currentTheme, 3)}` + }, + { + value: theme.palette.warning.darker, + color: 'warning.lighter', + muiLabel: 'warning.darker', + figmaLabel: 'On Container Low / Container High', + figmaValue: `warning/${getColorCode(currentTheme, 4)}` + } + ]; + + const infoPalette = [ + { + value: theme.palette.info.lighter, + color: 'info.darker', + muiLabel: 'info.lighter', + figmaLabel: 'On Info / Info Container Low', + figmaValue: `info/${getColorCode(currentTheme, 0)}` + }, + { + value: theme.palette.info.light, + color: 'info.dark', + muiLabel: 'info.light', + figmaLabel: 'Info Container High / Outline', + figmaValue: `info/${getColorCode(currentTheme, 1)}` + }, + { + value: theme.palette.info.main, + color: 'background.default', + muiLabel: 'info.main', + figmaLabel: 'Info', + figmaValue: `info/${getColorCode(currentTheme, 2)}` + }, + { + value: theme.palette.info.dark, + color: 'info.light', + muiLabel: 'info.dark', + figmaLabel: 'On Container/ Info Container', + figmaValue: `info/${getColorCode(currentTheme, 3)}` + }, + { + value: theme.palette.info.darker, + color: 'info.lighter', + muiLabel: 'info.darker', + figmaLabel: 'On Container Low / Container High', + figmaValue: `info/${getColorCode(currentTheme, 4)}` + } + ]; + + const successPalette = [ + { + value: theme.palette.success.lighter, + color: 'success.darker', + muiLabel: 'success.lighter', + figmaLabel: 'On Success / Success Container Low', + figmaValue: `success/${getColorCode(currentTheme, 0)}` + }, + { + value: theme.palette.success.light, + color: 'success.dark', + muiLabel: 'success.light', + figmaLabel: 'Success Container High / Outline', + figmaValue: `success/${getColorCode(currentTheme, 1)}` + }, + { + value: theme.palette.success.main, + color: 'background.default', + muiLabel: 'success.main', + figmaLabel: 'Success', + figmaValue: `success/${getColorCode(currentTheme, 2)}` + }, + { + value: theme.palette.success.dark, + color: 'success.light', + muiLabel: 'success.dark', + figmaLabel: 'On Container/ Success Container', + figmaValue: `success/${getColorCode(currentTheme, 3)}` + }, + { + value: theme.palette.success.darker, + color: 'success.lighter', + muiLabel: 'success.darker', + figmaLabel: 'On Container Low / Container High', + figmaValue: `success/${getColorCode(currentTheme, 4)}` + } + ]; + + const palettes = [ + { title: 'Primary', palette: primaryPalette }, + { title: 'Secondary', palette: secondaryPalette }, + { title: 'Neutral', palette: greyPalette }, + { title: 'Error', palette: errorPalette }, + { title: 'Warning', palette: warningPalette }, + { title: 'Info', palette: infoPalette }, + { title: 'Success', palette: successPalette } + ]; + + return ( + + + {palettes.map((palette, index) => ( + + ))} + + + ); +} + +ColorPalette.propTypes = { title: PropTypes.string, palette: PropTypes.array }; diff --git a/admin/vite/src/views/components/utils/shadow.jsx b/admin/vite/src/views/components/utils/shadow.jsx new file mode 100644 index 0000000..32a7e42 --- /dev/null +++ b/admin/vite/src/views/components/utils/shadow.jsx @@ -0,0 +1,57 @@ +import PropTypes from 'prop-types'; + +// @mui +import { useTheme } from '@mui/material/styles'; +import Grid from '@mui/material/Grid'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +// @project +import ComponentsWrapper from '@/components/ComponentsWrapper'; +import MainCard from '@/components/MainCard'; + +/*************************** SHADOW TYPE - LIST ***************************/ + +const shadows = [ + { label: 'Button Shadow', value: 'button' }, + { label: 'Section Shadow', value: 'section' }, + { label: 'Tooltip Shadow', value: 'tooltip' }, + { label: 'Focus Shadow', value: 'focus' } +]; + +/*************************** SHADOW - BOX ***************************/ + +function ShadowBox({ label, value }) { + const theme = useTheme(); + + return ( + + + + {`customShadows.${value}`} + + {label} + + + + + ); +} + +/*************************** UTILS - SHADOW ***************************/ + +export default function UtilsShadow() { + return ( + + + {shadows.map((item, index) => ( + + + + ))} + + + ); +} + +ShadowBox.propTypes = { label: PropTypes.string, value: PropTypes.any }; diff --git a/admin/vite/src/views/components/utils/typography.jsx b/admin/vite/src/views/components/utils/typography.jsx new file mode 100644 index 0000000..e30a8ac --- /dev/null +++ b/admin/vite/src/views/components/utils/typography.jsx @@ -0,0 +1,208 @@ +// @mui +import Grid from '@mui/material/Grid'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; + +// @project +import branding from '@/branding.json'; +import ComponentsWrapper from '@/components/ComponentsWrapper'; +import MainCard from '@/components/MainCard'; + +/*************************** TYPOGRAPHY - DATA ***************************/ + +const typographyData = [ + { + heading: 'Headings', + items: [ + { + title: 'Heading 01', + sizeValue: '40px', + lineHeight: '44px', + letterSpacing: '0px', + variant: 'h1', + label: 'h1 - Heading', + fontWeight: 'Medium (500)' + }, + { + title: 'Heading 02', + sizeValue: '32px', + lineHeight: '36px', + letterSpacing: '0px', + variant: 'h2', + label: 'h2 - Heading', + fontWeight: 'Medium (500)' + }, + { + title: 'Heading 03', + sizeValue: '28px', + lineHeight: '32px', + letterSpacing: '0px', + variant: 'h3', + label: 'h3 - Heading', + fontWeight: 'Medium (500)' + }, + { + title: 'Heading 04', + sizeValue: '24px', + lineHeight: '28px', + letterSpacing: '0px', + variant: 'h4', + label: 'h4 - Heading', + fontWeight: 'Medium (500)' + }, + { + title: 'Heading 05', + sizeValue: '20px', + lineHeight: '24px', + letterSpacing: '0px', + variant: 'h5', + label: 'h5 - Heading', + fontWeight: 'Medium (500)' + }, + { + title: 'Heading 06', + sizeValue: '18px', + lineHeight: '22px', + letterSpacing: '0px', + variant: 'h6', + label: 'h6 - Heading', + fontWeight: 'Medium (500)' + } + ] + }, + { + heading: 'Subtitle', + items: [ + { + title: 'Subtitle 01', + sizeValue: '16px', + lineHeight: '20px', + letterSpacing: '0px', + variant: 'subtitle1', + label: 'subtitle1', + fontWeight: 'Medium (500)' + }, + { + title: 'Subtitle 02', + sizeValue: '14px', + lineHeight: '18px', + letterSpacing: '0px', + variant: 'subtitle2', + label: 'subtitle2', + fontWeight: 'Medium (500)' + } + ] + }, + { + heading: 'Body / Paragraph', + items: [ + { + title: 'Body 01', + sizeValue: '16px', + lineHeight: '20px', + letterSpacing: '0px', + variant: 'body1', + label: 'body1 - Paragraph', + fontWeight: 'Regular (400)' + }, + { + title: 'Body 02', + sizeValue: '14px', + lineHeight: '18px', + letterSpacing: '0px', + variant: 'body2', + label: 'body2 - Paragraph', + fontWeight: 'Regular (400)' + } + ] + }, + { + heading: 'Caption', + items: [ + { + title: 'Caption', + sizeValue: '12px', + lineHeight: '16px', + letterSpacing: '0px', + variant: 'caption', + label: 'caption', + fontWeight: 'Regular (400)' + }, + { + title: 'Caption 01', + sizeValue: '12px', + lineHeight: '16px', + letterSpacing: '0px', + variant: 'caption1', + label: 'caption1', + fontWeight: 'Medium (500)' + } + ] + } +]; + +/*************************** COMPONENT - TYPOGRAPHY ***************************/ + +export default function TypographyComponent() { + return ( + + + {typographyData.map((list, index) => ( + + + {list.heading} + {list.items.map((block, index) => ( + + + + {block.title} + + {block.label} + + + + + {block.fontWeight} + + + + + Font Size + + {block.sizeValue} + + + + + + Line Height + + {block.lineHeight} + + + + + + Letter Spacing + + {block.letterSpacing} + + + + + + + + {block.variant} - {branding.brandName} for every industry + + + + + ))} + + + ))} + + + ); +} diff --git a/admin/vite/src/vite-env.d.js b/admin/vite/src/vite-env.d.js new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/admin/vite/src/vite-env.d.js @@ -0,0 +1 @@ +/// diff --git a/admin/vite/vite.config.mjs b/admin/vite/vite.config.mjs new file mode 100644 index 0000000..4a63ba1 --- /dev/null +++ b/admin/vite/vite.config.mjs @@ -0,0 +1,28 @@ +import { defineConfig, loadEnv } from 'vite'; +import react from '@vitejs/plugin-react'; +import jsconfigPaths from 'vite-jsconfig-paths'; + +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd(), ''); + const APP_BASE_URL = `${env.VITE_APP_BASE_URL}`; + const PORT = 3000; + + return { + server: { + // this ensures that the browser opens upon server start + open: true, + // this sets a default port to 3000 + port: PORT, + host: true + }, + preview: { + open: true, + host: true + }, + define: { + global: 'window' + }, + base: APP_BASE_URL, + plugins: [react(), jsconfigPaths()] + }; +}); diff --git a/uikit/react/.env b/uikit/react/.env index 479e7f3..0a8fbf9 100644 --- a/uikit/react/.env +++ b/uikit/react/.env @@ -1,5 +1,5 @@ ## Version -NEXT_PUBLIC_VERSION=v1.2.0 +NEXT_PUBLIC_VERSION=v1.3.0 ## Public URL NEXT_PUBLIC_PATH= diff --git a/uikit/react/package-lock.json b/uikit/react/package-lock.json index f0a56e3..3cd527a 100644 --- a/uikit/react/package-lock.json +++ b/uikit/react/package-lock.json @@ -1,106 +1,121 @@ { "name": "saasable-ui-free", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "saasable-ui-free", - "version": "1.2.0", + "version": "1.3.0", "dependencies": { "@emotion/cache": "11.14.0", "@emotion/react": "11.14.0", - "@emotion/styled": "11.14.0", - "@mui/lab": "7.0.0-beta.10", - "@mui/material": "7.0.2", - "@mui/material-nextjs": "7.0.2", - "axios": "1.8.4", - "framer-motion": "12.6.5", + "@emotion/styled": "11.14.1", + "@mui/lab": "7.0.0-beta.14", + "@mui/material": "7.2.0", + "@mui/material-nextjs": "7.2.0", + "axios": "1.10.0", + "framer-motion": "12.23.12", "lodash-es": "4.17.21", - "next": "15.3.0", + "motion": "12.23.12", + "next": "15.4.2", "react": "19.1.0", "react-dom": "19.1.0", - "react-hook-form": "7.55.0", + "react-hook-form": "7.60.0", "react-slick": "0.30.3", "slick-carousel": "1.8.1" }, "devDependencies": { - "@eslint/js": "9.24.0", - "eslint": "9.24.0", - "eslint-config-next": "15.3.0", - "eslint-config-prettier": "10.1.2", - "eslint-plugin-prettier": "5.2.6", - "prettier": "3.5.3" + "@eslint/compat": "1.3.1", + "@eslint/eslintrc": "3.3.1", + "@eslint/js": "9.31.0", + "@types/node": "24.2.0", + "eslint": "9.31.0", + "eslint-config-next": "15.4.3", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-prettier": "5.5.3", + "eslint-plugin-react-hooks": "5.2.0", + "prettier": "3.6.2" } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -110,78 +125,75 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@emnapi/core": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.0.tgz", - "integrity": "sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz", + "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.1", + "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", - "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", "license": "MIT", "optional": true, "dependencies": { @@ -189,9 +201,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", + "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", "dev": true, "license": "MIT", "optional": true, @@ -296,9 +308,9 @@ "license": "MIT" }, "node_modules/@emotion/styled": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", - "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", @@ -346,9 +358,9 @@ "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", - "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -387,10 +399,28 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.1.tgz", + "integrity": "sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -403,9 +433,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", - "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -413,9 +443,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -449,27 +479,17 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/js": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz", - "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { @@ -483,32 +503,19 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.15.1", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -562,9 +569,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -576,9 +583,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", - "integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", + "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", "cpu": [ "arm64" ], @@ -594,13 +601,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" + "@img/sharp-libvips-darwin-arm64": "1.2.0" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.1.tgz", - "integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", + "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", "cpu": [ "x64" ], @@ -616,13 +623,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" + "@img/sharp-libvips-darwin-x64": "1.2.0" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", "cpu": [ "arm64" ], @@ -636,9 +643,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", + "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", "cpu": [ "x64" ], @@ -652,9 +659,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", + "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", "cpu": [ "arm" ], @@ -668,9 +675,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", + "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", "cpu": [ "arm64" ], @@ -684,9 +691,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", + "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", "cpu": [ "ppc64" ], @@ -700,9 +707,9 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", + "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", "cpu": [ "s390x" ], @@ -716,9 +723,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", + "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==", "cpu": [ "x64" ], @@ -732,9 +739,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", + "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", "cpu": [ "arm64" ], @@ -748,9 +755,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", + "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", "cpu": [ "x64" ], @@ -764,9 +771,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.1.tgz", - "integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", + "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", "cpu": [ "arm" ], @@ -782,13 +789,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" + "@img/sharp-libvips-linux-arm": "1.2.0" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.1.tgz", - "integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", + "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", "cpu": [ "arm64" ], @@ -804,13 +811,35 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" + "@img/sharp-libvips-linux-arm64": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", + "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.0" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.1.tgz", - "integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", + "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", "cpu": [ "s390x" ], @@ -826,13 +855,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" + "@img/sharp-libvips-linux-s390x": "1.2.0" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.1.tgz", - "integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", + "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==", "cpu": [ "x64" ], @@ -848,13 +877,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" + "@img/sharp-libvips-linux-x64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.1.tgz", - "integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", + "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", "cpu": [ "arm64" ], @@ -870,13 +899,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.1.tgz", - "integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", + "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", "cpu": [ "x64" ], @@ -892,20 +921,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + "@img/sharp-libvips-linuxmusl-x64": "1.2.0" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.1.tgz", - "integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", + "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", "cpu": [ "wasm32" ], "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.0" + "@emnapi/runtime": "^1.4.4" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -914,10 +943,29 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", + "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.1.tgz", - "integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", + "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", "cpu": [ "ia32" ], @@ -934,9 +982,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.1.tgz", - "integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", + "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", "cpu": [ "x64" ], @@ -953,17 +1001,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -975,25 +1019,16 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1001,9 +1036,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.2.tgz", - "integrity": "sha512-TfeFU9TgN1N06hyb/pV/63FfO34nijZRMqgHk0TJ3gkl4Fbd+wZ73+ZtOd7jag6hMmzO9HSrBc6Vdn591nhkAg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.1.tgz", + "integrity": "sha512-+mIK1Z0BhOaQ0vCgOkT1mSrIpEHLo338h4/duuL4TBLXPvUMit732mnwJY3W40Avy30HdeSfwUAAGRkKmwRaEQ==", "license": "MIT", "funding": { "type": "opencollective", @@ -1011,15 +1046,15 @@ } }, "node_modules/@mui/lab": { - "version": "7.0.0-beta.10", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-7.0.0-beta.10.tgz", - "integrity": "sha512-ide9oABYRAvJAFtxjc+bAaeAR74yVZ4avV7Ffj/D5CbbgSp/d5ns9SQtuWIZ7oJ3S7l1fcR06dj8EZuPRTmo8A==", + "version": "7.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-7.0.0-beta.14.tgz", + "integrity": "sha512-pn+ZvylDcBKQOo17oa/PhtIA/UFQFq8RvpN+r/jHrztz/CjMDju2CWBne0txvQ5JIS8uTIGp2/IsTa7II1g5wg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.10", - "@mui/system": "^7.0.1", - "@mui/types": "^7.4.0", - "@mui/utils": "^7.0.1", + "@babel/runtime": "^7.27.1", + "@mui/system": "^7.1.1", + "@mui/types": "^7.4.3", + "@mui/utils": "^7.1.1", "clsx": "^2.1.1", "prop-types": "^15.8.1" }, @@ -1033,8 +1068,8 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material": "^7.0.1", - "@mui/material-pigment-css": "^7.0.1", + "@mui/material": "^7.1.2", + "@mui/material-pigment-css": "^7.1.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1055,16 +1090,16 @@ } }, "node_modules/@mui/material": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.0.2.tgz", - "integrity": "sha512-rjJlJ13+3LdLfobRplkXbjIFEIkn6LgpetgU/Cs3Xd8qINCCQK9qXQIjjQ6P0FXFTPFzEVMj0VgBR1mN+FhOcA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz", + "integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/core-downloads-tracker": "^7.0.2", - "@mui/system": "^7.0.2", - "@mui/types": "^7.4.1", - "@mui/utils": "^7.0.2", + "@babel/runtime": "^7.27.6", + "@mui/core-downloads-tracker": "^7.2.0", + "@mui/system": "^7.2.0", + "@mui/types": "^7.4.4", + "@mui/utils": "^7.2.0", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", @@ -1083,7 +1118,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^7.0.2", + "@mui/material-pigment-css": "^7.2.0", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1104,12 +1139,12 @@ } }, "node_modules/@mui/material-nextjs": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-7.0.2.tgz", - "integrity": "sha512-hjm0MFSjx7HWbORMRldbwfKrQPHTSMXD6dkCCSTQZ2XX8fkKlnOXNnoXUFzlzFtMKMzs9QOfe3dHooTvnDEfuQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-7.2.0.tgz", + "integrity": "sha512-/W2iKkjeOdaYBu5xNYi/w5HUX2C4HHefSMW7UgCvTKl90yy1puE7kmAgv/gxBghqhEE27cNWdevRrnvVhNRaUA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0" + "@babel/runtime": "^7.27.6" }, "engines": { "node": ">=14.0.0" @@ -1139,13 +1174,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.2.tgz", - "integrity": "sha512-6lt8heDC9wN8YaRqEdhqnm0cFCv08AMf4IlttFvOVn7ZdKd81PNpD/rEtPGLLwQAFyyKSxBG4/2XCgpbcdNKiA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.1.tgz", + "integrity": "sha512-WU3YLkKXii/x8ZEKnrLKsPwplCVE11yZxUvlaaZSIzCcI3x2OdFC8eMlNy74hVeUsYQvzzX1Es/k4ARPlFvpPQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/utils": "^7.0.2", + "@babel/runtime": "^7.28.2", + "@mui/utils": "^7.3.1", "prop-types": "^15.8.1" }, "engines": { @@ -1166,13 +1201,13 @@ } }, "node_modules/@mui/styled-engine": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.2.tgz", - "integrity": "sha512-11Bt4YdHGlh7sB8P75S9mRCUxTlgv7HGbr0UKz6m6Z9KLeiw1Bm9y/t3iqLLVMvSHYB6zL8X8X+LmfTE++gyBw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.1.tgz", + "integrity": "sha512-Nqo6OHjvJpXJ1+9TekTE//+8RybgPQUKwns2Lh0sq+8rJOUSUKS3KALv4InSOdHhIM9Mdi8/L7LTF1/Ky6D6TQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@emotion/cache": "^11.13.5", + "@babel/runtime": "^7.28.2", + "@emotion/cache": "^11.14.0", "@emotion/serialize": "^1.3.3", "@emotion/sheet": "^1.4.0", "csstype": "^3.1.3", @@ -1200,16 +1235,16 @@ } }, "node_modules/@mui/system": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.0.2.tgz", - "integrity": "sha512-yFUraAWYWuKIISPPEVPSQ1NLeqmTT4qiQ+ktmyS8LO/KwHxB+NNVOacEZaIofh5x1NxY8rzphvU5X2heRZ/RDA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.1.tgz", + "integrity": "sha512-mIidecvcNVpNJMdPDmCeoSL5zshKBbYPcphjuh6ZMjhybhqhZ4mX6k9zmIWh6XOXcqRQMg5KrcjnO0QstrNj3w==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/private-theming": "^7.0.2", - "@mui/styled-engine": "^7.0.2", - "@mui/types": "^7.4.1", - "@mui/utils": "^7.0.2", + "@babel/runtime": "^7.28.2", + "@mui/private-theming": "^7.3.1", + "@mui/styled-engine": "^7.3.1", + "@mui/types": "^7.4.5", + "@mui/utils": "^7.3.1", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1240,12 +1275,12 @@ } }, "node_modules/@mui/types": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.1.tgz", - "integrity": "sha512-gUL8IIAI52CRXP/MixT1tJKt3SI6tVv4U/9soFsTtAsHzaJQptZ42ffdHZV3niX1ei0aUgMvOxBBN0KYqdG39g==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.5.tgz", + "integrity": "sha512-ZPwlAOE3e8C0piCKbaabwrqZbW4QvWz0uapVPWya7fYj6PeDkl5sSJmomT7wjOcZGPB48G/a6Ubidqreptxz4g==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0" + "@babel/runtime": "^7.28.2" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1257,17 +1292,17 @@ } }, "node_modules/@mui/utils": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.0.2.tgz", - "integrity": "sha512-72gcuQjPzhj/MLmPHLCgZjy2VjOH4KniR/4qRtXTTXIEwbkgcN+Y5W/rC90rWtMmZbjt9svZev/z+QHUI4j74w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-/31y4wZqVWa0jzMnzo6JPjxwP6xXy4P3+iLbosFg/mJQowL1KIou0LC+lquWW60FKVbKz5ZUWBg2H3jausa0pw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/types": "^7.4.1", - "@types/prop-types": "^15.7.14", + "@babel/runtime": "^7.28.2", + "@mui/types": "^7.4.5", + "@types/prop-types": "^15.7.15", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^19.1.0" + "react-is": "^19.1.1" }, "engines": { "node": ">=14.0.0" @@ -1287,28 +1322,28 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.8.tgz", - "integrity": "sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.4.0", - "@emnapi/runtime": "^1.4.0", - "@tybys/wasm-util": "^0.9.0" + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" } }, "node_modules/@next/env": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.0.tgz", - "integrity": "sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.2.tgz", + "integrity": "sha512-kd7MvW3pAP7tmk1NaiX4yG15xb2l4gNhteKQxt3f+NGR22qwPymn9RBuv26QKfIKmfo6z2NpgU8W2RT0s0jlvg==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.0.tgz", - "integrity": "sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.4.3.tgz", + "integrity": "sha512-wYYbP29uZlm9lqD1C6HDgW9WNNt6AlTogYKYpDyATs0QrKYIv/rPueoIDRH6qttXGCe3zNrb7hxfQx4w8OSkLA==", "dev": true, "license": "MIT", "dependencies": { @@ -1316,9 +1351,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.0.tgz", - "integrity": "sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.2.tgz", + "integrity": "sha512-ovqjR8NjCBdBf1U+R/Gvn0RazTtXS9n6wqs84iFaCS1NHbw9ksVE4dfmsYcLoyUVd9BWE0bjkphOWrrz8uz/uw==", "cpu": [ "arm64" ], @@ -1332,9 +1367,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.0.tgz", - "integrity": "sha512-m+eO21yg80En8HJ5c49AOQpFDq+nP51nu88ZOMCorvw3g//8g1JSUsEiPSiFpJo1KCTQ+jm9H0hwXK49H/RmXg==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.2.tgz", + "integrity": "sha512-I8d4W7tPqbdbHRI4z1iBfaoJIBrEG4fnWKIe+Rj1vIucNZ5cEinfwkBt3RcDF00bFRZRDpvKuDjgMFD3OyRBnw==", "cpu": [ "x64" ], @@ -1348,9 +1383,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.0.tgz", - "integrity": "sha512-H0Kk04ZNzb6Aq/G6e0un4B3HekPnyy6D+eUBYPJv9Abx8KDYgNMWzKt4Qhj57HXV3sTTjsfc1Trc1SxuhQB+Tg==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.2.tgz", + "integrity": "sha512-lvhz02dU3Ec5thzfQ2RCUeOFADjNkS/px1W7MBt7HMhf0/amMfT8Z/aXOwEA+cVWN7HSDRSUc8hHILoHmvajsg==", "cpu": [ "arm64" ], @@ -1364,9 +1399,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.0.tgz", - "integrity": "sha512-k8GVkdMrh/+J9uIv/GpnHakzgDQhrprJ/FbGQvwWmstaeFG06nnAoZCJV+wO/bb603iKV1BXt4gHG+s2buJqZA==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.2.tgz", + "integrity": "sha512-v+5PPfL8UP+KKHS3Mox7QMoeFdMlaV0zeNMIF7eLC4qTiVSO0RPNnK0nkBZSD5BEkkf//c+vI9s/iHxddCZchA==", "cpu": [ "arm64" ], @@ -1380,9 +1415,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.0.tgz", - "integrity": "sha512-ZMQ9yzDEts/vkpFLRAqfYO1wSpIJGlQNK9gZ09PgyjBJUmg8F/bb8fw2EXKgEaHbCc4gmqMpDfh+T07qUphp9A==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.2.tgz", + "integrity": "sha512-PHLYOC9W2cu6I/JEKo77+LW4uPNvyEQiSkVRUQPsOIsf01PRr8PtPhwtz3XNnC9At8CrzPkzqQ9/kYDg4R4Inw==", "cpu": [ "x64" ], @@ -1396,9 +1431,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.0.tgz", - "integrity": "sha512-RFwq5VKYTw9TMr4T3e5HRP6T4RiAzfDJ6XsxH8j/ZeYq2aLsBqCkFzwMI0FmnSsLaUbOb46Uov0VvN3UciHX5A==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.2.tgz", + "integrity": "sha512-lpmUF9FfLFns4JbTu+5aJGA8aR9dXaA12eoNe9CJbVkGib0FDiPa4kBGTwy0xDxKNGlv3bLDViyx1U+qafmuJQ==", "cpu": [ "x64" ], @@ -1412,9 +1447,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.0.tgz", - "integrity": "sha512-a7kUbqa/k09xPjfCl0RSVAvEjAkYBYxUzSVAzk2ptXiNEL+4bDBo9wNC43G/osLA/EOGzG4CuNRFnQyIHfkRgQ==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.2.tgz", + "integrity": "sha512-aMjogoGnRepas0LQ/PBPsvvUzj+IoXw2IoDSEShEtrsu2toBiaxEWzOQuPZ8nie8+1iF7TA63S7rlp3YWAjNEg==", "cpu": [ "arm64" ], @@ -1428,9 +1463,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.0.tgz", - "integrity": "sha512-vHUQS4YVGJPmpjn7r5lEZuMhK5UQBNBRSB+iGDvJjaNk649pTIcRluDWNb9siunyLLiu/LDPHfvxBtNamyuLTw==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.2.tgz", + "integrity": "sha512-FxwauyexSFu78wEqR/+NB9MnqXVj6SxJKwcVs2CRjeSX/jBagDCgtR2W36PZUYm0WPgY1pQ3C1+nn7zSnwROuw==", "cpu": [ "x64" ], @@ -1492,9 +1527,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.3.tgz", - "integrity": "sha512-yMV8bb9prWI21N6FsrnPCbhoYb8UUvYCDGoSvPHBloVC095Ef2ker43hzXkJ6TpJPw53S8FeFYkARa7GGIGwxg==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { @@ -1522,18 +1557,12 @@ "license": "MIT" }, "node_modules/@rushstack/eslint-patch": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", - "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz", + "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==", "dev": true, "license": "MIT" }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1544,9 +1573,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", + "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", "dev": true, "license": "MIT", "optional": true, @@ -1555,9 +1584,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -1575,6 +1604,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.0.tgz", + "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -1582,15 +1621,15 @@ "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", - "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz", + "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==", "license": "MIT", "peer": true, "dependencies": { @@ -1607,21 +1646,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", - "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", + "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/type-utils": "8.29.0", - "@typescript-eslint/utils": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/type-utils": "8.39.0", + "@typescript-eslint/utils": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1631,22 +1670,32 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.39.0", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", + "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", "debug": "^4.3.4" }, "engines": { @@ -1658,38 +1707,78 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", + "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.39.0", + "@typescript-eslint/types": "^8.39.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", - "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", + "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0" + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", + "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", + "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", - "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", + "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/utils": "8.39.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1700,13 +1789,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", - "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", + "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", "dev": true, "license": "MIT", "engines": { @@ -1718,20 +1807,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", - "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", + "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/project-service": "8.39.0", + "@typescript-eslint/tsconfig-utils": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1741,13 +1832,13 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/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==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1801,16 +1892,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", + "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1821,18 +1912,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", - "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", + "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.39.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1842,10 +1933,38 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.4.1.tgz", - "integrity": "sha512-8Tv+Bsd0BjGwfEedIyor4inw8atppRxM5BdUnIt+3mAm/QXUm7Dw74CHnXpfZKXkp07EXJGiA8hStqCINAWhdw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", "cpu": [ "arm64" ], @@ -1857,9 +1976,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.4.1.tgz", - "integrity": "sha512-X8c3PhWziEMKAzZz+YAYWfwawi5AEgzy/hmfizAB4C70gMHLKmInJcp1270yYAOs7z07YVFI220pp50z24Jk3A==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", "cpu": [ "x64" ], @@ -1871,9 +1990,9 @@ ] }, "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.4.1.tgz", - "integrity": "sha512-UUr/nREy1UdtxXQnmLaaTXFGOcGxPwNIzeJdb3KXai3TKtC1UgNOB9s8KOA4TaxOUBR/qVgL5BvBwmUjD5yuVA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", "cpu": [ "x64" ], @@ -1885,9 +2004,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.4.1.tgz", - "integrity": "sha512-e3pII53dEeS8inkX6A1ad2UXE0nuoWCqik4kOxaDnls0uJUq0ntdj5d9IYd+bv5TDwf9DSge/xPOvCmRYH+Tsw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", "cpu": [ "arm" ], @@ -1899,9 +2018,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.4.1.tgz", - "integrity": "sha512-e/AKKd9gR+HNmVyDEPI/PIz2t0DrA3cyonHNhHVjrkxe8pMCiYiqhtn1+h+yIpHUtUlM6Y1FNIdivFa+r7wrEQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", "cpu": [ "arm" ], @@ -1913,9 +2032,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.4.1.tgz", - "integrity": "sha512-vtIu34luF1jRktlHtiwm2mjuE8oJCsFiFr8hT5+tFQdqFKjPhbJXn83LswKsOhy0GxAEevpXDI4xxEwkjuXIPA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", "cpu": [ "arm64" ], @@ -1927,9 +2046,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.4.1.tgz", - "integrity": "sha512-H3PaOuGyhFXiyJd+09uPhGl4gocmhyi1BRzvsP8Lv5AQO3p3/ZY7WjV4t2NkBksm9tMjf3YbOVHyPWi2eWsNYw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", "cpu": [ "arm64" ], @@ -1941,9 +2060,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.4.1.tgz", - "integrity": "sha512-4+GmJcaaFntCi1S01YByqp8wLMjV/FyQyHVGm0vedIhL1Vfx7uHkz/sZmKsidRwokBGuxi92GFmSzqT2O8KcNA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", "cpu": [ "ppc64" ], @@ -1954,10 +2073,38 @@ "linux" ] }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.4.1.tgz", - "integrity": "sha512-6RDQVCmtFYTlhy89D5ixTqo9bTQqFhvNN0Ey1wJs5r+01Dq15gPHRXv2jF2bQATtMrOfYwv+R2ZR9ew1N1N3YQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", "cpu": [ "s390x" ], @@ -1969,9 +2116,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.4.1.tgz", - "integrity": "sha512-XpU9uzIkD86+19NjCXxlVPISMUrVXsXo5htxtuG+uJ59p5JauSRZsIxQxzzfKzkxEjdvANPM/lS1HFoX6A6QeA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", "cpu": [ "x64" ], @@ -1983,9 +2130,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.4.1.tgz", - "integrity": "sha512-3CDjG/spbTKCSHl66QP2ekHSD+H34i7utuDIM5gzoNBcZ1gTO0Op09Wx5cikXnhORRf9+HyDWzm37vU1PLSM1A==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", "cpu": [ "x64" ], @@ -1997,9 +2144,9 @@ ] }, "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.4.1.tgz", - "integrity": "sha512-50tYhvbCTnuzMn7vmP8IV2UKF7ITo1oihygEYq9wW2DUb/Y+QMqBHJUSCABRngATjZ4shOK6f2+s0gQX6ElENQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", "cpu": [ "wasm32" ], @@ -2007,16 +2154,16 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.8" + "@napi-rs/wasm-runtime": "^0.2.11" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.4.1.tgz", - "integrity": "sha512-KyJiIne/AqV4IW0wyQO34wSMuJwy3VxVQOfIXIPyQ/Up6y/zi2P/WwXb78gHsLiGRUqCA9LOoCX+6dQZde0g1g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", "cpu": [ "arm64" ], @@ -2028,9 +2175,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.4.1.tgz", - "integrity": "sha512-y2NUD7pygrBolN2NoXUrwVqBpKPhF8DiSNE5oB5/iFO49r2DpoYqdj5HPb3F42fPBH5qNqj6Zg63+xCEzAD2hw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", "cpu": [ "ia32" ], @@ -2042,9 +2189,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.4.1.tgz", - "integrity": "sha512-hVXaObGI2lGFmrtT77KSbPQ3I+zk9IU500wobjk0+oX59vg/0VqAzABNtt3YSQYgXTC2a/LYxekLfND/wlt0yQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", "cpu": [ "x64" ], @@ -2056,9 +2203,9 @@ ] }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -2146,18 +2293,20 @@ } }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2336,9 +2485,9 @@ } }, "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -2379,9 +2528,9 @@ "license": "MIT" }, "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==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -2402,17 +2551,6 @@ "node": ">=8" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2472,9 +2610,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001712", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", - "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", + "version": "1.0.30001733", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz", + "integrity": "sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==", "funding": [ { "type": "opencollective", @@ -2698,9 +2836,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2767,9 +2905,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "optional": true, "engines": { @@ -2836,9 +2974,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { @@ -2846,18 +2984,18 @@ "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -2869,21 +3007,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -2892,7 +3033,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -3018,20 +3159,20 @@ } }, "node_modules/eslint": { - "version": "9.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz", - "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.0", - "@eslint/core": "^0.12.0", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.24.0", - "@eslint/plugin-kit": "^0.2.7", + "@eslint/js": "9.31.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -3042,9 +3183,9 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3079,13 +3220,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.0.tgz", - "integrity": "sha512-+Z3M1W9MnJjX3W4vI9CHfKlEyhTWOUHvc5dB89FyRnzPsUkJlLWZOi8+1pInuVcSztSM4MwBFB0hIHf4Rbwu4g==", + "version": "15.4.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.4.3.tgz", + "integrity": "sha512-blytVMTpdqqlLBvYOvwT51m5eqRHNofKR/pfBSeeHiQMSY33kCph31hAK3DiAsL/RamVJRQzHwTRbbNr+7c/sw==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.3.0", + "@next/eslint-plugin-next": "15.4.3", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3107,14 +3248,17 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", - "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -3142,9 +3286,9 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.0.tgz", - "integrity": "sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3153,8 +3297,8 @@ "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.12", - "unrs-resolver": "^1.3.2" + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3177,9 +3321,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -3205,30 +3349,30 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -3289,14 +3433,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz", - "integrity": "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.0" + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3394,9 +3538,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3411,9 +3555,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3424,15 +3568,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3626,9 +3770,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -3662,14 +3806,15 @@ } }, "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -3677,13 +3822,13 @@ } }, "node_modules/framer-motion": { - "version": "12.6.5", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.6.5.tgz", - "integrity": "sha512-MKvnWov0paNjvRJuIy6x418w23tFqRfS6CXHhZrCiSEpXVlo/F+usr8v4/3G6O0u7CpsaO1qop+v4Ip7PRCBqQ==", + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz", + "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==", "license": "MIT", "dependencies": { - "motion-dom": "^12.6.5", - "motion-utils": "^12.6.5", + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { @@ -3799,9 +3944,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3825,12 +3970,16 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -4247,6 +4396,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4728,19 +4890,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/motion": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.12.tgz", + "integrity": "sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.23.12", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/motion-dom": { - "version": "12.7.2", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.7.2.tgz", - "integrity": "sha512-7+sytBQyb9XRRH6lyLRQf+R6y2BE79J2EgTijTSxYgGt+ufpnoRDPgru9KHvA125tTHnbAXDzeTUb9OvscSitA==", + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", "license": "MIT", "dependencies": { - "motion-utils": "^12.7.2" + "motion-utils": "^12.23.6" } }, "node_modules/motion-utils": { - "version": "12.7.2", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.7.2.tgz", - "integrity": "sha512-XhZwqctxyJs89oX00zn3OGCuIIpVevbTa+u82usWBC6pSHUd2AoNWiYa7Du8tJxJy9TFbZ82pcn5t7NOm1PHAw==", + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", "license": "MIT" }, "node_modules/ms": { @@ -4767,6 +4955,22 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-postinstall": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz", + "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4775,15 +4979,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.0.tgz", - "integrity": "sha512-k0MgP6BsK8cZ73wRjMazl2y2UcXj49ZXLDEgx6BikWuby/CN+nh81qFFI16edgd7xYpe/jj2OZEIwCoqnzz0bQ==", + "version": "15.4.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.4.2.tgz", + "integrity": "sha512-oH1rmFso+84NIkocfuxaGKcXIjMUTmnzV2x0m8qsYtB4gD6iflLMESXt5XJ8cFgWMBei4v88rNr/j+peNg72XA==", "license": "MIT", "dependencies": { - "@next/env": "15.3.0", - "@swc/counter": "0.1.3", + "@next/env": "15.4.2", "@swc/helpers": "0.5.15", - "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -4795,19 +4997,19 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.0", - "@next/swc-darwin-x64": "15.3.0", - "@next/swc-linux-arm64-gnu": "15.3.0", - "@next/swc-linux-arm64-musl": "15.3.0", - "@next/swc-linux-x64-gnu": "15.3.0", - "@next/swc-linux-x64-musl": "15.3.0", - "@next/swc-win32-arm64-msvc": "15.3.0", - "@next/swc-win32-x64-msvc": "15.3.0", - "sharp": "^0.34.1" + "@next/swc-darwin-arm64": "15.4.2", + "@next/swc-darwin-x64": "15.4.2", + "@next/swc-linux-arm64-gnu": "15.4.2", + "@next/swc-linux-arm64-musl": "15.4.2", + "@next/swc-linux-x64-gnu": "15.4.2", + "@next/swc-linux-x64-musl": "15.4.2", + "@next/swc-win32-arm64-msvc": "15.4.2", + "@next/swc-win32-x64-msvc": "15.4.2", + "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", @@ -5151,9 +5353,9 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -5255,9 +5457,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.55.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz", - "integrity": "sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.60.0.tgz", + "integrity": "sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -5271,9 +5473,9 @@ } }, "node_modules/react-is": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", - "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz", + "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==", "license": "MIT" }, "node_modules/react-slick": { @@ -5332,12 +5534,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -5501,9 +5697,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "devOptional": true, "license": "ISC", "bin": { @@ -5563,16 +5759,16 @@ } }, "node_modules/sharp": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz", - "integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz", + "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.7.1" + "detect-libc": "^2.0.4", + "semver": "^7.7.2" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -5581,26 +5777,28 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.1", - "@img/sharp-darwin-x64": "0.34.1", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.1", - "@img/sharp-linux-arm64": "0.34.1", - "@img/sharp-linux-s390x": "0.34.1", - "@img/sharp-linux-x64": "0.34.1", - "@img/sharp-linuxmusl-arm64": "0.34.1", - "@img/sharp-linuxmusl-x64": "0.34.1", - "@img/sharp-wasm32": "0.34.1", - "@img/sharp-win32-ia32": "0.34.1", - "@img/sharp-win32-x64": "0.34.1" + "@img/sharp-darwin-arm64": "0.34.3", + "@img/sharp-darwin-x64": "0.34.3", + "@img/sharp-libvips-darwin-arm64": "1.2.0", + "@img/sharp-libvips-darwin-x64": "1.2.0", + "@img/sharp-libvips-linux-arm": "1.2.0", + "@img/sharp-libvips-linux-arm64": "1.2.0", + "@img/sharp-libvips-linux-ppc64": "1.2.0", + "@img/sharp-libvips-linux-s390x": "1.2.0", + "@img/sharp-libvips-linux-x64": "1.2.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", + "@img/sharp-libvips-linuxmusl-x64": "1.2.0", + "@img/sharp-linux-arm": "0.34.3", + "@img/sharp-linux-arm64": "0.34.3", + "@img/sharp-linux-ppc64": "0.34.3", + "@img/sharp-linux-s390x": "0.34.3", + "@img/sharp-linux-x64": "0.34.3", + "@img/sharp-linuxmusl-arm64": "0.34.3", + "@img/sharp-linuxmusl-x64": "0.34.3", + "@img/sharp-wasm32": "0.34.3", + "@img/sharp-win32-arm64": "0.34.3", + "@img/sharp-win32-ia32": "0.34.3", + "@img/sharp-win32-x64": "0.34.3" } }, "node_modules/shebang-command": { @@ -5753,12 +5951,18 @@ "dev": true, "license": "MIT" }, - "node_modules/streamsearch": { + "node_modules/stop-iteration-iterator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" } }, "node_modules/string-convert": { @@ -5958,14 +6162,13 @@ } }, "node_modules/synckit": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", - "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.3", - "tslib": "^2.8.1" + "@pkgr/core": "^0.2.9" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -5975,13 +6178,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2" }, "engines": { @@ -5992,9 +6195,9 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6007,9 +6210,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -6156,9 +6359,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -6189,31 +6392,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, "node_modules/unrs-resolver": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.4.1.tgz", - "integrity": "sha512-MhPB3wBI5BR8TGieTb08XuYlE8oFVEXdSAgat3psdlRyejl8ojQ8iqPcjh094qCZ1r+TnkxzP6BeCd/umfHckQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, "funding": { - "url": "https://github.com/sponsors/JounQin" + "url": "https://opencollective.com/unrs-resolver" }, "optionalDependencies": { - "@unrs/resolver-binding-darwin-arm64": "1.4.1", - "@unrs/resolver-binding-darwin-x64": "1.4.1", - "@unrs/resolver-binding-freebsd-x64": "1.4.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.4.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.4.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.4.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.4.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.4.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.4.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.4.1", - "@unrs/resolver-binding-linux-x64-musl": "1.4.1", - "@unrs/resolver-binding-wasm32-wasi": "1.4.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.4.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.4.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.4.1" + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "node_modules/uri-js": { diff --git a/uikit/react/package.json b/uikit/react/package.json index 1476244..ec6e3bf 100644 --- a/uikit/react/package.json +++ b/uikit/react/package.json @@ -1,6 +1,6 @@ { "name": "saasable-ui-free", - "version": "1.2.0", + "version": "1.3.0", "private": false, "author": { "email": "phoenixcoded@gmail.com", @@ -12,32 +12,37 @@ "start": "next start", "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", - "prettier": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", - "knip": "knip" + "prettier": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"" }, "dependencies": { "@emotion/cache": "11.14.0", "@emotion/react": "11.14.0", - "@emotion/styled": "11.14.0", - "@mui/lab": "7.0.0-beta.10", - "@mui/material": "7.0.2", - "@mui/material-nextjs": "7.0.2", - "axios": "1.8.4", - "framer-motion": "12.6.5", + "@emotion/styled": "11.14.1", + "@mui/lab": "7.0.0-beta.14", + "@mui/material": "7.2.0", + "@mui/material-nextjs": "7.2.0", + "axios": "1.10.0", + "framer-motion": "12.23.12", "lodash-es": "4.17.21", - "next": "15.3.0", + "motion": "12.23.12", + "next": "15.4.2", "react": "19.1.0", - "react-dom": "19.1.0", - "react-hook-form": "7.55.0", + "react-dom": "19.1.0", + "react-hook-form": "7.60.0", "react-slick": "0.30.3", "slick-carousel": "1.8.1" }, "devDependencies": { - "@eslint/js": "9.24.0", - "eslint": "9.24.0", - "eslint-config-next": "15.3.0", - "eslint-config-prettier": "10.1.2", - "eslint-plugin-prettier": "5.2.6", - "prettier": "3.5.3" + "@eslint/compat": "1.3.1", + "@eslint/eslintrc": "3.3.1", + "@eslint/js": "9.31.0", + "@types/node": "24.2.0", + "eslint": "9.31.0", + "eslint-config-next": "15.4.3", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-prettier": "5.5.3", + "eslint-plugin-react-hooks": "5.2.0", + "prettier": "3.6.2" } } diff --git a/uikit/react/public/assets/images/presentation/blog-detail-light.svg b/uikit/react/public/assets/images/presentation/blog-detail-light.svg new file mode 100644 index 0000000..8280899 --- /dev/null +++ b/uikit/react/public/assets/images/presentation/blog-detail-light.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/uikit/react/public/assets/images/presentation/benefits-light.svg b/uikit/react/public/assets/images/presentation/metrics-light.svg similarity index 72% rename from uikit/react/public/assets/images/presentation/benefits-light.svg rename to uikit/react/public/assets/images/presentation/metrics-light.svg index 26453be..bb63d06 100644 --- a/uikit/react/public/assets/images/presentation/benefits-light.svg +++ b/uikit/react/public/assets/images/presentation/metrics-light.svg @@ -1,11 +1,11 @@ - - - - - - - - + + + + + + + + diff --git a/uikit/react/src/app/(default)/layout.jsx b/uikit/react/src/app/(default)/layout.jsx index 84e96d1..bec6d55 100644 --- a/uikit/react/src/app/(default)/layout.jsx +++ b/uikit/react/src/app/(default)/layout.jsx @@ -4,23 +4,23 @@ import dynamic from 'next/dynamic'; // @project const ScrollFab = dynamic(() => import('@/components/ScrollFab')); -const ThemeAI = dynamic(() => import('@/views/landings/ai/theme')); +// const ThemeAI = dynamic(() => import('@/views/landings/ai/theme')); const MainLayout = dynamic(() => import('@/views/landings/default/layout')); /*************************** LAYOUT - AI ***************************/ export default function AI({ children }) { return ( - - - <> - {children} + // + + <> + {children} - {/* scroll to top section */} - - - - + {/* scroll to top section */} + + + + // ); } diff --git a/uikit/react/src/app/blocks/megamenu/megamenu5/page.jsx b/uikit/react/src/app/blocks/megamenu/megamenu5/page.jsx index f1f6074..59f9e85 100644 --- a/uikit/react/src/app/blocks/megamenu/megamenu5/page.jsx +++ b/uikit/react/src/app/blocks/megamenu/megamenu5/page.jsx @@ -72,7 +72,7 @@ const data = { itemsList: [ { title: 'Blog', link: { href: 'https://blog.saasable.io/', target: '_blank' } }, { title: 'Documentation', link: { href: DOCS_URL, target: '_blank' } }, - { title: 'Support', link: { href: 'https://support.phoenixcoded.net/', target: '_blank' } }, + { title: 'Support', link: { href: 'https://codedthemes.support-hub.io/', target: '_blank' } }, { title: 'Discord', link: { href: 'https://discord.com/invite/2WpeGsQH98', target: '_blank' } diff --git a/uikit/react/src/app/blocks/benefit/benefit5/page.jsx b/uikit/react/src/app/blocks/metrics/metrics5/page.jsx similarity index 77% rename from uikit/react/src/app/blocks/benefit/benefit5/page.jsx rename to uikit/react/src/app/blocks/metrics/metrics5/page.jsx index cf1ffac..87f0590 100644 --- a/uikit/react/src/app/blocks/benefit/benefit5/page.jsx +++ b/uikit/react/src/app/blocks/metrics/metrics5/page.jsx @@ -1,6 +1,6 @@ // @project import branding from '@/branding.json'; -import { Benefit5 } from '@/blocks/benefit'; +import { Metrics5 } from '@/blocks/metrics'; /*************************** BENEFIT 5 - DATA ***************************/ @@ -15,8 +15,8 @@ const data = { ] }; -/*************************** BLOCK - BENEFIT 5 ***************************/ +/*************************** BLOCK - METRICS 5 ***************************/ -export default function BlockBenefit5() { - return ; +export default function BlockMetrics5() { + return ; } diff --git a/uikit/react/src/app/blocks/other/other1/page.jsx b/uikit/react/src/app/blocks/other/other1/page.jsx index 3138f78..f020b5e 100644 --- a/uikit/react/src/app/blocks/other/other1/page.jsx +++ b/uikit/react/src/app/blocks/other/other1/page.jsx @@ -31,10 +31,10 @@ const data = { link: PAGE_PATH.feature }, { - title: 'Benefits', + title: 'Metrics', subTitle: '9 Different Variants', - image: `${imagePrefix}/benefits-light.svg`, - link: PAGE_PATH.benefit + image: `${imagePrefix}/metrics-light.svg`, + link: PAGE_PATH.metrics }, { title: 'Process', diff --git a/uikit/react/src/app/blocks/privacy-policy/privacy-policy1/page.jsx b/uikit/react/src/app/blocks/privacy-policy/privacy-policy1/page.jsx new file mode 100644 index 0000000..cadb3bc --- /dev/null +++ b/uikit/react/src/app/blocks/privacy-policy/privacy-policy1/page.jsx @@ -0,0 +1,8 @@ +// @project +import { PrivacyPolicy1 } from '@/blocks/privacy-policy'; + +/*************************** BLOCK - PRIVACY POLICY 1 ***************************/ + +export default function BlockPrivacyPolicy1() { + return ; +} diff --git a/uikit/react/src/app/sections/benefit/page.jsx b/uikit/react/src/app/sections/benefit/page.jsx deleted file mode 100644 index e7c5ef5..0000000 --- a/uikit/react/src/app/sections/benefit/page.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import dynamic from 'next/dynamic'; - -// @project -import { PAGE_PATH } from '@/path'; -import { SEO_CONTENT } from '@/metadata'; - -const Benefit = dynamic(() => import('@/views/sections/Benefit')); - -/*************************** METADATA - BENEFIT ***************************/ - -export const metadata = { ...SEO_CONTENT.benefit, openGraph: { ...SEO_CONTENT.benefit, url: PAGE_PATH.benefit } }; - -/*************************** PAGE - BENEFIT ***************************/ - -export default function BenefitPage() { - return ; -} diff --git a/uikit/react/src/app/sections/blog-details/page.jsx b/uikit/react/src/app/sections/blog-details/page.jsx new file mode 100644 index 0000000..c725d7b --- /dev/null +++ b/uikit/react/src/app/sections/blog-details/page.jsx @@ -0,0 +1,19 @@ +// @next +import { Metadata } from 'next'; +import dynamic from 'next/dynamic'; + +// @project +import { PAGE_PATH } from '@/path'; +import { SEO_CONTENT } from '@/metadata'; + +const BlogDetails = dynamic(() => import('@/views/sections/BlogDetails')); + +/*************************** METADATA - BLOG DETAILS ***************************/ + +export const metadata = { ...SEO_CONTENT.blogDetails, openGraph: { ...SEO_CONTENT.blogDetails, url: PAGE_PATH.blogDetails } }; + +/*************************** PAGE - BLOG DETAILS ***************************/ + +export default function BlogDetailsPage() { + return ; +} diff --git a/uikit/react/src/app/sections/metrics/page.jsx b/uikit/react/src/app/sections/metrics/page.jsx new file mode 100644 index 0000000..815e282 --- /dev/null +++ b/uikit/react/src/app/sections/metrics/page.jsx @@ -0,0 +1,17 @@ +import dynamic from 'next/dynamic'; + +// @project +import { PAGE_PATH } from '@/path'; +import { SEO_CONTENT } from '@/metadata'; + +const Metrics = dynamic(() => import('@/views/sections/metrics')); + +/*************************** METADATA - METRICS ***************************/ + +export const metadata = { ...SEO_CONTENT.metrics, openGraph: { ...SEO_CONTENT.metrics, url: PAGE_PATH.metrics } }; + +/*************************** PAGE - METRICS ***************************/ + +export default function MetricsPage() { + return ; +} diff --git a/uikit/react/src/blocks/TermsCondition.jsx b/uikit/react/src/blocks/TermsCondition.jsx index 3ac9006..c88c426 100644 --- a/uikit/react/src/blocks/TermsCondition.jsx +++ b/uikit/react/src/blocks/TermsCondition.jsx @@ -61,43 +61,43 @@ function useScrollspy(ids, offset = 0) { const menuItems = [ { id: 'acceptance-of-terms', - heading: 'Acceptance of Terms', + heading: 'Acceptance of terms', caption: 'By accessing and using this website, you agree to be bound by these Terms and Conditions of Use. If you do not agree with any part of these terms, you must not use the website. shares information about you when you use our website or services. By accessing or using our website, you consent to the practices described in this policy.' }, { id: 'changes-to-terms', - heading: 'Changes to Terms', + heading: 'Changes to terms', caption: 'We reserve the right to modify or replace these terms at our sole discretion. It is your responsibility to check these terms periodically for changes. Your continued use of the website after the posting of any changes constitutes acceptance of those changes.' }, { id: 'user-conduct', - heading: 'User Conduct', + heading: 'User conduct', caption: 'You agree to use this website only for lawful purposes and in a manner consistent with all applicable local, national, and international laws and regulations.' }, { id: 'intellectual-property', - heading: 'Intellectual Property', + heading: 'Intellectual property', caption: 'All content on this website, including but not limited to text, graphics, logos, images, audio clips, video clips, digital downloads, and data compilations, is the property of [Your Company Name] or its content suppliers and protected by international copyright laws.' }, { id: 'privacy-policy', - heading: 'Privacy Policy', + heading: 'Privacy policy', caption: 'We do not sell, trade, or otherwise transfer your personal information to third parties. We may share information with trusted service providers who assist us in operating our website, conducting our business, or servicing you.' }, { id: 'user-generated-content', - heading: 'User-Generated Content', + heading: 'User-generated content', caption: 'If you submit any material to this website, you grant [Your Company Name] a perpetual, royalty-free, worldwide license to use, reproduce, modify, adapt, publish, translate, create derivative works from, distribute, and display such material.' }, { id: 'limitation-of-liability', - heading: 'Limitation of Liability', + heading: 'Limitation of liability', caption: 'In no event shall [Your Company Name] or its affiliates be liable for any direct, indirect, incidental, special, or consequential damages resulting from the use or inability to use this website.' }, @@ -109,7 +109,7 @@ const menuItems = [ }, { id: 'governing-law', - heading: 'Governing Law', + heading: 'Governing law', caption: 'These terms are governed by and construed in accordance with the laws of [Your Country/State], without regard to its conflict of law principles.' } @@ -117,6 +117,12 @@ const menuItems = [ /*************************** SECTIONS - TERMS CONDITION ***************************/ +/** + * + * Demos: + * - [Terms Condition](https://www.saasable.io/sections/terms-condition) + */ + export default function TermsConditionPage() { const ids = menuItems.map((item) => item.id); diff --git a/uikit/react/src/blocks/Typography.jsx b/uikit/react/src/blocks/Typography.jsx index 4c09d67..c6d38be 100644 --- a/uikit/react/src/blocks/Typography.jsx +++ b/uikit/react/src/blocks/Typography.jsx @@ -198,6 +198,12 @@ function FontSizeBlock({ desktop, tablet, mobile, type }) { /*************************** SECTIONS - TYPOGRAPHY ***************************/ +/** + * + * Demos: + * - [Typography](https://www.saasable.io/sections/typography) + */ + export default function TypographyPage() { return ( diff --git a/uikit/react/src/blocks/benefit/index.js b/uikit/react/src/blocks/benefit/index.js deleted file mode 100644 index 71e96ce..0000000 --- a/uikit/react/src/blocks/benefit/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as Benefit5 } from './Benefit5'; diff --git a/uikit/react/src/blocks/clientele/Clientele3.jsx b/uikit/react/src/blocks/clientele/Clientele3.jsx index 0904b66..31a1e1d 100644 --- a/uikit/react/src/blocks/clientele/Clientele3.jsx +++ b/uikit/react/src/blocks/clientele/Clientele3.jsx @@ -9,7 +9,7 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; import Slider from 'react-slick'; // @project @@ -20,6 +20,15 @@ import { SECTION_COMMON_PY } from '@/utils/constant'; /*************************** CLIENTELE - 3 ***************************/ +/** + * + * Demos: + * - [Clientele3](https://www.saasable.io/blocks/clientele/clientele3) + * + * API: + * - [Clientele3 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/clientele/clientele3#props-details) + */ + export default function Clientele3({ title, clienteleList }) { const theme = useTheme(); @@ -63,10 +72,7 @@ export default function Clientele3({ title, clienteleList }) { initial={{ opacity: 0, y: 10 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - transition={{ - duration: 0.5, - delay: 0.3 - }} + transition={{ duration: 0.5, delay: 0.3 }} > {title} @@ -85,19 +91,27 @@ export default function Clientele3({ title, clienteleList }) { > {clienteleList.map((item, index) => ( - - } - sx={{ bgcolor: 'grey.100', height: { xs: 40, sm: 46, md: 60 }, width: 1, '& .MuiChip-label': { p: 0 } }} - /> - + + } + slotProps={{ label: { sx: { p: 0 } } }} + sx={{ bgcolor: 'grey.100', height: { xs: 40, sm: 46, md: 60 }, width: 1 }} + /> + + ))} diff --git a/uikit/react/src/blocks/contact-us/ContactUs4.jsx b/uikit/react/src/blocks/contact-us/ContactUs4.jsx index 8b0c24e..d0b303b 100644 --- a/uikit/react/src/blocks/contact-us/ContactUs4.jsx +++ b/uikit/react/src/blocks/contact-us/ContactUs4.jsx @@ -52,6 +52,15 @@ function ContactCard({ icon, title, content, link }) { /*************************** CONTACT US - 4 ***************************/ +/** + * + * Demos: + * - [ContactUs4](https://www.saasable.io/blocks/contact-us/contact-us4) + * + * API: + * - [ContactUs4 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/contact-us/contactus4#props-details) + */ + export default function ContactUs4({ heading, caption, list, showForm = true }) { const sectionPadding = { xs: 2, sm: 3, md: 5 }; const cardRadius = { xs: 6, sm: 8 }; diff --git a/uikit/react/src/blocks/cta/Cta4.jsx b/uikit/react/src/blocks/cta/Cta4.jsx index 89c1f18..9fa6577 100644 --- a/uikit/react/src/blocks/cta/Cta4.jsx +++ b/uikit/react/src/blocks/cta/Cta4.jsx @@ -9,7 +9,7 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -25,82 +25,96 @@ import Arrow from '@/images/graphics/Arrow'; /*************************** CALL TO ACTION - 4 ***************************/ +/** + * + * Demos: + * - [CTA4](https://www.saasable.io/blocks/cta/cta4) + * + * API: + * - [CTA4 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/cta/cta4#props-details) + */ + export default function Cta4({ headLine, primaryBtn, profileGroups, list, clientContent }) { const transformValues = { xs: 'rotate(45deg)', sm: 'rotate(320deg)', md: 'unset' }; return ( - - - - - - - - - {typeof headLine === 'string' ? {headLine} : headLine} - {list && ( - - {list.map((item, index) => ( - + + + + + + + + {typeof headLine === 'string' ? {headLine} : headLine} + {list && ( + + {list.map((item, index) => ( + + {item.primary} - ))} - - )} - + + ))} + + )} - - - - - - + + + + + + + {clientContent} + + + - {clientContent} - - - - + + - - - + + + ); } Cta4.propTypes = { - headLine: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), + headLine: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), primaryBtn: PropTypes.any, profileGroups: PropTypes.object, list: PropTypes.array, diff --git a/uikit/react/src/blocks/cta/Cta5.jsx b/uikit/react/src/blocks/cta/Cta5.jsx index 7c008fa..02a0de5 100644 --- a/uikit/react/src/blocks/cta/Cta5.jsx +++ b/uikit/react/src/blocks/cta/Cta5.jsx @@ -2,7 +2,6 @@ import PropTypes from 'prop-types'; // @mui -import { useTheme } from '@mui/material/styles'; import Button from '@mui/material/Button'; import Chip from '@mui/material/Chip'; import Divider from '@mui/material/Divider'; @@ -13,7 +12,7 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -30,9 +29,16 @@ import Wave from '@/images/graphics/Wave'; /*************************** CALL TO ACTION - 5 ***************************/ -export default function Cta5({ heading, caption, label, input = false, primaryBtn, secondaryBtn, description, saleData, profileGroups }) { - const theme = useTheme(); +/** + * + * Demos: + * - [CTA5](https://www.saasable.io/blocks/cta/cta5) + * + * API: + * - [CTA5 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/cta/cta5#props-details) + */ +export default function Cta5({ heading, caption, label, input = false, primaryBtn, secondaryBtn, description, saleData, profileGroups }) { return ( - - - - - - {label} - - } - variant="outlined" - sx={{ borderColor: 'grey.600', '& .MuiChip-label': { py: 0.75, px: 2 } }} - /> - + + + + + + + + + - + {input && typeof input === 'object' && ( + + + } + slotProps={{ + input: { 'aria-label': 'Email address', sx: { px: 2.5, py: 0.75 } }, + notchedOutline: { sx: { borderRadius: 25 } } + }} + sx={{ typography: 'caption2', color: 'secondary.main', p: 0.5, whiteSpace: 'nowrap' }} + /> + {input.helpertext && ( + + {input.helpertext} + + )} + + )} + {(primaryBtn || secondaryBtn || description) && ( + + {(primaryBtn || secondaryBtn) && ( + + {secondaryBtn && ( + + + + )} + {primaryBtn && ( + + + + + + )} + + )} + {description && typeof description === 'string' ? ( + + {description} + + ) : ( + description + )} + + )} - {input && typeof input === 'object' && ( - - - } - slotProps={{ input: { 'aria-label': 'Email address' } }} - sx={{ - ...theme.typography.caption2, - color: 'secondary.main', - p: 0.5, - whiteSpace: 'nowrap', - '& .MuiOutlinedInput-input': { p: '6px 20px' }, - '& .MuiOutlinedInput-notchedOutline': { borderRadius: 25 } - }} - /> - {input.helpertext && ( - - {input.helpertext} - - )} - - )} - {(primaryBtn || secondaryBtn || description) && ( - - {(primaryBtn || secondaryBtn) && ( - - {secondaryBtn && ( - - - - )} - {primaryBtn && ( - - - - )} - - )} - {description && typeof description === 'string' ? ( - - {description} - - ) : ( - description - )} - - )} - - - - - + + + + + @@ -181,10 +191,10 @@ Cta5.propTypes = { heading: PropTypes.string, caption: PropTypes.string, label: PropTypes.string, - input: PropTypes.oneOfType([PropTypes.any, PropTypes.bool]), + input: PropTypes.oneOfType([PropTypes.bool, PropTypes.any]), primaryBtn: PropTypes.any, secondaryBtn: PropTypes.any, - description: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), + description: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), saleData: PropTypes.any, profileGroups: PropTypes.object }; diff --git a/uikit/react/src/blocks/faq/Faq6.jsx b/uikit/react/src/blocks/faq/Faq6.jsx index 3c31044..883b80e 100644 --- a/uikit/react/src/blocks/faq/Faq6.jsx +++ b/uikit/react/src/blocks/faq/Faq6.jsx @@ -16,7 +16,7 @@ import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; import Slider from 'react-slick'; // @project @@ -32,6 +32,15 @@ import { SECTION_COMMON_PY } from '@/utils/constant'; /*************************** FAQ - 6 ***************************/ +/** + * + * Demos: + * - [FAQ6](https://www.saasable.io/blocks/faq/faq6) + * + * API: + * - [FAQ6 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/faq/faq6#props-details) + */ + export default function Faq6({ heading, caption, defaultExpanded, faqList, getInTouch, categories, activeCategory }) { const theme = useTheme(); const isFocusWithin = useFocusWithin(); @@ -62,28 +71,36 @@ export default function Faq6({ heading, caption, defaultExpanded, faqList, getIn return ( - - - - - - - - + {heading && ( + + + + {getInTouch?.link && ( + + + + + + )} + + + )} - } + {...(item.icon && { + icon: ( + + ) + })} value={String(index + 1)} key={index} iconPosition="start" tabIndex={0} sx={{ minHeight: 44, + minWidth: { xs: 112, md: 160, sm: 156 }, borderRadius: 10, borderWidth: 1, borderStyle: 'solid', @@ -82,6 +98,7 @@ export default function Feature18({ heading, caption, topics }) { '&.Mui-selected': { bgcolor: 'grey.200', borderColor: 'grey.400', + minWidth: { xs: 112, md: 160, sm: 156 }, color: 'text.primary', '& svg': { stroke: 'text.primary' } }, @@ -98,26 +115,37 @@ export default function Feature18({ heading, caption, topics }) { - - + - + > + + + - - + + - - - - {item.title} - - + + + {item.icon && ( + + )} + + {item.title} + + + {item.title2} @@ -147,19 +185,27 @@ export default function Feature18({ heading, caption, topics }) { {item.list.map((list, index) => ( - - - - {list.primary} - - + + + + {list.primary} + + + ))} @@ -170,20 +216,38 @@ export default function Feature18({ heading, caption, topics }) { {item.actionBtn2 && ( - } - {...item.actionBtn2} - /> + + + } + {...item.actionBtn2} + /> + + )} {item.actionBtn && ( - } - {...item.actionBtn} - /> + + + } + {...item.actionBtn} + /> + + )} diff --git a/uikit/react/src/blocks/feature/Feature20.jsx b/uikit/react/src/blocks/feature/Feature20.jsx index 6e9603c..7b6aede 100644 --- a/uikit/react/src/blocks/feature/Feature20.jsx +++ b/uikit/react/src/blocks/feature/Feature20.jsx @@ -12,7 +12,7 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -28,6 +28,15 @@ import Star from '@/images/graphics/Star'; /*************************** FEATURE - 20 ***************************/ +/** + * + * Demos: + * - [Feature20](https://www.saasable.io/blocks/feature/feature20) + * + * API + * - [Feature20 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/feature/feature20#props-details) + */ + export default function Feature20({ heading, caption, image, features, actionBtn, secondaryBtn }) { const theme = useTheme(); const downSM = useMediaQuery(theme.breakpoints.down('sm')); @@ -126,11 +135,32 @@ export default function Feature20({ heading, caption, image, features, actionBtn > - + + + - {item.title && {item.title}} - {item.content && {item.content}} + + {item.title && {item.title}} + + + {item.content && {item.content}} + {index < indexOfFirstElementInLastRow && !indicesOfLastElements.includes(index) && ( @@ -169,19 +199,33 @@ export default function Feature20({ heading, caption, image, features, actionBtn > {secondaryBtn && ( - - - + + + + + )} {actionBtn && ( - - } - {...actionBtn} - /> - + + + } + {...actionBtn} + /> + + )} diff --git a/uikit/react/src/blocks/feature/Feature21.jsx b/uikit/react/src/blocks/feature/Feature21.jsx index 553f454..54b7c05 100644 --- a/uikit/react/src/blocks/feature/Feature21.jsx +++ b/uikit/react/src/blocks/feature/Feature21.jsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import Box from '@mui/material/Box'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -21,6 +21,15 @@ import { SECTION_COMMON_PY } from '@/utils/constant'; /*************************** FEATURE - 21 ***************************/ +/** + * + * Demos: + * - [Feature21](https://www.saasable.io/blocks/feature/feature21) + * + * API + * - [Feature21 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/feature/feature21#props-details) + */ + export default function Feature21({ heading, caption, image, features, primaryBtn, secondaryBtn }) { const imagePadding = { xs: 3, sm: 4, md: 5 }; const iconProps = { color: 'text.primary', stroke: 1 }; @@ -28,17 +37,16 @@ export default function Feature21({ heading, caption, image, features, primaryBt return ( - - - + {(heading || caption) && ( + + + + )} {image && ( @@ -98,25 +104,36 @@ export default function Feature21({ heading, caption, image, features, primaryBt initial={{ opacity: 0, y: 10 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - transition={{ - duration: 0.3, - delay: 0.3 - }} + transition={{ duration: 0.3, delay: 0.4 }} > {secondaryBtn && ( - - } {...secondaryBtn} /> - + + + } {...secondaryBtn} /> + + )} {primaryBtn && ( - - } - {...primaryBtn} - /> - + + + } + {...primaryBtn} + /> + + )} diff --git a/uikit/react/src/blocks/footer/Footer7.jsx b/uikit/react/src/blocks/footer/Footer7.jsx index e1ab13a..56ee9db 100644 --- a/uikit/react/src/blocks/footer/Footer7.jsx +++ b/uikit/react/src/blocks/footer/Footer7.jsx @@ -26,27 +26,34 @@ import { SECTION_COMMON_PY } from '@/utils/constant'; /*************************** FOOTER - 7 DATA ***************************/ +/** + * + * Demos: + * - [Footer7](https://www.saasable.io/blocks/footer/footer7) + */ + const linkProps = { target: '_blank', rel: 'noopener noreferrer' }; const data = [ { - id: 'company', - grid: { size: { xs: 6, sm: 'auto' } }, - title: 'Company', + id: 'resources', + grid: { size: { xs: 12, sm: 'auto' } }, + title: 'Resources', menu: [ { - label: 'Why Phoenixcoded?', - link: { - href: 'https://blog.saasable.io/a-decade-of-expertise-the-phoenixcoded-story-and-why-you-should-trust-us', - ...linkProps - } + label: 'Freebies', + link: { href: FREEBIES_URL, ...linkProps } }, { - label: 'About', - link: { href: 'https://saasable.io/about', ...linkProps } + label: 'Documentation', + link: { href: DOCS_URL, ...linkProps } }, { - label: 'Contact Us', - link: { href: '/contact', ...linkProps } + label: 'Blog', + link: { href: 'https://blog.saasable.io/', ...linkProps } + }, + { + label: 'Refund Policy', + link: { href: 'https://mui.com/store/customer-refund-policy/', ...linkProps } } ] }, @@ -57,11 +64,11 @@ const data = [ menu: [ { label: 'Pricing', - link: { href: '#' } + link: { href: 'https://mui.com/store/items/saasable-multipurpose-ui-kit-and-dashboard/', ...linkProps } }, { - label: 'FAQ', - link: { href: '#' } + label: 'FAQs', + link: { href: 'https://phoenixcoded.gitbook.io/saasable/faq', ...linkProps } }, { label: 'Support', @@ -78,29 +85,24 @@ const data = [ ] }, { - id: 'resources', - grid: { size: { xs: 12, sm: 'auto' } }, - title: 'Resources', + id: 'company', + grid: { size: { xs: 6, sm: 'auto' } }, + title: 'Company', menu: [ { - label: 'Freebies', - link: { href: FREEBIES_URL, ...linkProps } - }, - { - label: 'Documentation', - link: { href: DOCS_URL, ...linkProps } - }, - { - label: 'Blog', - link: { href: 'https://blog.saasable.io/', ...linkProps } + label: 'Why Phoenixcoded?', + link: { + href: 'https://blog.saasable.io/a-decade-of-expertise-the-phoenixcoded-story-and-why-you-should-trust-us', + ...linkProps + } }, { - label: 'Privacy Policy', - link: { href: '/privacy-policy', ...linkProps } + label: 'About', + link: { href: 'https://saasable.io/about', ...linkProps } }, { - label: 'Refund Policy', - link: { href: 'https://mui.com/store/customer-refund-policy/', ...linkProps } + label: 'Contact Us', + link: { href: '/contact', ...linkProps } } ] } @@ -143,16 +145,16 @@ export default function Footer7() { return ( - - + + @@ -181,16 +183,6 @@ export default function Footer7() { - - - - + + ); } diff --git a/uikit/react/src/blocks/hero/Hero17.jsx b/uikit/react/src/blocks/hero/Hero17.jsx index ec1e4de..0ac4090 100644 --- a/uikit/react/src/blocks/hero/Hero17.jsx +++ b/uikit/react/src/blocks/hero/Hero17.jsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import { useEffect, useRef, useState } from 'react'; // @mui -import { useTheme } from '@mui/material/styles'; +import { useTheme, alpha } from '@mui/material/styles'; import Button from '@mui/material/Button'; import Chip from '@mui/material/Chip'; import Stack from '@mui/material/Stack'; @@ -12,7 +12,7 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // @third-party -import { motion, useScroll, useTransform } from 'framer-motion'; +import { motion, useScroll, useTransform } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -31,6 +31,15 @@ const options = { root: null, rootMargin: '0px', threshold: 0.6 }; /*************************** HERO - 17 ***************************/ +/** + * + * Demos: + * - [Hero17](https://www.saasable.io/blocks/hero/hero17) + * + * API: + * - [Hero17 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/hero/hero17#props-details) + */ + export default function Hero17({ chip, headLine, captionLine, primaryBtn, videoSrc, videoThumbnail, listData }) { const theme = useTheme(); const boxRadius = { xs: 24, sm: 32, md: 40 }; @@ -100,45 +109,42 @@ export default function Hero17({ chip, headLine, captionLine, primaryBtn, videoS background: getBackgroundDots(theme.palette.grey[300], 60, 35), bgcolor: 'grey.100' }} - > + /> - {chip.label} - - ) : ( - chip.label - ) - } - sx={{ bgcolor: 'grey.100', '& .MuiChip-label': { py: 0.5, px: 1.5 } }} + label={chip.label} + slotProps={{ + label: { + sx: { py: 0.5, px: 1.5, ...(typeof chip.label === 'string' && { typography: 'caption', color: 'text.secondary' }) } + } + }} + sx={{ bgcolor: 'grey.100' }} /> {headLine} @@ -148,11 +154,7 @@ export default function Hero17({ chip, headLine, captionLine, primaryBtn, videoS initial={{ opacity: 0, y: 30 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - transition={{ - duration: 1, - delay: 0.2, - ease: [0.215, 0.61, 0.355, 1] - }} + transition={{ duration: 1, delay: 0.2, ease: [0.215, 0.61, 0.355, 1] }} > @@ -162,11 +164,7 @@ export default function Hero17({ chip, headLine, captionLine, primaryBtn, videoS initial={{ opacity: 0, y: 30 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - transition={{ - duration: 1, - delay: 0.3, - ease: [0.215, 0.61, 0.355, 1] - }} + transition={{ duration: 1, delay: 0.3, ease: [0.215, 0.61, 0.355, 1] }} > {captionLine} @@ -176,13 +174,9 @@ export default function Hero17({ chip, headLine, captionLine, primaryBtn, videoS - - - {listData.map((item, index) => ( + + {listData.map((item, index) => ( + {item.title}} + label={item.title} variant="outlined" icon={} - sx={{ height: 32, px: 1, bgcolor: 'grey.100', '& .MuiChip-label': { py: 0.75, px: 1 } }} + slotProps={{ label: { sx: { py: 0.75, px: 1, typography: 'caption2' } } }} + sx={{ height: 32, px: 1, bgcolor: 'grey.100' }} /> - ))} - - + + ))} + diff --git a/uikit/react/src/blocks/integration/Integration2.jsx b/uikit/react/src/blocks/integration/Integration2.jsx index 1cc43b1..43e0a31 100644 --- a/uikit/react/src/blocks/integration/Integration2.jsx +++ b/uikit/react/src/blocks/integration/Integration2.jsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -24,16 +24,14 @@ function IntegrationTag({ label, icon }) { return ( {label}} - {...(icon && { - icon: - })} + label={label} + {...(icon && { icon: })} + slotProps={{ label: { sx: { p: 0, ...(icon && { pl: 1.25 }), typography: 'h5' } } }} sx={{ px: { xs: 2.25, md: 3 }, py: icon ? { xs: 1.25, md: 1.75 } : { xs: 1.875, md: 2.5 }, m: 0.5, bgcolor: 'background.default', - '& .MuiChip-label': { p: 0, ...(icon && { pl: 1.25 }) }, '& svg': { width: iconSize, height: iconSize } }} /> @@ -42,6 +40,15 @@ function IntegrationTag({ label, icon }) { /*************************** INTEGRATION - 2 ***************************/ +/** + * + * Demos: + * - [Integration2](https://www.saasable.io/blocks/integration/integration2) + * + * API: + * - [Integration2 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/integration/integration2#props-details) + */ + export default function Integration2({ headLine, captionLine, primaryBtn, tagList }) { return ( @@ -57,26 +64,48 @@ export default function Integration2({ headLine, captionLine, primaryBtn, tagLis - {headLine && ( - - {headLine} - - )} - {captionLine && ( - - {captionLine} - - )} + + {headLine && ( + + {headLine} + + )} + {captionLine && ( + + {captionLine} + + )} + {tagList.map((integration, index) => ( - + + + ))} {primaryBtn && ( - - - + + + + + )} diff --git a/uikit/react/src/blocks/maintenance/Error404.jsx b/uikit/react/src/blocks/maintenance/Error404.jsx index d446598..a063513 100644 --- a/uikit/react/src/blocks/maintenance/Error404.jsx +++ b/uikit/react/src/blocks/maintenance/Error404.jsx @@ -16,6 +16,15 @@ import Error404 from '@/images/maintenance/Error404'; /*************************** ERROR 404 - PAGES ***************************/ +/** + * + * Demos: + * - [Error404](https://www.saasable.io/blocks/error404) + * + * API + * - [Error404 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/maintenance/error404#props-details) + */ + export default function Error404Page({ primaryBtn, heading }) { return ( diff --git a/uikit/react/src/blocks/maintenance/Error500.jsx b/uikit/react/src/blocks/maintenance/Error500.jsx index 84ed546..57a540a 100644 --- a/uikit/react/src/blocks/maintenance/Error500.jsx +++ b/uikit/react/src/blocks/maintenance/Error500.jsx @@ -18,6 +18,12 @@ import Error500Server from '@/images/maintenance/Error500Server'; /*************************** ERROR 500 - PAGES ***************************/ +/** + * + * Demos: + * - [Error500](https://www.saasable.io/blocks/error500) + */ + export default function Error500Page({ primaryBtn, heading }) { return ( diff --git a/uikit/react/src/blocks/mega-menu/MegaMenu4.jsx b/uikit/react/src/blocks/mega-menu/MegaMenu4.jsx index 52a6675..a9b482c 100644 --- a/uikit/react/src/blocks/mega-menu/MegaMenu4.jsx +++ b/uikit/react/src/blocks/mega-menu/MegaMenu4.jsx @@ -1,3 +1,4 @@ +'use client'; import PropTypes from 'prop-types'; // @next @@ -7,20 +8,38 @@ import Grid from '@mui/material/Grid'; import Link from '@mui/material/Link'; import Box from '@mui/material/Box'; +// @third-party +import { motion } from 'motion/react'; + // @project import PreviewCard from '@/components/cards/PreviewCard'; /*************************** MEGA MENU - 4 ***************************/ +/** + * + * Demos: + * - [MegaMenu4](https://www.saasable.io/blocks/megamenu/megamenu4) + * + * API + * - [MegaMenu4 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/megamenu/megamenu4#props-details) + */ + export default function MegaMenu4({ menuItems, footerData, popperWidth = 936, footerSX }) { return ( {menuItems.map((item, index) => ( - - - + + + + + ))} diff --git a/uikit/react/src/blocks/mega-menu/MegaMenu5.jsx b/uikit/react/src/blocks/mega-menu/MegaMenu5.jsx index 027d898..20c390a 100644 --- a/uikit/react/src/blocks/mega-menu/MegaMenu5.jsx +++ b/uikit/react/src/blocks/mega-menu/MegaMenu5.jsx @@ -12,11 +12,23 @@ import ListItemText from '@mui/material/ListItemText'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; +// @third-party +import { motion } from 'motion/react'; + // @project import SvgIcon from '@/components/SvgIcon'; /*************************** MEGA MENU - 5 ***************************/ +/** + * + * Demos: + * - [MegaMenu5](https://www.saasable.io/blocks/megamenu/megamenu5) + * + * API + * - [MegaMenu5 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/megamenu/megamenu5#props-details) + */ + export default function MegaMenu5({ menuItems, bannerData, popperWidth = 750 }) { const theme = useTheme(); let gridItem = menuItems.length === 1 ? 12 : 6; @@ -24,11 +36,11 @@ export default function MegaMenu5({ menuItems, bannerData, popperWidth = 750 }) return ( {bannerData && ( - + {bannerData} )} - + {menuItems.map((items, index) => ( 2 ? 4 : gridItem }}> @@ -37,10 +49,7 @@ export default function MegaMenu5({ menuItems, bannerData, popperWidth = 750 }) sx={{ p: 1, width: '100%', maxWidth: { xs: 1, md: popperWidth }, display: 'flex', flexDirection: 'column' }} {...(items.title && { subheader: ( - + {items.title} ) @@ -48,51 +57,58 @@ export default function MegaMenu5({ menuItems, bannerData, popperWidth = 750 }) > {items?.itemsList && items?.itemsList.map((item, index) => ( - // @ts-ignore - - - {item && item?.link && item?.link !== undefined && item?.link?.target === '_blank' ? ( - - ) : ( - - {item.status} - + TouchRippleProps={{ + style: { + color: alpha(theme.palette.primary.main, 0.3) } - size="small" - sx={{ - bgcolor: 'primary.lighter', - '& .MuiChip-label': { px: 1, py: 0.25, minWidth: 20 } + }} + > + - )} - + {item && item?.link && item?.link !== undefined && item?.link?.target === '_blank' ? ( + + ) : ( + + {item.status} + + } + size="small" + sx={{ + bgcolor: 'primary.lighter', + '& .MuiChip-label': { px: 1, py: 0.25, minWidth: 20 } + }} + /> + )} + + ))} diff --git a/uikit/react/src/blocks/benefit/Benefit5.jsx b/uikit/react/src/blocks/metrics/Metrics5.jsx similarity index 64% rename from uikit/react/src/blocks/benefit/Benefit5.jsx rename to uikit/react/src/blocks/metrics/Metrics5.jsx index ec2f5a7..d4ef631 100644 --- a/uikit/react/src/blocks/benefit/Benefit5.jsx +++ b/uikit/react/src/blocks/metrics/Metrics5.jsx @@ -1,13 +1,15 @@ 'use client'; import PropTypes from 'prop-types'; +import { useEffect } from 'react'; + // @mui import Grid from '@mui/material/Grid'; import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; // @third-party -import { motion } from 'framer-motion'; +import { animate, motion, useMotionValue, useTransform } from 'motion/react'; // @project import { GraphicsCard } from '@/components/cards'; @@ -15,9 +17,31 @@ import ContainerWrapper from '@/components/ContainerWrapper'; import Typeset from '@/components/Typeset'; import { SECTION_COMMON_PY } from '@/utils/constant'; -/*************************** BENEFIT - 5 ***************************/ +function AnimatedCounter({ startCount, endCount }) { + const countValue = useMotionValue(startCount); + const rounded = useTransform(countValue, (value) => Math.round(value)); + + useEffect(() => { + const controls = animate(countValue, endCount, { duration: 5, ease: 'linear' }); + + return () => controls.stop(); + }, [countValue, endCount]); + + return {rounded}; +} + +/*************************** METRICS - 5 ***************************/ -export default function Benefit5({ heading, caption, blockDetail }) { +/** + * + * Demos: + * - [Metrics5](https://www.saasable.io/blocks/metrics/metrics5) + * + * API: + * - [Metrics5 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/metrics/metrics5#props-details) + */ + +export default function Metrics5({ heading, caption, blockDetail }) { return ( @@ -25,10 +49,7 @@ export default function Benefit5({ heading, caption, blockDetail }) { initial={{ opacity: 0, y: 10 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - transition={{ - duration: 0.5, - delay: 0.3 - }} + transition={{ duration: 0.5, delay: 0.3 }} > - {item.counter} + {item.defaultUnit} @@ -77,4 +94,6 @@ export default function Benefit5({ heading, caption, blockDetail }) { ); } -Benefit5.propTypes = { heading: PropTypes.any, caption: PropTypes.any, blockDetail: PropTypes.any }; +AnimatedCounter.propTypes = { startCount: PropTypes.number, endCount: PropTypes.number }; + +Metrics5.propTypes = { heading: PropTypes.any, caption: PropTypes.any, blockDetail: PropTypes.any }; diff --git a/uikit/react/src/blocks/metrics/index.js b/uikit/react/src/blocks/metrics/index.js new file mode 100644 index 0000000..bdfe68b --- /dev/null +++ b/uikit/react/src/blocks/metrics/index.js @@ -0,0 +1 @@ +export { default as Metrics5 } from './Metrics5'; diff --git a/uikit/react/src/blocks/navbar/ElevationScroll.jsx b/uikit/react/src/blocks/navbar/ElevationScroll.jsx new file mode 100644 index 0000000..2926a61 --- /dev/null +++ b/uikit/react/src/blocks/navbar/ElevationScroll.jsx @@ -0,0 +1,31 @@ +import { cloneElement } from 'react'; +import { alpha, useTheme } from '@mui/material/styles'; +import { useScrollTrigger } from '@mui/material'; + +/*************************** NAVBAR - ELEVATION SCROLL ***************************/ + +export default function ElevationScroll({ children, window, isFixed, triggerSX }) { + const theme = useTheme(); + + const trigger = useScrollTrigger({ + disableHysteresis: true, + threshold: 0, + target: window ? window() : undefined + }); + + if (!isFixed) { + return children; + } + + const triggerStyles = { + boxShadow: `${alpha(theme.palette.text.primary, 0.08)} 0px 12px 16px -4px, ${alpha(theme.palette.text.primary, 0.03)} 0px 4px 6px -2px;`, + bgcolor: 'background.paper', + ...triggerSX + }; + + return children + ? cloneElement(children, { + sx: { boxShadow: 'none', bgcolor: 'transparent', backgroundImage: 'none', ...(trigger && { ...triggerStyles }) } + }) + : null; +} diff --git a/uikit/react/src/blocks/navbar/Navbar10.jsx b/uikit/react/src/blocks/navbar/Navbar10.jsx index 47c3b48..1c38fc0 100644 --- a/uikit/react/src/blocks/navbar/Navbar10.jsx +++ b/uikit/react/src/blocks/navbar/Navbar10.jsx @@ -7,26 +7,25 @@ import AppBar from '@mui/material/AppBar'; import Toolbar from '@mui/material/Toolbar'; // @project +import ElevationScroll from './ElevationScroll'; import ContainerWrapper from '@/components/ContainerWrapper'; +export const navbar10Height = { xs: 64, sm: 72, md: 84 }; + // override media queries injected by theme.mixins.toolbar const StyledToolbar = styled(Toolbar)(({ theme }) => ({ '@media all': { - minHeight: 84, + minHeight: navbar10Height.md, paddingLeft: 0, paddingRight: 0 }, paddingTop: theme.spacing(2), paddingBottom: theme.spacing(2), [theme.breakpoints.down('md')]: { - '@media all': { - minHeight: 72 - } + '@media all': { minHeight: navbar10Height.sm } }, [theme.breakpoints.down('sm')]: { - '@media all': { - minHeight: 64 - }, + '@media all': { minHeight: navbar10Height.xs }, paddingTop: theme.spacing(1.5), paddingBottom: theme.spacing(1.5) } @@ -34,14 +33,28 @@ const StyledToolbar = styled(Toolbar)(({ theme }) => ({ /*************************** NAVBAR - 10 ***************************/ -export default function Navbar10({ children }) { +/** + * + * Demos: + * - [Navbar10](https://www.saasable.io/blocks/navbar/navbar10) + * + * API: + * - [Navbar10 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/navbar/navbar10#props-details) + */ + +export default function Navbar10({ children, isFixed = true, ...props }) { return ( - - - {children} - - + <> + + + + {children} + + + + {isFixed && } + ); } -Navbar10.propTypes = { children: PropTypes.any }; +Navbar10.propTypes = { children: PropTypes.any, isFixed: PropTypes.bool, props: PropTypes.any }; diff --git a/uikit/react/src/blocks/navbar/navbar-content/NavbarContent10.jsx b/uikit/react/src/blocks/navbar/navbar-content/NavbarContent10.jsx index 8c6cc79..0b28c84 100644 --- a/uikit/react/src/blocks/navbar/navbar-content/NavbarContent10.jsx +++ b/uikit/react/src/blocks/navbar/navbar-content/NavbarContent10.jsx @@ -2,12 +2,16 @@ import PropTypes from 'prop-types'; // @mui -import { useTheme } from '@mui/material/styles'; +import { useTheme, alpha } from '@mui/material/styles'; import useMediaQuery from '@mui/material/useMediaQuery'; import Stack from '@mui/material/Stack'; import Box from '@mui/material/Box'; +// @third-party +import { motion } from 'motion/react'; + // @project +import { navbar10Height } from '../Navbar10'; import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; import ContainerWrapper from '@/components/ContainerWrapper'; import Logo from '@/components/logo'; @@ -16,7 +20,16 @@ import SvgIcon from '@/components/SvgIcon'; /*************************** NAVBAR - CONTENT 10 ***************************/ -export default function NavbarContent10({ landingBaseUrl, navItems, primaryBtn, secondaryBtn }) { +/** + * + * Demos: + * - [NavbarContent10](https://www.saasable.io/blocks/navbar/navbar10) + * + * API: + * - [NavbarContent10 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/navbar/navbar-content/navbarcontent10#props-details) + */ + +export default function NavbarContent10({ landingBaseUrl, navItems, primaryBtn, secondaryBtn, customization, selectedTheme, animated }) { const theme = useTheme(); const downMD = useMediaQuery(theme.breakpoints.down('md')); @@ -35,7 +48,24 @@ export default function NavbarContent10({ landingBaseUrl, navItems, primaryBtn, <> - + {animated ? ( + + + + ) : ( + + )} )} @@ -49,14 +79,20 @@ export default function NavbarContent10({ landingBaseUrl, navItems, primaryBtn, sx: { minWidth: 40, width: 40, height: 40, p: 0 } }} > - + {navItems && ( )} {downSM && ( - + @@ -76,5 +112,7 @@ NavbarContent10.propTypes = { landingBaseUrl: PropTypes.any, navItems: PropTypes.any, primaryBtn: PropTypes.any, - secondaryBtn: PropTypes.any + secondaryBtn: PropTypes.any, + selectedTheme: PropTypes.any, + animated: PropTypes.any }; diff --git a/uikit/react/src/blocks/other/Other1.jsx b/uikit/react/src/blocks/other/Other1.jsx index 9b8416e..f019a95 100644 --- a/uikit/react/src/blocks/other/Other1.jsx +++ b/uikit/react/src/blocks/other/Other1.jsx @@ -15,7 +15,7 @@ import Stack from '@mui/material/Stack'; import Box from '@mui/material/Box'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -34,6 +34,15 @@ import Wave from '@/images/graphics/Wave'; /*************************** OTHER - 1 ***************************/ +/** + * + * Demos: + * - [Other1](https://www.saasable.io/blocks/other/other1) + * + * API + * - [Other1 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/other/other1#props-details) + */ + export default function Other1({ heading, description, primaryBtn, sections }) { const theme = useTheme(); const isFocusWithin = useFocusWithin(); @@ -71,7 +80,6 @@ export default function Other1({ heading, description, primaryBtn, sections }) { height: { xs: 240, sm: 324, md: 380 }, position: 'relative', overflow: 'hidden', - WebkitTapHighlightColor: 'transparent', ...(isFocusWithin && { '&:focus-within': generateFocusVisibleStyles(theme.palette.primary.main) }) }} > @@ -112,12 +120,26 @@ export default function Other1({ heading, description, primaryBtn, sections }) { background: `linear-gradient(180deg, ${alpha(theme.palette.grey[100], 0)} 0%, ${theme.palette.grey[100]} 100%)` }} > - - {item.title} - - - {item.subTitle} - + + + {item.title} + + + + + {item.subTitle} + + @@ -140,13 +162,10 @@ export default function Other1({ heading, description, primaryBtn, sections }) { diff --git a/uikit/react/src/blocks/other/Other2.jsx b/uikit/react/src/blocks/other/Other2.jsx index 48d59d0..d9ab00f 100644 --- a/uikit/react/src/blocks/other/Other2.jsx +++ b/uikit/react/src/blocks/other/Other2.jsx @@ -13,6 +13,15 @@ import { GraphicsCard } from '@/components/cards'; /*************************** OTHER - 2 ***************************/ +/** + * + * Demos: + * - [Other2](https://www.saasable.io/blocks/other/other2) + * + * API + * - [Other2 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/other/other2#props-details) + */ + export default function Other2() { const theme = useTheme(); const lightColor = theme.palette.secondary.light; diff --git a/uikit/react/src/blocks/pricing/Pricing9.jsx b/uikit/react/src/blocks/pricing/Pricing9.jsx index bab89c9..f345b8f 100644 --- a/uikit/react/src/blocks/pricing/Pricing9.jsx +++ b/uikit/react/src/blocks/pricing/Pricing9.jsx @@ -17,7 +17,7 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // @third-party -import { motion } from 'framer-motion'; +import { motion } from 'motion/react'; // @project import ButtonAnimationWrapper from '@/components/ButtonAnimationWrapper'; @@ -31,6 +31,15 @@ import { SECTION_COMMON_PY } from '@/utils/constant'; /*************************** PRICING - 9 ***************************/ +/** + * + * Demos: + * - [Pricing9](https://www.saasable.io/blocks/pricing/pricing9) + * + * API + * - [Pricing9 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/pricing/pricing9#props-details) + */ + export default function Pricing9({ heading, caption, features, plans }) { const theme = useTheme(); @@ -42,10 +51,7 @@ export default function Pricing9({ heading, caption, features, plans }) { initial={{ opacity: 0, y: 10 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - transition={{ - duration: 0.5, - delay: 0.4 - }} + transition={{ duration: 0.5, delay: 0.4 }} > @@ -54,10 +60,11 @@ export default function Pricing9({ heading, caption, features, plans }) { {plans.map((plan, index) => ( @@ -84,41 +91,30 @@ export default function Pricing9({ heading, caption, features, plans }) { - {plan.featureTitle} - - } + label={plan.featureTitle} size="small" - sx={{ bgcolor: 'grey.200', '.MuiChip-label': { py: 0.25, px: 1.5 } }} + slotProps={{ label: { sx: { py: 0.5, px: 1.5, typography: 'caption', color: 'text.secondary' } } }} + sx={{ bgcolor: 'grey.200' }} /> - {features.map((item) => { - const isFreePlanExclusive = item.label === '1 Demo Landing' || item.label === '25 Components Blocks'; - const isProPlanExclusive = item.label === '7 Demo Landing' || item.label === '193+ Component Blocks'; - const shouldShow = - (plan.title === 'Free' && isFreePlanExclusive) || - (plan.title === 'Pro' && isProPlanExclusive) || - (!isFreePlanExclusive && !isProPlanExclusive); - - if (!shouldShow) return null; - + {features.map((item, index) => { + const active = plan.featuresID.includes(item.id); return ( - + {item.label} @@ -134,14 +130,27 @@ export default function Pricing9({ heading, caption, features, plans }) { )} - - - + + + + + + {plan.link && ( or diff --git a/uikit/react/src/blocks/PrivacyPolicy.jsx b/uikit/react/src/blocks/privacy-policy/PrivacyPolicy1.jsx similarity index 92% rename from uikit/react/src/blocks/PrivacyPolicy.jsx rename to uikit/react/src/blocks/privacy-policy/PrivacyPolicy1.jsx index 728f282..b5620e6 100644 --- a/uikit/react/src/blocks/PrivacyPolicy.jsx +++ b/uikit/react/src/blocks/privacy-policy/PrivacyPolicy1.jsx @@ -61,43 +61,43 @@ function useScrollspy(ids, offset = 0) { const menuItems = [ { id: 'acceptance-of-terms', - heading: 'Acceptance of Terms', + heading: 'Acceptance of terms', caption: 'By accessing and using this website, you agree to be bound by these Terms and Conditions of Use. If you do not agree with any part of these terms, you must not use the website. shares information about you when you use our website or services. By accessing or using our website, you consent to the practices described in this policy.' }, { id: 'changes-to-terms', - heading: 'Changes to Terms', + heading: 'Changes to terms', caption: 'We reserve the right to modify or replace these terms at our sole discretion. It is your responsibility to check these terms periodically for changes. Your continued use of the website after the posting of any changes constitutes acceptance of those changes.' }, { id: 'user-conduct', - heading: 'User Conduct', + heading: 'User conduct', caption: 'You agree to use this website only for lawful purposes and in a manner consistent with all applicable local, national, and international laws and regulations.' }, { id: 'intellectual-property', - heading: 'Intellectual Property', + heading: 'Intellectual property', caption: 'All content on this website, including but not limited to text, graphics, logos, images, audio clips, video clips, digital downloads, and data compilations, is the property of [Your Company Name] or its content suppliers and protected by international copyright laws.' }, { id: 'privacy-policy', - heading: 'Privacy Policy', + heading: 'Privacy policy', caption: 'We do not sell, trade, or otherwise transfer your personal information to third parties. We may share information with trusted service providers who assist us in operating our website, conducting our business, or servicing you.' }, { id: 'user-generated-content', - heading: 'User-Generated Content', + heading: 'User-generated content', caption: 'If you submit any material to this website, you grant [Your Company Name] a perpetual, royalty-free, worldwide license to use, reproduce, modify, adapt, publish, translate, create derivative works from, distribute, and display such material.' }, { id: 'limitation-of-liability', - heading: 'Limitation of Liability', + heading: 'Limitation of liability', caption: 'In no event shall [Your Company Name] or its affiliates be liable for any direct, indirect, incidental, special, or consequential damages resulting from the use or inability to use this website.' }, @@ -109,15 +109,21 @@ const menuItems = [ }, { id: 'governing-law', - heading: 'Governing Law', + heading: 'Governing law', caption: 'These terms are governed by and construed in accordance with the laws of [Your Country/State], without regard to its conflict of law principles.' } ]; -/*************************** SECTIONS - PRIVACY POLICY ***************************/ +/*************************** PRIVACY POLICY - 1 ***************************/ -export default function PrivacyPolicyPage() { +/** + * + * Demos: + * - [PrivacyPolicy1](https://www.saasable.io/blocks/privacy-policy/privacy-policy1) + */ + +export default function PrivacyPolicy1() { const ids = menuItems.map((item) => item.id); // Adjust offset as per header height diff --git a/uikit/react/src/blocks/privacy-policy/index.js b/uikit/react/src/blocks/privacy-policy/index.js new file mode 100644 index 0000000..191d725 --- /dev/null +++ b/uikit/react/src/blocks/privacy-policy/index.js @@ -0,0 +1 @@ +export { default as PrivacyPolicy1 } from './PrivacyPolicy1'; diff --git a/uikit/react/src/blocks/small-hero/SmallHero3.jsx b/uikit/react/src/blocks/small-hero/SmallHero3.jsx index 246f6cf..44b38af 100644 --- a/uikit/react/src/blocks/small-hero/SmallHero3.jsx +++ b/uikit/react/src/blocks/small-hero/SmallHero3.jsx @@ -15,6 +15,15 @@ import { SECTION_COMMON_PY } from '@/utils/constant'; /*************************** SMALL HERO - 3 ***************************/ +/** + * + * Demos: + * - [SmallHero3](https://www.saasable.io/blocks/small-hero/small-hero3) + * + * API + * - [SmallHero3 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/smallhero/smallhero3#props-details) + */ + export default function SmallHero3({ chip, headLine, captionLine, exploreBtn }) { return ( diff --git a/uikit/react/src/blocks/testimonial/Testimonial10.jsx b/uikit/react/src/blocks/testimonial/Testimonial10.jsx index 6dfff58..e998a99 100644 --- a/uikit/react/src/blocks/testimonial/Testimonial10.jsx +++ b/uikit/react/src/blocks/testimonial/Testimonial10.jsx @@ -7,6 +7,9 @@ import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; import Masonry from '@mui/lab/Masonry'; +// @third-party +import { motion } from 'motion/react'; + // @project import { GraphicsCard } from '@/components/cards'; import ContainerWrapper from '@/components/ContainerWrapper'; @@ -17,6 +20,15 @@ import { SECTION_COMMON_PY } from '@/utils/constant'; /*************************** TESTIMONIAL - 10 ***************************/ +/** + * + * Demos: + * - [Testimonial10](https://www.saasable.io/blocks/testimonial/testimonial10) + * + * API: + * - [Testimonial10 API](https://phoenixcoded.gitbook.io/saasable/ui-kit/development/components/testimonial/testimonial10#props-details) + */ + export default function Testimonial10({ heading, caption, testimonials }) { const theme = useTheme(); @@ -36,21 +48,29 @@ export default function Testimonial10({ heading, caption, testimonials }) { }} > {testimonials.map((testimonial, index) => ( - - - - - {testimonial.title} - {testimonial.review} - - - {testimonial.profile.name} - - {testimonial.profile.role} - + + + + + + {testimonial.title} + {testimonial.review} + + + {testimonial.profile.name} + + {testimonial.profile.role} + + - - + + ))} diff --git a/uikit/react/src/branding.json b/uikit/react/src/branding.json index 67b1aae..802261c 100644 --- a/uikit/react/src/branding.json +++ b/uikit/react/src/branding.json @@ -12,7 +12,7 @@ "github": "https://github.com/phoenixcoded", "dribble": "https://dribbble.com/Phoenixcoded", "discord": "https://discord.gg/gmqz4BWYA8", - "support": "https://support.phoenixcoded.net" + "support": "https://codedthemes.support-hub.io/" } }, "logo": { diff --git a/uikit/react/src/components/LazySection.jsx b/uikit/react/src/components/LazySection.jsx index 2a22bec..50581e2 100644 --- a/uikit/react/src/components/LazySection.jsx +++ b/uikit/react/src/components/LazySection.jsx @@ -43,7 +43,7 @@ export default function LazySection({ sections, fallback = , offset = } LazySection.propTypes = { - sections: PropTypes.oneOfType([PropTypes.any, PropTypes.array]), + sections: PropTypes.oneOfType([PropTypes.array, PropTypes.any]), fallback: PropTypes.node, Loader: PropTypes.any, offset: PropTypes.string, diff --git a/uikit/react/src/components/SectionHero.jsx b/uikit/react/src/components/SectionHero.jsx index a342258..33128bc 100644 --- a/uikit/react/src/components/SectionHero.jsx +++ b/uikit/react/src/components/SectionHero.jsx @@ -32,8 +32,8 @@ import Wave from '@/images/graphics/Wave'; const options = [ { label: 'About', path: PAGE_PATH.about }, - { label: 'Benefit', path: PAGE_PATH.benefit }, { label: 'Blog', path: PAGE_PATH.blog }, + { label: 'Blog Details', path: PAGE_PATH.blogDetails }, { label: 'CTA', path: PAGE_PATH.cta }, { label: 'Clientele', path: PAGE_PATH.clientele }, { label: 'Color', path: PAGE_PATH.color }, @@ -52,6 +52,7 @@ const options = [ { label: 'Integration', path: PAGE_PATH.integration }, { label: 'Login', path: PAGE_PATH.login }, { label: 'Mega Menu', path: PAGE_PATH.megaMenu }, + { label: 'Metrics', path: PAGE_PATH.metrics }, { label: 'Navbar', path: PAGE_PATH.navbar }, { label: 'New Password', path: PAGE_PATH.newPassword }, { label: 'Pricing', path: PAGE_PATH.pricing }, @@ -119,7 +120,8 @@ export default function SectionHero({ heading, search = true, offer = false, bre ))} } - sx={{ bgcolor: 'grey.100', '& .MuiChip-label': { py: 0.5, px: 1.5 } }} + slotProps={{ label: { sx: { py: 0.5, px: 1.5 } } }} + sx={{ bgcolor: 'grey.100' }} /> )} {offer && ( @@ -131,22 +133,15 @@ export default function SectionHero({ heading, search = true, offer = false, bre Over 200+ - Design Blocks - - } - sx={{ bgcolor: 'primary.lighter', mr: -1, ml: 0.75, '& .MuiChip-label': { px: 1 } }} + label="Design Blocks" + size="small" + slotProps={{ label: { sx: { px: 1.25, py: 0.75, typography: 'caption', color: 'primary.main' } } }} + sx={{ bgcolor: 'primary.lighter', mr: -1, ml: 0.75 }} icon={ @@ -154,7 +149,8 @@ export default function SectionHero({ heading, search = true, offer = false, bre /> } - sx={{ bgcolor: 'grey.100', '& .MuiChip-label': { py: 0.5, px: 1.5 } }} + slotProps={{ label: { sx: { py: 0.5, px: 1.5 } } }} + sx={{ bgcolor: 'grey.100' }} /> )} diff --git a/uikit/react/src/components/SvgIcon.jsx b/uikit/react/src/components/SvgIcon.jsx index a8b7035..a2d4466 100644 --- a/uikit/react/src/components/SvgIcon.jsx +++ b/uikit/react/src/components/SvgIcon.jsx @@ -17,7 +17,7 @@ const spritePaths = { export default function SvgIcon({ name, size = 24, type = IconType.STROKE, color, stroke, twoToneColor }) { const theme = useTheme(); - const fillColor = type !== IconType.STROKE ? twoToneColor || theme.palette.primary.light : undefined; + const fillColor = type !== IconType.STROKE ? twoToneColor || theme.palette.primary.lighter : undefined; const strokeColor = type !== IconType.FILL ? color || (type === IconType.CUSTOM ? theme.palette.text.primary : theme.palette.primary.main) : undefined; @@ -32,7 +32,7 @@ export default function SvgIcon({ name, size = 24, type = IconType.STROKE, color verticalAlign: 'middle', display: 'block', color: color || (type === IconType.CUSTOM ? 'text.primary' : 'primary.main'), - '& [data-two-tone="true"]': { color: twoToneColor || theme.palette.primary.light } + '& [data-two-tone="true"]': { color: twoToneColor || theme.palette.primary.lighter } } }} > diff --git a/uikit/react/src/components/cards/GraphicsCard.jsx b/uikit/react/src/components/cards/GraphicsCard.jsx index 6ef2ac4..63e1616 100644 --- a/uikit/react/src/components/cards/GraphicsCard.jsx +++ b/uikit/react/src/components/cards/GraphicsCard.jsx @@ -53,7 +53,7 @@ export default function GraphicsCard({ sx, children, overLay = false, bgImage, . GraphicsCard.propTypes = { sx: PropTypes.any, children: PropTypes.any, - overLay: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), + overLay: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), bgImage: PropTypes.any, rest: PropTypes.any }; diff --git a/uikit/react/src/components/cards/IconCard.jsx b/uikit/react/src/components/cards/IconCard.jsx index 01bb9eb..bb8bc88 100644 --- a/uikit/react/src/components/cards/IconCard.jsx +++ b/uikit/react/src/components/cards/IconCard.jsx @@ -16,7 +16,7 @@ export default function IconCard({ icon, title, content, iconAvatar, contentCard const boxPadding = cardPadding ? { ...cardPadding } : defaultBoxPadding; return ( - + {iconAvatar ? ( @@ -32,7 +32,7 @@ export default function IconCard({ icon, title, content, iconAvatar, contentCard - + {title && ( {title} diff --git a/uikit/react/src/components/cards/PreviewCard.jsx b/uikit/react/src/components/cards/PreviewCard.jsx index 077ccd4..dd6830c 100644 --- a/uikit/react/src/components/cards/PreviewCard.jsx +++ b/uikit/react/src/components/cards/PreviewCard.jsx @@ -38,16 +38,10 @@ export default function PreviewCard({ title, theme, image, status }) { ) : ( - {status} - - } + label={status} size="small" - sx={{ - bgcolor: 'primary.lighter', - '& .MuiChip-label': { px: 1.5, py: 0.5, minWidth: 20 } - }} + slotProps={{ label: { sx: { px: 1.5, py: 0.5, minWidth: 20, typography: 'caption', color: 'primary.main' } } }} + sx={{ bgcolor: 'primary.lighter' }} /> )} diff --git a/uikit/react/src/components/cards/profile-card/ProfileGroup.jsx b/uikit/react/src/components/cards/profile-card/ProfileGroup.jsx index 62be399..9a4d62a 100644 --- a/uikit/react/src/components/cards/profile-card/ProfileGroup.jsx +++ b/uikit/react/src/components/cards/profile-card/ProfileGroup.jsx @@ -20,7 +20,7 @@ export default function ProfileGroup({ review, avatarGroups, sx }) { {avatarGroups.map((item, index) => ( - + ))} diff --git a/uikit/react/src/components/contact-us/ContactUsForm1.jsx b/uikit/react/src/components/contact-us/ContactUsForm1.jsx index 027bbe6..4404d60 100644 --- a/uikit/react/src/components/contact-us/ContactUsForm1.jsx +++ b/uikit/react/src/components/contact-us/ContactUsForm1.jsx @@ -91,7 +91,7 @@ export default function ContactUsForm1() { - + } sx={{ - ...theme.typography.body1, + typography: 'body1', fontWeight: 500, p: { xs: 0.25 }, borderRadius: 2.5, @@ -243,7 +243,7 @@ export default function ContactUsForm1() { diff --git a/uikit/react/src/components/contact-us/ContactUsForm2.jsx b/uikit/react/src/components/contact-us/ContactUsForm2.jsx index d1961a4..25edd76 100644 --- a/uikit/react/src/components/contact-us/ContactUsForm2.jsx +++ b/uikit/react/src/components/contact-us/ContactUsForm2.jsx @@ -92,7 +92,7 @@ export default function ContactUsForm2() { - + diff --git a/uikit/react/src/components/faq/FaqDetails.jsx b/uikit/react/src/components/faq/FaqDetails.jsx index d2c506a..7d3f35d 100644 --- a/uikit/react/src/components/faq/FaqDetails.jsx +++ b/uikit/react/src/components/faq/FaqDetails.jsx @@ -45,7 +45,7 @@ export default function FaqDetails({ answer }) { - + ))} @@ -55,4 +55,4 @@ export default function FaqDetails({ answer }) { } } -FaqDetails.propTypes = { answer: PropTypes.oneOfType([PropTypes.any, PropTypes.string]) }; +FaqDetails.propTypes = { answer: PropTypes.oneOfType([PropTypes.string, PropTypes.any]) }; diff --git a/uikit/react/src/components/footer/FollowUS.jsx b/uikit/react/src/components/footer/FollowUS.jsx index fe0ec5a..93548c4 100644 --- a/uikit/react/src/components/footer/FollowUS.jsx +++ b/uikit/react/src/components/footer/FollowUS.jsx @@ -44,7 +44,7 @@ const socialIcons = [ export default function FollowUS({ heading = true, color }) { return ( - {heading && } + {heading && } {socialIcons.map((item, index) => ( } - slotProps={{ input: { 'aria-label': 'Email address' } }} - sx={{ - ...theme.typography.caption2, - color: 'text.primary', - maxWidth: 400, - width: 1, - pr: 0.5, - '& .MuiOutlinedInput-input': { - p: '18px 24px' - }, - '& .MuiOutlinedInput-notchedOutline': { borderRadius: 25 } - }} + slotProps={{ input: { 'aria-label': 'Email address', sx: { px: 3, py: 2.25 } }, notchedOutline: { sx: { borderRadius: 25 } } }} + sx={{ typography: 'caption2', color: 'text.primary', maxWidth: 400, width: 1, pr: 0.5 }} /> ); diff --git a/uikit/react/src/components/footer/Sitemap.jsx b/uikit/react/src/components/footer/Sitemap.jsx index 018510a..00354a3 100644 --- a/uikit/react/src/components/footer/Sitemap.jsx +++ b/uikit/react/src/components/footer/Sitemap.jsx @@ -14,6 +14,7 @@ import Typography from '@mui/material/Typography'; // @project import branding from '@/branding.json'; +import { DOCS_URL, FREEBIES_URL } from '@/path'; import { generateFocusVisibleStyles } from '@/utils/CommonFocusStyle'; /*************************** SITEMAP - DATA ***************************/ @@ -21,25 +22,25 @@ import { generateFocusVisibleStyles } from '@/utils/CommonFocusStyle'; const linkProps = { target: '_blank', rel: 'noopener noreferrer' }; const menuItems = [ { - id: 'use-case', + id: 'resources', grid: { size: { xs: 12, sm: 'auto' } }, - title: 'Use Case', + title: 'Resources', menu: [ { - label: 'Business Analytics', - link: { href: '#' } + label: 'Freebies', + link: { href: FREEBIES_URL, ...linkProps } }, { - label: 'Marketing Automation', - link: { href: '#' } + label: 'Documentation', + link: { href: DOCS_URL, ...linkProps } }, { - label: 'Collaboration Suites', - link: { href: '#' } + label: 'Blog', + link: { href: 'https://blog.saasable.io/', ...linkProps } }, { - label: 'Project Management', - link: { href: '#' } + label: 'Refund Policy', + link: { href: 'https://mui.com/store/customer-refund-policy/', ...linkProps } } ] }, @@ -50,11 +51,11 @@ const menuItems = [ menu: [ { label: 'Pricing', - link: { href: '/pricing', ...linkProps } + link: { href: 'https://mui.com/store/items/saasable-multipurpose-ui-kit-and-dashboard/', ...linkProps } }, { label: 'FAQ', - link: { href: '/faq', ...linkProps } + link: { href: 'https://phoenixcoded.gitbook.io/saasable/faq', ...linkProps } }, { label: 'Support', @@ -120,7 +121,7 @@ export default function Sitemap({ list, isMenuDesign }) { + ) : ( - - - + + + + + ); } + +LogoWatermark.propTypes = { width: PropTypes.number, height: PropTypes.number }; diff --git a/uikit/react/src/components/navbar/NavItems.jsx b/uikit/react/src/components/navbar/NavItems.jsx index a51941e..0196f2b 100644 --- a/uikit/react/src/components/navbar/NavItems.jsx +++ b/uikit/react/src/components/navbar/NavItems.jsx @@ -26,6 +26,7 @@ import SvgIcon from '@/components/SvgIcon'; import { MegaMenuType } from '@/enum'; const navItemSX = { py: 1.5, borderRadius: { xs: 0, sm: 4 } }; +const footerSX = { px: 2, mx: 0 }; /*************************** MENU - EXPANDED ***************************/ @@ -57,10 +58,10 @@ function ExpanedList({ item, menuTextColor }) { {item.megaMenu && item.megaMenu.type === MegaMenuType.MEGAMENU4 && ( - + )} {item.megaMenu && item.megaMenu.type === MegaMenuType.MEGAMENU5 && ( - + )} @@ -94,7 +95,7 @@ function NavList({ item, menuTextColor }) { const downMD = useMediaQuery(theme.breakpoints.down('md')); const currentPath = usePathname(); // Get the current path - const toggleProps = { color: menuTextColor || 'text.primary', py: 1.5, ...theme.typography.caption2, pl: { md: 2.25, lg: 3 } }; + const toggleProps = { color: menuTextColor || 'text.primary', py: 1.5, typography: 'caption2', pl: { md: 2.25, lg: 3 } }; const buttonProps = { sx: { ...toggleProps, diff --git a/uikit/react/src/components/navbar/NavPrimaryButton.jsx b/uikit/react/src/components/navbar/NavPrimaryButton.jsx index 1081bf8..d69e141 100644 --- a/uikit/react/src/components/navbar/NavPrimaryButton.jsx +++ b/uikit/react/src/components/navbar/NavPrimaryButton.jsx @@ -1,4 +1,6 @@ +'use client'; import PropTypes from 'prop-types'; + // @next import NextLink from 'next/link'; diff --git a/uikit/react/src/metadata.js b/uikit/react/src/metadata.js index 495b24b..3a9f2e4 100644 --- a/uikit/react/src/metadata.js +++ b/uikit/react/src/metadata.js @@ -133,7 +133,7 @@ export const SEO_CONTENT = { description: `${branding.brandName} about sections are designed to display essential content about your product, mission, or team, helping users understand your brand and its purpose at a glance.` }, - benefit: { + metrics: { title: 'Benefits Sections', description: `The benefits sections in ${branding.brandName} showcase the key advantages and features of your product or service, helping users quickly grasp the value proposition and how it addresses their needs.` }, diff --git a/uikit/react/src/path.js b/uikit/react/src/path.js index b8c693b..246d4df 100644 --- a/uikit/react/src/path.js +++ b/uikit/react/src/path.js @@ -7,7 +7,7 @@ export const ADMIN_PATH = 'https://free.admin.saasable.io/'; export const BUY_NOW_URL = 'https://mui.com/store/items/saasable-multipurpose-ui-kit-and-dashboard-template'; export const FREEBIES_URL = 'https://github.com/phoenixcoded/saasable-ui'; export const DOCS_URL = 'https://phoenixcoded.gitbook.io/saasable '; -export const BLOCK_PATH = '/blocks'; +const BLOCK_PATH = '/blocks'; const AUTH_PATH = 'auth'; export const PAGE_PATH = { @@ -19,7 +19,7 @@ export const PAGE_PATH = { register: path([SECTION_PATH, AUTH_PATH, 'register']), about: path([SECTION_PATH, 'about']), - benefit: path([SECTION_PATH, 'benefit']), + metrics: path([SECTION_PATH, 'metrics']), blog: path([SECTION_PATH, 'blog']), clientele: path([SECTION_PATH, 'clientele']), color: path([SECTION_PATH, 'color']), @@ -28,6 +28,7 @@ export const PAGE_PATH = { cookie: path([SECTION_PATH, 'cookie']), cta: path([SECTION_PATH, 'cta']), earlyAccess: path([SECTION_PATH, 'early-access']), + blogDetails: path([SECTION_PATH, 'blog-details']), error404: path([SECTION_PATH, 'error404']), error500: path([SECTION_PATH, 'error500']), faq: path([SECTION_PATH, 'faq']), @@ -82,16 +83,17 @@ export const PRIVIEW_PATH = { newPassword: path([BLOCK_PATH, AUTH_PATH, 'new-password']), otpVerification: path([BLOCK_PATH, AUTH_PATH, 'otp-verification']) }, - benefit: { - benefit1: path([BLOCK_PATH, 'benefit', 'benefit1']), - benefit2: path([BLOCK_PATH, 'benefit', 'benefit2']), - benefit3: path([BLOCK_PATH, 'benefit', 'benefit3']), - benefit4: path([BLOCK_PATH, 'benefit', 'benefit4']), - benefit5: path([BLOCK_PATH, 'benefit', 'benefit5']), - benefit6: path([BLOCK_PATH, 'benefit', 'benefit6']), - benefit7: path([BLOCK_PATH, 'benefit', 'benefit7']), - benefit8: path([BLOCK_PATH, 'benefit', 'benefit8']), - benefit9: path([BLOCK_PATH, 'benefit', 'benefit9']) + metrics: { + metrics1: path([BLOCK_PATH, 'metrics', 'metrics1']), + metrics2: path([BLOCK_PATH, 'metrics', 'metrics2']), + metrics3: path([BLOCK_PATH, 'metrics', 'metrics3']), + metrics4: path([BLOCK_PATH, 'metrics', 'metrics4']), + metrics5: path([BLOCK_PATH, 'metrics', 'metrics5']), + metrics6: path([BLOCK_PATH, 'metrics', 'metrics6']), + metrics7: path([BLOCK_PATH, 'metrics', 'metrics7']), + metrics8: path([BLOCK_PATH, 'metrics', 'metrics8']), + metrics9: path([BLOCK_PATH, 'metrics', 'metrics9']), + metrics10: path([BLOCK_PATH, 'metrics', 'metrics10']) }, blog: { blog1: path([BLOCK_PATH, 'blog', 'blog1']), @@ -100,8 +102,12 @@ export const PRIVIEW_PATH = { blog4: path([BLOCK_PATH, 'blog', 'blog4']), blog5: path([BLOCK_PATH, 'blog', 'blog5']), blog6: path([BLOCK_PATH, 'blog', 'blog6']), - blog7: path([BLOCK_PATH, 'blog', 'blog7']) + blog7: path([BLOCK_PATH, 'blog', 'blog7']), + blog8: path([BLOCK_PATH, 'blog', 'blog8']), + blog9: path([BLOCK_PATH, 'blog', 'blog9']), + blog10: path([BLOCK_PATH, 'blog', 'blog10']) }, + blogDetails: path([BLOCK_PATH, 'blog-details']), clientele: { clientele1: path([BLOCK_PATH, 'clientele', 'clientele1']), clientele2: path([BLOCK_PATH, 'clientele', 'clientele2']), @@ -109,7 +115,8 @@ export const PRIVIEW_PATH = { clientele4: path([BLOCK_PATH, 'clientele', 'clientele4']), clientele5: path([BLOCK_PATH, 'clientele', 'clientele5']), clientele6: path([BLOCK_PATH, 'clientele', 'clientele6']), - clientele7: path([BLOCK_PATH, 'clientele', 'clientele7']) + clientele7: path([BLOCK_PATH, 'clientele', 'clientele7']), + clientele8: path([BLOCK_PATH, 'clientele', 'clientele8']) }, cta: { cta1: path([BLOCK_PATH, 'cta', 'cta1']), @@ -123,7 +130,9 @@ export const PRIVIEW_PATH = { cta9: path([BLOCK_PATH, 'cta', 'cta9']), cta10: path([BLOCK_PATH, 'cta', 'cta10']), cta11: path([BLOCK_PATH, 'cta', 'cta11']), - cta12: path([BLOCK_PATH, 'cta', 'cta12']) + cta12: path([BLOCK_PATH, 'cta', 'cta12']), + cta13: path([BLOCK_PATH, 'cta', 'cta13']), + cta14: path([BLOCK_PATH, 'cta', 'cta14']) }, comingSoon: path([BLOCK_PATH, 'coming-soon']), cookie: { @@ -177,7 +186,9 @@ export const PRIVIEW_PATH = { feature22: path([BLOCK_PATH, 'feature', 'feature22']), feature23: path([BLOCK_PATH, 'feature', 'feature23']), feature24: path([BLOCK_PATH, 'feature', 'feature24']), - feature25: path([BLOCK_PATH, 'feature', 'feature25']) + feature25: path([BLOCK_PATH, 'feature', 'feature25']), + feature26: path([BLOCK_PATH, 'feature', 'feature26']), + feature27: path([BLOCK_PATH, 'feature', 'feature27']) }, footer: { footer1: path([BLOCK_PATH, 'footer', 'footer1']), @@ -223,7 +234,8 @@ export const PRIVIEW_PATH = { integration5: path([BLOCK_PATH, 'integration', 'integration5']), integration6: path([BLOCK_PATH, 'integration', 'integration6']), integration7: path([BLOCK_PATH, 'integration', 'integration7']), - integration8: path([BLOCK_PATH, 'integration', 'integration8']) + integration8: path([BLOCK_PATH, 'integration', 'integration8']), + integration9: path([BLOCK_PATH, 'integration', 'integration9']) }, megamenu: { megamenu1: path([BLOCK_PATH, 'megamenu', 'megamenu1']), @@ -259,7 +271,8 @@ export const PRIVIEW_PATH = { pricing6: path([BLOCK_PATH, 'pricing', 'pricing6']), pricing7: path([BLOCK_PATH, 'pricing', 'pricing7']), pricing8: path([BLOCK_PATH, 'pricing', 'pricing8']), - pricing9: path([BLOCK_PATH, 'pricing', 'pricing9']) + pricing9: path([BLOCK_PATH, 'pricing', 'pricing9']), + pricing10: path([BLOCK_PATH, 'pricing', 'pricing10']) }, process: { process1: path([BLOCK_PATH, 'process', 'process1']), @@ -271,7 +284,10 @@ export const PRIVIEW_PATH = { process7: path([BLOCK_PATH, 'process', 'process7']), process8: path([BLOCK_PATH, 'process', 'process8']) }, - privacyPolicy: path([BLOCK_PATH, 'privacy-policy']), + privacyPolicy: { + privacyPolicy1: path([BLOCK_PATH, 'privacy-policy', 'privacy-policy1']), + privacyPolicy2: path([BLOCK_PATH, 'privacy-policy', 'privacy-policy2']) + }, proPage: path([BLOCK_PATH, 'pro-page']), smallHero: { @@ -281,7 +297,8 @@ export const PRIVIEW_PATH = { smallHero4: path([BLOCK_PATH, 'small-hero', 'small-hero4']), smallHero5: path([BLOCK_PATH, 'small-hero', 'small-hero5']), smallHero6: path([BLOCK_PATH, 'small-hero', 'small-hero6']), - smallHero7: path([BLOCK_PATH, 'small-hero', 'small-hero7']) + smallHero7: path([BLOCK_PATH, 'small-hero', 'small-hero7']), + smallHero8: path([BLOCK_PATH, 'small-hero', 'small-hero8']) }, team: { team1: path([BLOCK_PATH, 'team', 'team1']), diff --git a/uikit/react/src/utils/constant.js b/uikit/react/src/utils/constant.js index 3ac6909..605507e 100644 --- a/uikit/react/src/utils/constant.js +++ b/uikit/react/src/utils/constant.js @@ -35,18 +35,19 @@ export const FIGMA_LINK = { link: BUY_NOW_URL } }, - benefit: { + metrics: { link: BUY_NOW_URL, variant: { - benefit1: BUY_NOW_URL, - benefit2: BUY_NOW_URL, - benefit3: BUY_NOW_URL, - benefit4: BUY_NOW_URL, - benefit5: BUY_NOW_URL, - benefit6: BUY_NOW_URL, - benefit7: BUY_NOW_URL, - benefit8: BUY_NOW_URL, - benefit9: BUY_NOW_URL + metrics1: BUY_NOW_URL, + metrics2: BUY_NOW_URL, + metrics3: BUY_NOW_URL, + metrics4: BUY_NOW_URL, + metrics5: BUY_NOW_URL, + metrics6: BUY_NOW_URL, + metrics7: BUY_NOW_URL, + metrics8: BUY_NOW_URL, + metrics9: BUY_NOW_URL, + metrics10: BUY_NOW_URL } }, blog: { @@ -58,9 +59,13 @@ export const FIGMA_LINK = { blog4: BUY_NOW_URL, blog5: BUY_NOW_URL, blog6: BUY_NOW_URL, - blog7: BUY_NOW_URL + blog7: BUY_NOW_URL, + blog8: BUY_NOW_URL, + blog9: BUY_NOW_URL, + blog10: BUY_NOW_URL } }, + blogDetails: { link: BUY_NOW_URL }, clientele: { link: BUY_NOW_URL, variant: { @@ -70,7 +75,8 @@ export const FIGMA_LINK = { clientele4: BUY_NOW_URL, clientele5: BUY_NOW_URL, clientele6: BUY_NOW_URL, - clientele7: BUY_NOW_URL + clientele7: BUY_NOW_URL, + clientele8: BUY_NOW_URL } }, color: { @@ -90,7 +96,9 @@ export const FIGMA_LINK = { cta9: BUY_NOW_URL, cta10: BUY_NOW_URL, cta11: BUY_NOW_URL, - cta12: BUY_NOW_URL + cta12: BUY_NOW_URL, + cta13: BUY_NOW_URL, + cta14: BUY_NOW_URL } }, cookie: { @@ -160,7 +168,9 @@ export const FIGMA_LINK = { feature22: BUY_NOW_URL, feature23: BUY_NOW_URL, feature24: BUY_NOW_URL, - feature25: BUY_NOW_URL + feature25: BUY_NOW_URL, + feature26: BUY_NOW_URL, + feature27: BUY_NOW_URL } }, footer: { @@ -221,7 +231,8 @@ export const FIGMA_LINK = { integration5: BUY_NOW_URL, integration6: BUY_NOW_URL, integration7: BUY_NOW_URL, - integration8: BUY_NOW_URL + integration8: BUY_NOW_URL, + integration9: BUY_NOW_URL } }, megamenu: { @@ -269,7 +280,8 @@ export const FIGMA_LINK = { pricing6: BUY_NOW_URL, pricing7: BUY_NOW_URL, pricing8: BUY_NOW_URL, - pricing9: BUY_NOW_URL + pricing9: BUY_NOW_URL, + pricing10: BUY_NOW_URL } }, process: { @@ -301,7 +313,8 @@ export const FIGMA_LINK = { smallHero4: BUY_NOW_URL, smallHero5: BUY_NOW_URL, smallHero6: BUY_NOW_URL, - smallHero7: BUY_NOW_URL + smallHero7: BUY_NOW_URL, + smallHero8: BUY_NOW_URL } }, team: { diff --git a/uikit/react/src/views/landings/ai/data/faq.js b/uikit/react/src/views/landings/ai/data/faq.js index a348e3c..a0af1b0 100644 --- a/uikit/react/src/views/landings/ai/data/faq.js +++ b/uikit/react/src/views/landings/ai/data/faq.js @@ -54,7 +54,7 @@ export const faq = { getInTouch: { title: 'Still Have a Question?', description: `If you have any further questions or need assistance, our team is ready to help.`, - link: { children: 'Get in Touch', href: 'https://support.phoenixcoded.net/', target: '_blank' } + link: { children: 'Get in Touch', href: 'https://codedthemes.support-hub.io/', target: '_blank' } }, bgImage: '/assets/images/graphics/ai/background1.svg' }; diff --git a/uikit/react/src/views/landings/default/data/index.js b/uikit/react/src/views/landings/default/data/index.js index e06562d..17a4460 100644 --- a/uikit/react/src/views/landings/default/data/index.js +++ b/uikit/react/src/views/landings/default/data/index.js @@ -1,4 +1,3 @@ -export { benefit } from './benefit'; export { clientele, clientele2 } from './clientele'; export { contactUS } from './contact-us'; export { cta4, cta5, cta10 } from './cta'; @@ -6,6 +5,7 @@ export { faq } from './faq'; export { feature, feature7, feature2, feature5, feature18, feature20, feature21, feature23 } from './feature'; export { hero } from './hero'; export { integration } from './integration'; +export { metrics } from './metrics'; export { navbar } from './navbar'; export { other, other3 } from './other'; export { pricing } from './pricing'; diff --git a/uikit/react/src/views/landings/default/data/benefit.js b/uikit/react/src/views/landings/default/data/metrics.js similarity index 95% rename from uikit/react/src/views/landings/default/data/benefit.js rename to uikit/react/src/views/landings/default/data/metrics.js index 102822e..75df6f9 100644 --- a/uikit/react/src/views/landings/default/data/benefit.js +++ b/uikit/react/src/views/landings/default/data/metrics.js @@ -1,4 +1,4 @@ -export const benefit = { +export const metrics = { heading: 'Endless Possibilities', caption: 'Everything you need to design both the marketing site and the admin interface for your SaaS product.', blockDetail: [ diff --git a/uikit/react/src/views/landings/default/data/other.js b/uikit/react/src/views/landings/default/data/other.js index 4fa9d0b..c96b81d 100644 --- a/uikit/react/src/views/landings/default/data/other.js +++ b/uikit/react/src/views/landings/default/data/other.js @@ -1,56 +1,56 @@ // @project import { PAGE_PATH, SECTION_PATH } from '@/path'; -// @asssets +// @assets const imagePrefix = '/assets/images/presentation'; // @project import branding from '@/branding.json'; export const other = { - heading: `${branding.brandName} Blocks `, + heading: `${branding.brandName} blocks `, description: 'Explore a wide range of ready-made blocks—from Hero to CTA, Features, and more to speed up your design process.', primaryBtn: { children: 'Explore all Blocks', href: SECTION_PATH }, sections: [ { animationDelay: 0.2, title: 'Hero', - subTitle: '17 Different Variants', + subTitle: '19 Different Variants', image: `${imagePrefix}/hero-light.svg`, link: PAGE_PATH.hero }, { animationDelay: 0.3, title: 'Call to Action', - subTitle: '12 Different Variants', + subTitle: '14 Different Variants', image: `${imagePrefix}/cta-light.svg`, link: PAGE_PATH.cta }, { animationDelay: 0.4, - title: 'Feature', - subTitle: '23 Different Variants', + title: 'Features', + subTitle: '27 Different Variants', image: `${imagePrefix}/feature-light.svg`, link: PAGE_PATH.feature }, { animationDelay: 0.2, - title: 'Benefits', - subTitle: '9 Different Variants', - image: `${imagePrefix}/benefits-light.svg`, - link: PAGE_PATH.benefit + title: 'Metrics', + subTitle: '10 Different Variants', + image: `${imagePrefix}/metrics-light.svg`, + link: PAGE_PATH.metrics }, { animationDelay: 0.3, title: 'Process', - subTitle: '7 Different Variants', + subTitle: '8 Different Variants', image: `${imagePrefix}/process-light.svg`, link: PAGE_PATH.process }, { animationDelay: 0.4, title: 'Integration', - subTitle: '8 Different Variants', + subTitle: '9 Different Variants', image: `${imagePrefix}/integration-light.svg`, link: PAGE_PATH.integration } diff --git a/uikit/react/src/views/landings/default/index.jsx b/uikit/react/src/views/landings/default/index.jsx index e5cd8f8..9abbf6f 100644 --- a/uikit/react/src/views/landings/default/index.jsx +++ b/uikit/react/src/views/landings/default/index.jsx @@ -8,7 +8,7 @@ import useDataThemeMode from '@/hooks/useDataThemeMode'; // @data import { - benefit, + metrics, clientele, cta4, cta5, @@ -35,7 +35,7 @@ export default function Main() { import('@/blocks/benefit').then((module) => ({ default: module.Benefit5 })), props: benefit }, + { importFunc: () => import('@/blocks/metrics').then((module) => ({ default: module.Metrics5 })), props: metrics }, { importFunc: () => import('@/blocks/integration').then((module) => ({ default: module.Integration2 })), props: integration }, { importFunc: () => import('@/blocks/other').then((module) => ({ default: module.Other1 })), props: other } ]} diff --git a/uikit/react/src/views/landings/default/privacy-policy.jsx b/uikit/react/src/views/landings/default/privacy-policy.jsx index dc2fdc0..a24eddc 100644 --- a/uikit/react/src/views/landings/default/privacy-policy.jsx +++ b/uikit/react/src/views/landings/default/privacy-policy.jsx @@ -1,5 +1,5 @@ // @project -import PrivacyPolicyPage from '@/blocks/PrivacyPolicy'; +import PrivacyPolicyPage from '@/blocks/privacy-policy/PrivacyPolicy1'; import { SmallHero3 } from '@/blocks/small-hero'; // @data diff --git a/uikit/react/src/views/sections/Blog.jsx b/uikit/react/src/views/sections/Blog.jsx index 19b846d..62cdb0d 100644 --- a/uikit/react/src/views/sections/Blog.jsx +++ b/uikit/react/src/views/sections/Blog.jsx @@ -30,7 +30,10 @@ const sectionsData = [ { typeset: { heading: 'Default blog section 04', caption, figmaLink: FIGMA_LINK.blog.variant.blog4 }, src: PRIVIEW_PATH.proPage }, { typeset: { heading: 'Default blog section 05', caption, figmaLink: FIGMA_LINK.blog.variant.blog5 }, src: PRIVIEW_PATH.proPage }, { typeset: { heading: 'Default blog section 06', caption, figmaLink: FIGMA_LINK.blog.variant.blog6 }, src: PRIVIEW_PATH.proPage }, - { typeset: { heading: 'Default blog section 07', caption, figmaLink: FIGMA_LINK.blog.variant.blog7 }, src: PRIVIEW_PATH.proPage } + { typeset: { heading: 'Default blog section 07', caption, figmaLink: FIGMA_LINK.blog.variant.blog7 }, src: PRIVIEW_PATH.proPage }, + { typeset: { heading: 'Default blog section 08', caption, figmaLink: FIGMA_LINK.blog.variant.blog8 }, src: PRIVIEW_PATH.proPage }, + { typeset: { heading: 'Default blog section 09', caption, figmaLink: FIGMA_LINK.blog.variant.blog9 }, src: PRIVIEW_PATH.proPage }, + { typeset: { heading: 'Default blog section 010', caption, figmaLink: FIGMA_LINK.blog.variant.blog10 }, src: PRIVIEW_PATH.proPage } ]; /*************************** SECTIONS - BLOG ***************************/ diff --git a/uikit/react/src/views/sections/BlogDetails.jsx b/uikit/react/src/views/sections/BlogDetails.jsx new file mode 100644 index 0000000..b357c68 --- /dev/null +++ b/uikit/react/src/views/sections/BlogDetails.jsx @@ -0,0 +1,46 @@ +// @mui +import Stack from '@mui/material/Stack'; + +// @project +import branding from '@/branding.json'; +import ContainerWrapper from '@/components/ContainerWrapper'; +import SectionHero from '@/components/SectionHero'; +import Simulator from '@/components/Simulator'; +import SimulatorTypeset from '@/components/SimulatorTypeset'; +import { PRIVIEW_PATH, SECTION_PATH } from '@/path'; +import { FIGMA_LINK } from '@/utils/constant'; + +/*************************** BLOG DETAILS - BREADCRUMBS ***************************/ + +let breadcrumbs = [ + { title: 'Home', to: process.env.NEXT_PUBLIC_BASE_NAME || '/' }, + { title: 'Blocks', to: SECTION_PATH }, + { title: 'Blog Details' } +]; + +/*************************** BLOG DETAILS - DATA ***************************/ + +const sectionsData = { + typeset: { + heading: 'Blog Details Section', + caption: '', + figmaLink: FIGMA_LINK.blogDetails.link + }, + src: PRIVIEW_PATH.proPage +}; + +/*************************** SECTIONS - BLOG DETAILS ***************************/ + +export default function BlogDetails() { + return ( + <> + + + + + + + + + ); +} diff --git a/uikit/react/src/views/sections/Clientele.jsx b/uikit/react/src/views/sections/Clientele.jsx index ddbbb5c..b7e310e 100644 --- a/uikit/react/src/views/sections/Clientele.jsx +++ b/uikit/react/src/views/sections/Clientele.jsx @@ -76,6 +76,14 @@ const sectionsData = [ figmaLink: FIGMA_LINK.clientele.variant.clientele7 }, src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Clientele Section - 08', + caption: '', + figmaLink: FIGMA_LINK.clientele.variant.clientele8 + }, + src: PRIVIEW_PATH.proPage } ]; diff --git a/uikit/react/src/views/sections/Cta.jsx b/uikit/react/src/views/sections/Cta.jsx index f60821e..e6a92b7 100644 --- a/uikit/react/src/views/sections/Cta.jsx +++ b/uikit/react/src/views/sections/Cta.jsx @@ -119,6 +119,24 @@ const sectionsData = [ figmaLink: FIGMA_LINK.cta.variant.cta11 }, src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default call to action section 12', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.cta.variant.cta12 + }, + src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default call to action section 13', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.cta.variant.cta13 + }, + src: PRIVIEW_PATH.proPage } ]; diff --git a/uikit/react/src/views/sections/Feature.jsx b/uikit/react/src/views/sections/Feature.jsx index c7ceea1..919560b 100644 --- a/uikit/react/src/views/sections/Feature.jsx +++ b/uikit/react/src/views/sections/Feature.jsx @@ -246,6 +246,24 @@ const sectionsData = [ figmaLink: FIGMA_LINK.feature.variant.feature25 }, src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default feature section 26', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.feature.variant.feature26 + }, + src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default feature section 27', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.feature.variant.feature27 + }, + src: PRIVIEW_PATH.proPage } ]; diff --git a/uikit/react/src/views/sections/Integration.jsx b/uikit/react/src/views/sections/Integration.jsx index a1ec256..5299252 100644 --- a/uikit/react/src/views/sections/Integration.jsx +++ b/uikit/react/src/views/sections/Integration.jsx @@ -92,6 +92,15 @@ const sectionsData = [ figmaLink: FIGMA_LINK.integration.variant.integration8 }, src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default integration section 09', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.integration.variant.integration9 + }, + src: PRIVIEW_PATH.proPage } ]; diff --git a/uikit/react/src/views/sections/Pricing.jsx b/uikit/react/src/views/sections/Pricing.jsx index 5bc3f23..5bfb567 100644 --- a/uikit/react/src/views/sections/Pricing.jsx +++ b/uikit/react/src/views/sections/Pricing.jsx @@ -101,6 +101,24 @@ const sectionsData = [ figmaLink: FIGMA_LINK.pricing.variant.pricing8 }, src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default pricing section 09', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.pricing.variant.pricing9 + }, + src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default pricing section 10', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.pricing.variant.pricing10 + }, + src: PRIVIEW_PATH.proPage } ]; diff --git a/uikit/react/src/views/sections/PrivacyPolicy.jsx b/uikit/react/src/views/sections/PrivacyPolicy.jsx index cdc00e9..16a143f 100644 --- a/uikit/react/src/views/sections/PrivacyPolicy.jsx +++ b/uikit/react/src/views/sections/PrivacyPolicy.jsx @@ -3,9 +3,9 @@ import Stack from '@mui/material/Stack'; // @project import branding from '@/branding.json'; -import PrivacyPolicy from '@/blocks/PrivacyPolicy'; import ContainerWrapper from '@/components/ContainerWrapper'; import SectionHero from '@/components/SectionHero'; +import Simulator from '@/components/Simulator'; import SimulatorTypeset from '@/components/SimulatorTypeset'; import { PRIVIEW_PATH, SECTION_PATH } from '@/path'; @@ -15,32 +15,45 @@ import { FIGMA_LINK } from '@/utils/constant'; let breadcrumbs = [ { title: 'Home', to: process.env.NEXT_PUBLIC_BASE_NAME || '/' }, - { title: 'Components', to: SECTION_PATH }, - { title: 'Privacy Policy' } + { title: 'Blocks', to: SECTION_PATH }, + { title: 'Privacy policy' } ]; /*************************** PRIVACY POLICY - DATA ***************************/ -const privcyPolicyData = { - typeset: { - heading: 'Default Privacy policy section', - caption: - 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', - figmaLink: FIGMA_LINK.privacyPolicy.link +const sectionsData = [ + { + typeset: { + heading: 'Privacy policy Section - 01', + caption: '', + figmaLink: FIGMA_LINK.privacyPolicy.variant.privacyPolicy1 + }, + src: PRIVIEW_PATH.privacyPolicy.privacyPolicy1 }, - src: PRIVIEW_PATH.privacyPolicy -}; + { + typeset: { + heading: 'Privacy policy Section - 02', + caption: '', + figmaLink: FIGMA_LINK.privacyPolicy.variant.privacyPolicy2 + }, + src: PRIVIEW_PATH.proPage + } +]; /*************************** SECTIONS - PRIVACY POLICY ***************************/ -export default function PrivacyPolicyPage() { +export default function PrivacyPolicy() { return ( <> - - - + + {sectionsData.map((item, index) => ( + + + + + ))} diff --git a/uikit/react/src/views/sections/SmallHero.jsx b/uikit/react/src/views/sections/SmallHero.jsx index 675dbc7..bad8ae1 100644 --- a/uikit/react/src/views/sections/SmallHero.jsx +++ b/uikit/react/src/views/sections/SmallHero.jsx @@ -83,6 +83,15 @@ const sectionsData = [ figmaLink: FIGMA_LINK.smallHero.variant.smallHero7 }, src: PRIVIEW_PATH.proPage + }, + { + typeset: { + heading: 'Default small hero section 08', + caption: + 'Use this default example with an announcement badge, heading, CTA buttons, and customer logos to showcase what your website offers.', + figmaLink: FIGMA_LINK.smallHero.variant.smallHero8 + }, + src: PRIVIEW_PATH.proPage } ]; diff --git a/uikit/react/src/views/sections/index.jsx b/uikit/react/src/views/sections/index.jsx index cb96efd..cf7933b 100644 --- a/uikit/react/src/views/sections/index.jsx +++ b/uikit/react/src/views/sections/index.jsx @@ -19,6 +19,7 @@ import Box from '@mui/material/Box'; import { motion } from 'framer-motion'; // @project +import branding from '@/branding.json'; import ContainerWrapper from '@/components/ContainerWrapper'; import { GraphicsCard } from '@/components/cards'; import SectionHero from '@/components/SectionHero'; @@ -55,70 +56,70 @@ const sections = [ }, { title: 'Hero', - subTitle: '17 Different Variants', + subTitle: '19 Different Variants', image: `${imagePrefix}/hero-light.svg`, link: PAGE_PATH.hero, category: SectionCategory.MARKETING }, { title: 'Clientele', - subTitle: '7 Different Variants', + subTitle: '8 Different Variants', image: `${imagePrefix}/clientele-light.svg`, link: PAGE_PATH.clientele, category: SectionCategory.MARKETING }, { - title: 'Benefits', - subTitle: '9 Different Variants', - image: `${imagePrefix}/benefits-light.svg`, - link: PAGE_PATH.benefit, + title: 'Metrics', + subTitle: '10 Different Variants', + image: `${imagePrefix}/metrics-light.svg`, + link: PAGE_PATH.metrics, category: SectionCategory.FEATURE }, { - title: 'Feature', - subTitle: '23 Different Variants', + title: 'Features', + subTitle: '27 Different Variants', image: `${imagePrefix}/feature-light.svg`, link: PAGE_PATH.feature, category: SectionCategory.FEATURE }, { title: 'Process', - subTitle: '7 Different Variants', + subTitle: '8 Different Variants', image: `${imagePrefix}/process-light.svg`, link: PAGE_PATH.process, category: SectionCategory.FEATURE }, { title: 'Integration', - subTitle: '8 Different Variants', + subTitle: '9 Different Variants', image: `${imagePrefix}/integration-light.svg`, link: PAGE_PATH.integration, category: SectionCategory.FEATURE }, { title: 'Testimonial', - subTitle: '11 Different Variants', + subTitle: '13 Different Variants', image: `${imagePrefix}/testimonial-light.svg`, link: PAGE_PATH.testimonial, category: SectionCategory.MARKETING }, { title: 'Call-To-Action', - subTitle: '12 Different Variants', + subTitle: '14 Different Variants', image: `${imagePrefix}/cta-light.svg`, link: PAGE_PATH.cta, category: SectionCategory.MARKETING }, { title: 'Blog', - subTitle: '6 Different Variants', + subTitle: '10 Different Variants', image: `${imagePrefix}/blog-light.svg`, link: PAGE_PATH.blog, category: SectionCategory.MARKETING }, { title: 'FAQs', - subTitle: '7 Different Variants', + subTitle: '8 Different Variants', image: `${imagePrefix}/faqs-light.svg`, link: PAGE_PATH.faq, category: SectionCategory.ESSENTIAL @@ -160,21 +161,21 @@ const sections = [ }, { title: 'Register', - subTitle: '1 Variants', + subTitle: '1 Variant', image: `${imagePrefix}/sign-up-light.svg`, link: PAGE_PATH.register, category: SectionCategory.ESSENTIAL }, { title: 'Pricing', - subTitle: '9 Different Variants', + subTitle: '10 Different Variants', image: `${imagePrefix}/pricing-light.svg`, link: PAGE_PATH.pricing, category: SectionCategory.FEATURE }, { title: 'Small Hero', - subTitle: '7 Different Variants', + subTitle: '8 Different Variants', image: `${imagePrefix}/small-hero-light.svg`, link: PAGE_PATH.smallHero, category: SectionCategory.MARKETING @@ -195,7 +196,7 @@ const sections = [ }, { title: 'Mega Menu', - subTitle: '4 Different Variants', + subTitle: '5 Different Variants', image: `${imagePrefix}/mega-menu-light.svg`, link: PAGE_PATH.megaMenu, category: SectionCategory.ESSENTIAL @@ -209,21 +210,21 @@ const sections = [ }, { title: 'Forgot Password', - subTitle: '1 Variants', + subTitle: '1 Variant', image: `${imagePrefix}/forgot-pass-light.svg`, link: PAGE_PATH.forgotPassword, category: SectionCategory.ESSENTIAL }, { title: 'Create New Password', - subTitle: '1 Variants', + subTitle: '1 Variant', image: `${imagePrefix}/new-pass-light.svg`, link: PAGE_PATH.newPassword, category: SectionCategory.ESSENTIAL }, { title: 'OTP Verification', - subTitle: '1 Variants', + subTitle: '1 Variant', image: `${imagePrefix}/otp-gen-light.svg`, link: PAGE_PATH.otpVerification, category: SectionCategory.ESSENTIAL @@ -281,7 +282,7 @@ const sections = [ }, { title: 'Privacy Policy', - subTitle: '1 Variant', + subTitle: '2 Different Variants', image: `${imagePrefix}/privacy-policy-light.svg`, link: PAGE_PATH.privacyPolicy, category: SectionCategory.ESSENTIAL @@ -293,6 +294,13 @@ const sections = [ link: PAGE_PATH.termsCondition, category: SectionCategory.ESSENTIAL }, + { + title: 'Blog Details', + subTitle: '1 Variant', + image: `${imagePrefix}/blog-detail-light.svg`, + link: PAGE_PATH.blogDetails, + category: SectionCategory.MARKETING + }, { title: 'Typography', subTitle: '1 Variant', @@ -352,7 +360,7 @@ export default function Sections() { return ( <> - + } onChange={handleSearchValue} /> @@ -372,11 +380,7 @@ export default function Sections() { key={index} variant={filterBy === item.value ? 'contained' : 'outlined'} size="small" - sx={{ - ...theme.typography.subtitle2, - whiteSpace: 'nowrap', - [theme.breakpoints.down('sm')]: { px: 1.5, py: 1 } - }} + sx={{ typography: 'subtitle2', whiteSpace: 'nowrap', [theme.breakpoints.down('sm')]: { px: 1.5, py: 1 } }} onClick={() => { setFilterBy(item.value); setFilterSections(item.value === '' ? sections : sections.filter((section) => section.category === item.value)); @@ -390,7 +394,7 @@ export default function Sections() { {filterSections.map((item, index) => ( - + - + {sectionsData.map((item, index) => (