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={
+ <>
+
+ }
+ disabled={isDisabled || isCountryDisabled}
+ color="secondary"
+ sx={{
+ ...theme.typography.body2,
+ height: 'auto',
+ p: 0,
+ borderRadius: 2,
+ minWidth: 40,
+ '&:hover': { bgcolor: 'transparent' },
+ '&:before': { display: 'none' },
+ '& .MuiInputBase-input:focus': { bgcolor: 'transparent' }
+ }}
+ disableRipple
+ aria-describedby={id}
+ type="button"
+ onClick={handleClick}
+ >
+ {selectedCountry.countryCode}
+
+
+
+
+ {({ 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 && }
+
+
+
+
+
+ );
+}
+
+Error404Page.propTypes = { primaryBtn: PropTypes.any, heading: PropTypes.string };
diff --git a/admin/vite/src/components/Error500.jsx b/admin/vite/src/components/Error500.jsx
new file mode 100644
index 0000000..5d40444
--- /dev/null
+++ b/admin/vite/src/components/Error500.jsx
@@ -0,0 +1,53 @@
+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';
+import Box from '@mui/material/Box';
+
+// @assets
+import Error500 from '@/images/maintenance/Error500';
+import Error500Server from '@/images/maintenance/Error500Server';
+
+/*************************** ERROR 500 - PAGES ***************************/
+
+export default function Error500Page({ 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 && }
+
+
+
+
+
+
+
+ );
+}
+
+Error500Page.propTypes = { primaryBtn: PropTypes.any, heading: PropTypes.string };
diff --git a/admin/vite/src/components/Link.jsx b/admin/vite/src/components/Link.jsx
new file mode 100644
index 0000000..39fbcce
--- /dev/null
+++ b/admin/vite/src/components/Link.jsx
@@ -0,0 +1,15 @@
+import { forwardRef } from 'react';
+import { Link as RouterLink } from 'react-router-dom';
+import { Link as MuiLink } from '@mui/material';
+
+const LinkComponent = forwardRef(({ to, ...other }, ref) => );
+
+LinkComponent.displayName = 'LinkComponent';
+
+const Link = forwardRef(({ to, replace, ...other }, ref) => {
+ return ;
+});
+
+Link.displayName = 'Link';
+
+export default Link;
diff --git a/admin/vite/src/components/Loadable.jsx b/admin/vite/src/components/Loadable.jsx
new file mode 100644
index 0000000..925f9c9
--- /dev/null
+++ b/admin/vite/src/components/Loadable.jsx
@@ -0,0 +1,16 @@
+import { Suspense } from 'react';
+
+// @project
+import Loader from './Loader';
+
+/*************************** LOADABLE - LAZY LOADING ***************************/
+
+const Loadable = (Component) => (props) => {
+ return (
+ }>
+
+
+ );
+};
+
+export default Loadable;
diff --git a/admin/vite/src/components/Loader.jsx b/admin/vite/src/components/Loader.jsx
new file mode 100644
index 0000000..088c631
--- /dev/null
+++ b/admin/vite/src/components/Loader.jsx
@@ -0,0 +1,25 @@
+import { useEffect, useState } from 'react';
+
+// @mui
+import LinearProgress from '@mui/material/LinearProgress';
+import Box from '@mui/material/Box';
+
+/*************************** LOADER ***************************/
+
+export default function Loader() {
+ const [isClient, setIsClient] = useState(false);
+
+ useEffect(() => {
+ setIsClient(true);
+ }, []);
+
+ return (
+ <>
+ {isClient && (
+
+
+
+ )}
+ >
+ );
+}
diff --git a/admin/vite/src/components/MainCard.jsx b/admin/vite/src/components/MainCard.jsx
new file mode 100644
index 0000000..23b5c5b
--- /dev/null
+++ b/admin/vite/src/components/MainCard.jsx
@@ -0,0 +1,27 @@
+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 },
+ border: `1px solid ${theme.palette.divider}`,
+ borderRadius: 4,
+ boxShadow: theme.customShadows.section
+ });
+
+ const combinedSx = (theme) => ({
+ ...defaultSx(theme),
+ ...(typeof sx === 'function' ? sx(theme) : sx)
+ });
+
+ return (
+
+ {children}
+
+ );
+}
+
+MainCard.propTypes = { children: PropTypes.any, sx: PropTypes.object, ref: PropTypes.any, others: PropTypes.any };
diff --git a/admin/vite/src/components/NotificationItem.jsx b/admin/vite/src/components/NotificationItem.jsx
new file mode 100644
index 0000000..a29dc5a
--- /dev/null
+++ b/admin/vite/src/components/NotificationItem.jsx
@@ -0,0 +1,71 @@
+import PropTypes from 'prop-types';
+import { isValidElement } from 'react';
+
+// @mui
+import { useTheme } from '@mui/material/styles';
+import Avatar from '@mui/material/Avatar';
+import Badge from '@mui/material/Badge';
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+import Box from '@mui/material/Box';
+
+// @project
+import { AvatarSize } from '@/enum';
+
+// @types
+
+/*************************** NOTIFICATION - LIST ***************************/
+
+export default function NotificationItem({ avatar, badgeAvatar, title, subTitle, dateTime, isSeen = false }) {
+ const theme = useTheme();
+ const ellipsis = { textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap' };
+
+ const avatarContent = isValidElement(avatar) ? {avatar} : ;
+
+ return (
+
+
+ {badgeAvatar ? (
+ // Box component for badge position due to parent Stack component
+
+ }
+ slotProps={{ badge: { sx: { bottom: '22%' } } }}
+ >
+ {avatarContent}
+
+
+ ) : (
+ avatarContent
+ )}
+
+ {/* minWidth: 0 -> Critical to ensure ellipsis works */}
+
+
+ {title}
+
+ {subTitle && (
+
+ {subTitle}
+
+ )}
+
+ {dateTime && (
+
+ {dateTime}
+
+ )}
+
+ );
+}
+
+NotificationItem.propTypes = {
+ avatar: PropTypes.any,
+ badgeAvatar: PropTypes.any,
+ title: PropTypes.any,
+ subTitle: PropTypes.any,
+ dateTime: PropTypes.any,
+ isSeen: PropTypes.bool
+};
diff --git a/admin/vite/src/components/Profile.jsx b/admin/vite/src/components/Profile.jsx
new file mode 100644
index 0000000..6c83c33
--- /dev/null
+++ b/admin/vite/src/components/Profile.jsx
@@ -0,0 +1,50 @@
+import PropTypes from 'prop-types';
+// @mui
+import Avatar from '@mui/material/Avatar';
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+
+// @types
+
+// @icons
+import { IconPhoto } from '@tabler/icons-react';
+
+/*************************** PROFILE ***************************/
+
+export default function Profile({ avatar, title, caption, label, sx, titleProps, captionProps, placeholderIfEmpty }) {
+ return (
+
+ {(avatar?.src || placeholderIfEmpty) && (
+
+ {!avatar?.src && placeholderIfEmpty && }
+
+ )}
+
+
+
+ {title || (placeholderIfEmpty && 'N/A')}
+
+ {label}
+
+
+ {caption || (placeholderIfEmpty && '---')}
+
+
+
+ );
+}
+
+Profile.propTypes = {
+ avatar: PropTypes.any,
+ title: PropTypes.any,
+ caption: PropTypes.any,
+ label: PropTypes.any,
+ sx: PropTypes.any,
+ titleProps: PropTypes.any,
+ captionProps: PropTypes.any,
+ placeholderIfEmpty: PropTypes.any
+};
diff --git a/admin/vite/src/components/cards/OverviewCard.jsx b/admin/vite/src/components/cards/OverviewCard.jsx
new file mode 100644
index 0000000..0b4fd88
--- /dev/null
+++ b/admin/vite/src/components/cards/OverviewCard.jsx
@@ -0,0 +1,40 @@
+import PropTypes from 'prop-types';
+
+// @mui
+import Chip from '@mui/material/Chip';
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+
+// @project
+import MainCard from '@/components/MainCard';
+
+/*************************** CARD - OVERVIEW ***************************/
+
+export default function OverviewCard({ title, value, chip, compare, cardProps }) {
+ const chipDefaultProps = { color: 'success', variant: 'text', size: 'small' };
+
+ return (
+
+
+ {title}
+
+
+ {value}
+
+
+
+ {compare}
+
+
+
+
+ );
+}
+
+OverviewCard.propTypes = {
+ title: PropTypes.string,
+ value: PropTypes.string,
+ chip: PropTypes.any,
+ compare: PropTypes.string,
+ cardProps: PropTypes.any
+};
diff --git a/admin/vite/src/components/cards/PresentationCard.jsx b/admin/vite/src/components/cards/PresentationCard.jsx
new file mode 100644
index 0000000..a521a1e
--- /dev/null
+++ b/admin/vite/src/components/cards/PresentationCard.jsx
@@ -0,0 +1,25 @@
+import PropTypes from 'prop-types';
+
+// @mui
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+
+// @project
+import MainCard from '@/components/MainCard';
+
+/*************************** PRESENTATION CARD ***************************/
+
+export default function PresentationCard({ title, children }) {
+ return (
+
+
+
+ {title}
+
+ {children}
+
+
+ );
+}
+
+PresentationCard.propTypes = { title: PropTypes.string, children: PropTypes.any };
diff --git a/admin/vite/src/components/cards/ProgressCard.jsx b/admin/vite/src/components/cards/ProgressCard.jsx
new file mode 100644
index 0000000..aee035c
--- /dev/null
+++ b/admin/vite/src/components/cards/ProgressCard.jsx
@@ -0,0 +1,24 @@
+import PropTypes from 'prop-types';
+// @mui
+import LinearProgress from '@mui/material/LinearProgress';
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+
+// @project
+import { LinearProgressType } from '@/enum';
+
+/*************************** CARD - PROGRESS ***************************/
+
+export default function ProgressCard({ title, value, progress }) {
+ return (
+
+
+ {title}
+ {value}
+
+
+
+ );
+}
+
+ProgressCard.propTypes = { title: PropTypes.string, value: PropTypes.string, progress: PropTypes.any };
diff --git a/admin/vite/src/components/header/empty-state/EmptyNotification.jsx b/admin/vite/src/components/header/empty-state/EmptyNotification.jsx
new file mode 100644
index 0000000..876ec2c
--- /dev/null
+++ b/admin/vite/src/components/header/empty-state/EmptyNotification.jsx
@@ -0,0 +1,19 @@
+// @mui
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+
+// @images
+import { ReadingSideDoodle } from '@/images/illustration';
+
+/*************************** HEADER - EMPTY NOTIFICATION ***************************/
+
+export default function EmptyNotification() {
+ return (
+
+
+
+ Nothing to see here! You're all up to date.
+
+
+ );
+}
diff --git a/admin/vite/src/components/header/empty-state/EmptySearch.jsx b/admin/vite/src/components/header/empty-state/EmptySearch.jsx
new file mode 100644
index 0000000..7dab173
--- /dev/null
+++ b/admin/vite/src/components/header/empty-state/EmptySearch.jsx
@@ -0,0 +1,31 @@
+import PropTypes from 'prop-types';
+
+// @mui
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+import Box from '@mui/material/Box';
+
+// @assets
+import { DumpingDoodle } from '@/images/illustration';
+
+/*************************** HEADER - EMPTY SEARCH ***************************/
+
+export default function EmptySearch({ props, ref }) {
+ return (
+
+
+
+
+
+
+ No search Result
+
+
+ We have searched more than 120 result but didn’t found anything
+
+
+
+ );
+}
+
+EmptySearch.propTypes = { props: PropTypes.any, ref: PropTypes.object };
diff --git a/admin/vite/src/components/logo/LogoIcon.jsx b/admin/vite/src/components/logo/LogoIcon.jsx
new file mode 100644
index 0000000..581b85f
--- /dev/null
+++ b/admin/vite/src/components/logo/LogoIcon.jsx
@@ -0,0 +1,40 @@
+// @mui
+import { useTheme } from '@mui/material/styles';
+import CardMedia from '@mui/material/CardMedia';
+import Box from '@mui/material/Box';
+
+// @project
+import branding from '@/branding.json';
+
+/*************************** LOGO - ICON ***************************/
+
+export default function LogoIcon() {
+ const theme = useTheme();
+ const logoIconPath = branding.logo.logoIcon;
+
+ return (
+
+ {logoIconPath ? (
+
+ ) : (
+
+ )}
+
+ );
+}
diff --git a/admin/vite/src/components/logo/LogoMain.jsx b/admin/vite/src/components/logo/LogoMain.jsx
new file mode 100644
index 0000000..7bd95d6
--- /dev/null
+++ b/admin/vite/src/components/logo/LogoMain.jsx
@@ -0,0 +1,33 @@
+// @mui
+import { useTheme } from '@mui/material/styles';
+import CardMedia from '@mui/material/CardMedia';
+import Box from '@mui/material/Box';
+
+// @project
+import branding from '@/branding.json';
+
+/*************************** LOGO - MAIN ***************************/
+
+export default function LogoMain() {
+ const theme = useTheme();
+ const logoMainPath = branding.logo.main;
+
+ return logoMainPath ? (
+
+ ) : (
+
+
+
+ );
+}
diff --git a/admin/vite/src/components/logo/index.jsx b/admin/vite/src/components/logo/index.jsx
new file mode 100644
index 0000000..9e710b7
--- /dev/null
+++ b/admin/vite/src/components/logo/index.jsx
@@ -0,0 +1,27 @@
+import PropTypes from 'prop-types';
+// @mui
+import { useTheme } from '@mui/material/styles';
+import ButtonBase from '@mui/material/ButtonBase';
+
+// @project
+import LogoMain from './LogoMain';
+import LogoIcon from './LogoIcon';
+import { APP_DEFAULT_PATH } from '@/config';
+import RouterLink from '@/components/Link';
+import { generateFocusStyle } from '@/utils/generateFocusStyle';
+
+/*************************** MAIN - LOGO ***************************/
+
+export default function LogoSection({ isIcon, sx, to }) {
+ const theme = useTheme();
+
+ return (
+
+
+ {isIcon ? : }
+
+
+ );
+}
+
+LogoSection.propTypes = { isIcon: PropTypes.bool, sx: PropTypes.any, to: PropTypes.string };
diff --git a/admin/vite/src/components/third-party/Notistack.jsx b/admin/vite/src/components/third-party/Notistack.jsx
new file mode 100644
index 0000000..b133e4c
--- /dev/null
+++ b/admin/vite/src/components/third-party/Notistack.jsx
@@ -0,0 +1,116 @@
+import PropTypes from 'prop-types';
+
+// @mui
+import { styled } from '@mui/material/styles';
+import Fade from '@mui/material/Fade';
+import Grow from '@mui/material/Grow';
+import Slide from '@mui/material/Slide';
+import Zoom from '@mui/material/Zoom';
+
+// @third-party
+import { SnackbarProvider } from 'notistack';
+
+// @project
+import { useGetSnackbar } from '@/states/snackbar';
+import Loader from '@/components/Loader';
+
+// @types
+
+// @assets
+import { IconAlertTriangle, IconBug, IconChecks, IconInfoCircle, IconSpeakerphone } from '@tabler/icons-react';
+
+// custom styles
+const StyledSnackbarProvider = styled(SnackbarProvider)(({ theme }) => ({
+ '&.notistack-MuiContent': {
+ color: theme.palette.background.default
+ },
+ '&.notistack-MuiContent-default': {
+ backgroundColor: theme.palette.primary.main
+ },
+ '&.notistack-MuiContent-error': {
+ backgroundColor: theme.palette.error.main
+ },
+ '&.notistack-MuiContent-success': {
+ backgroundColor: theme.palette.success.main
+ },
+ '&.notistack-MuiContent-info': {
+ backgroundColor: theme.palette.info.main
+ },
+ '&.notistack-MuiContent-warning': {
+ backgroundColor: theme.palette.warning.main
+ },
+ '& #notistack-snackbar': {
+ gap: 8
+ }
+}));
+
+/*************************** SNACKBAR - ANIMATION ***************************/
+
+function TransitionSlideLeft(props) {
+ return ;
+}
+
+function TransitionSlideUp(props) {
+ return ;
+}
+
+function TransitionSlideRight(props) {
+ return ;
+}
+
+function TransitionSlideDown(props) {
+ return ;
+}
+
+function GrowTransition(props) {
+ return ;
+}
+
+function ZoomTransition(props) {
+ return ;
+}
+
+const animation = {
+ SlideLeft: TransitionSlideLeft,
+ SlideUp: TransitionSlideUp,
+ SlideRight: TransitionSlideRight,
+ SlideDown: TransitionSlideDown,
+ Grow: GrowTransition,
+ Zoom: ZoomTransition,
+ Fade
+};
+
+const iconSX = { fontSize: '1.15rem' };
+
+/*************************** SNACKBAR - NOTISTACK ***************************/
+
+export default function Notistack({ children }) {
+ const { snackbar } = useGetSnackbar();
+
+ if (snackbar === undefined) return ;
+
+ return (
+ ,
+ success: ,
+ error: ,
+ warning: ,
+ info:
+ }
+ : undefined
+ }
+ hideIconVariant={snackbar.iconVariant === 'hide' ? true : false}
+ >
+ {children}
+
+ );
+}
+
+Notistack.propTypes = { children: PropTypes.node };
diff --git a/admin/vite/src/components/third-party/SimpleBar.jsx b/admin/vite/src/components/third-party/SimpleBar.jsx
new file mode 100644
index 0000000..1ea6f3a
--- /dev/null
+++ b/admin/vite/src/components/third-party/SimpleBar.jsx
@@ -0,0 +1,55 @@
+import PropTypes from 'prop-types';
+
+// @mui
+import { alpha, styled, useTheme } from '@mui/material/styles';
+import Box from '@mui/material/Box';
+
+// @third-party
+import MainSimpleBar from 'simplebar-react';
+import { BrowserView, MobileView } from 'react-device-detect';
+
+// @project
+import { ThemeDirection, ThemeMode } from '@/config';
+
+// root style
+const RootStyle = styled(BrowserView)({ flexGrow: 1, height: '100%', overflow: 'hidden' });
+
+// scroll bar wrapper
+const SimpleBarStyle = styled(MainSimpleBar)(({ theme }) => ({
+ maxHeight: '100%',
+ '& .simplebar-scrollbar': {
+ '&:before': { background: alpha(theme.palette.grey[theme.palette.mode === ThemeMode.DARK ? 200 : 500], 0.48) },
+ '&.simplebar-visible:before': { opacity: 1 }
+ },
+ '& .simplebar-track.simplebar-vertical': { width: 10 },
+ '& .simplebar-track.simplebar-horizontal .simplebar-scrollbar': { height: 6 },
+ '& .simplebar-mask': { zIndex: 'inherit' }
+}));
+
+/*************************** SIMPLE SCROLL BAR ***************************/
+
+export default function SimpleBar({ children, sx, ...other }) {
+ const theme = useTheme();
+
+ return (
+ <>
+
+
+ {children}
+
+
+
+
+ {children}
+
+
+ >
+ );
+}
+
+SimpleBar.propTypes = { children: PropTypes.any, sx: PropTypes.any, other: PropTypes.any };
diff --git a/admin/vite/src/components/third-party/chart/Legend.jsx b/admin/vite/src/components/third-party/chart/Legend.jsx
new file mode 100644
index 0000000..8f3be06
--- /dev/null
+++ b/admin/vite/src/components/third-party/chart/Legend.jsx
@@ -0,0 +1,24 @@
+import PropTypes from 'prop-types';
+// @mui
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+import Box from '@mui/material/Box';
+
+/*************************** CHART - LEGEND ***************************/
+
+export default function Legend({ items, onToggle }) {
+ return (
+
+ {items.map((item) => (
+ onToggle(item.id)}>
+
+
+ {item.label}
+
+
+ ))}
+
+ );
+}
+
+Legend.propTypes = { items: PropTypes.object, onToggle: PropTypes.func };
diff --git a/admin/vite/src/config.js b/admin/vite/src/config.js
new file mode 100644
index 0000000..b3d9d47
--- /dev/null
+++ b/admin/vite/src/config.js
@@ -0,0 +1,53 @@
+/*************************** THEME CONSTANT ***************************/
+
+export const APP_DEFAULT_PATH = '/dashboard';
+
+export const DRAWER_WIDTH = 254;
+export const MINI_DRAWER_WIDTH = 76 + 1; // 1px - for right-side border
+
+/*************************** THEME ENUM ***************************/
+
+export let Themes;
+
+(function (Themes) {
+ Themes['THEME_HOSTING'] = 'hosting';
+})(Themes || (Themes = {}));
+
+export let ThemeMode;
+
+(function (ThemeMode) {
+ ThemeMode['LIGHT'] = 'light';
+})(ThemeMode || (ThemeMode = {}));
+
+export let ThemeDirection;
+
+(function (ThemeDirection) {
+ ThemeDirection['LTR'] = 'ltr';
+})(ThemeDirection || (ThemeDirection = {}));
+
+export let ThemeI18n;
+
+(function (ThemeI18n) {
+ ThemeI18n['EN'] = 'en';
+ ThemeI18n['FR'] = 'fr';
+ ThemeI18n['RO'] = 'ro';
+ ThemeI18n['ZH'] = 'zh';
+})(ThemeI18n || (ThemeI18n = {}));
+
+export let ThemeFonts;
+
+(function (ThemeFonts) {
+ ThemeFonts['FONT_ARCHIVO'] = "'Archivo', sans-serif";
+})(ThemeFonts || (ThemeFonts = {}));
+
+/*************************** CONFIG ***************************/
+
+const config = {
+ currentTheme: Themes.THEME_HOSTING,
+ mode: ThemeMode.LIGHT,
+ themeDirection: ThemeDirection.LTR,
+ miniDrawer: false,
+ i18n: ThemeI18n.EN
+};
+
+export default config;
diff --git a/admin/vite/src/contexts/ConfigContext.jsx b/admin/vite/src/contexts/ConfigContext.jsx
new file mode 100644
index 0000000..6257354
--- /dev/null
+++ b/admin/vite/src/contexts/ConfigContext.jsx
@@ -0,0 +1,24 @@
+import PropTypes from 'prop-types';
+
+import { createContext } from 'react';
+
+// @project
+import defaultConfig from '@/config';
+import useLocalStorage from '@/hooks/useLocalStorage';
+
+// @initial
+const initialState = { ...defaultConfig };
+
+/*************************** CONFIG - CONTEXT & PROVIDER ***************************/
+
+const ConfigContext = createContext(initialState);
+
+function ConfigProvider({ children }) {
+ const [config] = useLocalStorage('sass-able-react-mui-admin-vite', initialState);
+
+ return {children};
+}
+
+export { ConfigProvider, ConfigContext };
+
+ConfigProvider.propTypes = { children: PropTypes.any };
diff --git a/admin/vite/src/data/countries.js b/admin/vite/src/data/countries.js
new file mode 100644
index 0000000..9c351e2
--- /dev/null
+++ b/admin/vite/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/vite/src/enum.js b/admin/vite/src/enum.js
new file mode 100644
index 0000000..6c4929c
--- /dev/null
+++ b/admin/vite/src/enum.js
@@ -0,0 +1,101 @@
+/** Navigation items `action.type` enum */
+export let NavActionType;
+
+(function (NavActionType) {
+ NavActionType['FUNCTION'] = 'function';
+ NavActionType['LINK'] = 'link';
+})(NavActionType || (NavActionType = {}));
+
+/** Tabs custom props `type` enum */
+export let TabsType;
+
+(function (TabsType) {
+ TabsType['SEGMENTED'] = 'segmented';
+})(TabsType || (TabsType = {}));
+
+/** LinearProgress custom props `type` enum */
+export let LinearProgressType;
+
+(function (LinearProgressType) {
+ LinearProgressType['LIGHT'] = 'light';
+})(LinearProgressType || (LinearProgressType = {}));
+
+/** LinearProgress with label custom props `placement` enum */
+export let LinearProgressPlacement;
+
+(function (LinearProgressPlacement) {
+ LinearProgressPlacement['TOP'] = 'top';
+ LinearProgressPlacement['BOTTOM'] = 'bottom';
+ LinearProgressPlacement['LEFT'] = 'left';
+ LinearProgressPlacement['RIGHT'] = 'right';
+ LinearProgressPlacement['TOPRIGHT'] = 'top-right';
+ LinearProgressPlacement['BOTTOMRIGHT'] = 'bottom-right';
+ LinearProgressPlacement['TOPLEFT'] = 'top-left';
+ LinearProgressPlacement['BOTTOMLEFT'] = 'bottom-left';
+})(LinearProgressPlacement || (LinearProgressPlacement = {}));
+
+/** Chip custom props `position` enum */
+export let ChipIconPosition;
+
+(function (ChipIconPosition) {
+ ChipIconPosition['RIGHT'] = 'right';
+})(ChipIconPosition || (ChipIconPosition = {}));
+
+/** Avatar custom props `size` enum */
+export let AvatarSize;
+
+(function (AvatarSize) {
+ AvatarSize['BADGE'] = 'badge';
+ AvatarSize['XXS'] = 'xxs';
+ AvatarSize['XS'] = 'xs';
+ AvatarSize['SM'] = 'sm';
+ AvatarSize['MD'] = 'md';
+ AvatarSize['LG'] = 'lg';
+ AvatarSize['XL'] = 'xl';
+})(AvatarSize || (AvatarSize = {}));
+
+/** Modal custom props `maxWidth` enum */
+export let ModalSize;
+
+(function (ModalSize) {
+ ModalSize['XS'] = 'xs';
+ ModalSize['SM'] = 'sm';
+ ModalSize['MD'] = 'md';
+ ModalSize['LG'] = 'lg';
+ ModalSize['XL'] = 'xl';
+})(ModalSize || (ModalSize = {}));
+
+/** Chart custom view mode enum */
+export let ViewMode;
+
+(function (ViewMode) {
+ ViewMode['DAILY'] = 'Daily';
+ ViewMode['MONTHLY'] = 'Monthly';
+ ViewMode['YEARLY'] = 'Yearly';
+})(ViewMode || (ViewMode = {}));
+
+/** Auth social props `type` enum */
+export let SocialTypes;
+
+(function (SocialTypes) {
+ SocialTypes['HORIZONTAL'] = 'horizontal';
+ SocialTypes['VERTICAL'] = 'vertical';
+})(SocialTypes || (SocialTypes = {}));
+
+/** Auth role enum */
+export let AuthRole;
+
+(function (AuthRole) {
+ AuthRole['SUPER_ADMIN'] = 'super-admin';
+ AuthRole['ADMIN'] = 'admin';
+ AuthRole['USER'] = 'user';
+})(AuthRole || (AuthRole = {}));
+
+/** Auth type enum */
+export let AuthType;
+
+(function (AuthType) {
+ AuthType['MOCK'] = 'mock';
+ AuthType['SUPABASE'] = 'supabase';
+ AuthType['AWS'] = 'aws';
+})(AuthType || (AuthType = {}));
diff --git a/admin/vite/src/hooks/useConfig.js b/admin/vite/src/hooks/useConfig.js
new file mode 100644
index 0000000..31ed0a8
--- /dev/null
+++ b/admin/vite/src/hooks/useConfig.js
@@ -0,0 +1,21 @@
+import { use } from 'react';
+
+// @project
+import { ConfigContext } from '@/contexts/ConfigContext';
+
+/*************************** HOOKS - CONFIG ***************************/
+
+/**
+ * Custom hook to access the application's configuration context.
+ *
+ * This hook provides an easy way to consume the `ConfigContext`,
+ * which typically contains application-wide settings like themes,
+ * layouts, or other configurable options.
+ *
+ * @returns {any} The value provided by the `ConfigContext`.
+ * Ensure that the component using this hook is wrapped with a `ConfigProvider`.
+ */
+
+export default function useConfig() {
+ return use(ConfigContext);
+}
diff --git a/admin/vite/src/hooks/useLocalStorage.js b/admin/vite/src/hooks/useLocalStorage.js
new file mode 100644
index 0000000..2f17a31
--- /dev/null
+++ b/admin/vite/src/hooks/useLocalStorage.js
@@ -0,0 +1,51 @@
+import { useState, useEffect } from 'react';
+
+/*************************** HOOKS - LOCAL STORAGE ***************************/
+
+/**
+ * Custom hook to manage localStorage with React state synchronization.
+ *
+ * This hook provides a convenient way to:
+ * - Read an initial value from localStorage (or use a default value if none exists).
+ * - Synchronize the value with localStorage whenever it changes.
+ * - Listen for changes to the same key in localStorage from other browser tabs or windows.
+ *
+ * @template ValueType - The type of the stored value.
+ * @param {string} key - The key used to store the value in localStorage.
+ * @param {ValueType} defaultValue - The default value used if no value exists in localStorage.
+ * @returns {[ValueType, (newValue: ValueType | ((currentValue: ValueType) => ValueType)) => void]}
+ * An array with the current value and a function to update it.
+ */
+
+export default function useLocalStorage(key, defaultValue) {
+ const [value, setValue] = useState(() => {
+ const storedValue = typeof window !== 'undefined' ? localStorage.getItem(key) : null;
+ return storedValue === null ? defaultValue : JSON.parse(storedValue);
+ });
+
+ useEffect(() => {
+ // Define a listener to update the state when the same key in localStorage changes
+ const listener = (e) => {
+ if (typeof window !== 'undefined' && e.storageArea === localStorage && e.key === key) {
+ setValue(e.newValue ? JSON.parse(e.newValue) : e.newValue);
+ }
+ };
+ window.addEventListener('storage', listener);
+
+ return () => {
+ window.removeEventListener('storage', listener);
+ };
+ }, [key, defaultValue]);
+
+ // Function to update both the local state and localStorage
+ const setValueInLocalStorage = (newValue) => {
+ setValue((currentValue) => {
+ const result = typeof newValue === 'function' ? newValue(currentValue) : newValue;
+ if (typeof window !== 'undefined') localStorage.setItem(key, JSON.stringify(result));
+ return result;
+ });
+ };
+
+ // Return the current value and the function to update it
+ return [value, setValueInLocalStorage];
+}
diff --git a/admin/vite/src/hooks/useMenuCollapse.js b/admin/vite/src/hooks/useMenuCollapse.js
new file mode 100644
index 0000000..73f538e
--- /dev/null
+++ b/admin/vite/src/hooks/useMenuCollapse.js
@@ -0,0 +1,62 @@
+import { useEffect } from 'react';
+
+/*************************** MENU COLLAPSED - RECURSIVE FUNCTION ***************************/
+
+/**
+ * Recursively traverses menu items to find and open the correct parent menu.
+ * If a menu item matches the current pathname, it marks the corresponding menu as selected and opens it.
+ *
+ * @param {NavItemType[]} items - List of menu items.
+ * @param {string} pathname - Current route pathname.
+ * @param {string | undefined} menuId - ID of the menu to be set as selected.
+ * @param {SetState} setSelected - Function to update the selected menu.
+ * @param {Dispatch>} setOpen - Function to update the open state.
+ */
+
+function setParentOpenedMenu(items, pathname, menuId, setSelected, setOpen) {
+ for (const item of items) {
+ // Recursively check child menus
+ if (item.children?.length) {
+ setParentOpenedMenu(item.children, pathname, menuId, setSelected, setOpen);
+ }
+
+ if (item.url === pathname) {
+ setSelected(menuId ?? null);
+ setOpen(true);
+ }
+ }
+}
+
+/*************************** MENU COLLAPSED - HOOK ***************************/
+
+/**
+ * Hook to handle menu collapse behavior based on the current route.
+ * Automatically expands the parent menu of the active route item.
+ *
+ * @param {NavItemType} menu - The menu object containing items.
+ * @param {string} pathname - Current route pathname.
+ * @param {boolean} miniMenuOpened - Flag indicating if the mini menu is open.
+ * @param {SetState} setSelected - Function to update selected menu state.
+ * @param {Dispatch>} setOpen - Function to update menu open state.
+ * @param {SetState} setAnchorEl - Function to update the anchor element state.
+ */
+
+export default function useMenuCollapse(menu, pathname, miniMenuOpened, setSelected, setOpen, setAnchorEl) {
+ useEffect(() => {
+ setOpen(false); // Close the menu initially
+
+ // Reset selection based on menu state
+ if (!miniMenuOpened) {
+ setSelected(null);
+ } else {
+ if (setAnchorEl) setAnchorEl(null);
+ }
+
+ // If menu has children, determine which should be opened
+ if (menu.children?.length) {
+ setParentOpenedMenu(menu.children, pathname, menu.id, setSelected, setOpen);
+ }
+
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [pathname, menu.children]);
+}
diff --git a/admin/vite/src/images/illustration/DumpingDoodle.jsx b/admin/vite/src/images/illustration/DumpingDoodle.jsx
new file mode 100644
index 0000000..6940f65
--- /dev/null
+++ b/admin/vite/src/images/illustration/DumpingDoodle.jsx
@@ -0,0 +1,25 @@
+// @mui
+import { useTheme } from '@mui/material/styles';
+
+/*************************** ILLUSTARION - DUMPING DOODLE ***************************/
+
+export default function DumpingDoodle() {
+ const theme = useTheme();
+
+ return (
+
+ );
+}
diff --git a/admin/vite/src/images/illustration/ReadingSideDoodle.jsx b/admin/vite/src/images/illustration/ReadingSideDoodle.jsx
new file mode 100644
index 0000000..b2dfd0d
--- /dev/null
+++ b/admin/vite/src/images/illustration/ReadingSideDoodle.jsx
@@ -0,0 +1,961 @@
+// @mui
+import { useTheme } from '@mui/material/styles';
+
+/*************************** ILLUSTARION - READING SIDE DOODLE ***************************/
+
+export default function ReadingSideDoodle() {
+ const theme = useTheme();
+
+ return (
+
+ );
+}
diff --git a/admin/vite/src/images/illustration/index.js b/admin/vite/src/images/illustration/index.js
new file mode 100644
index 0000000..529b010
--- /dev/null
+++ b/admin/vite/src/images/illustration/index.js
@@ -0,0 +1,2 @@
+export { default as DumpingDoodle } from './DumpingDoodle';
+export { default as ReadingSideDoodle } from './ReadingSideDoodle';
diff --git a/admin/vite/src/images/maintenance/Error404.jsx b/admin/vite/src/images/maintenance/Error404.jsx
new file mode 100644
index 0000000..b89410f
--- /dev/null
+++ b/admin/vite/src/images/maintenance/Error404.jsx
@@ -0,0 +1,223 @@
+// @mui
+import { useTheme } from '@mui/material/styles';
+
+// @project
+import { ThemeMode } from '@/config';
+
+/*************************** IMAGE - ERROR 404 ***************************/
+
+export default function Error404() {
+ const theme = useTheme();
+ const primaryColor = theme.palette.mode === ThemeMode.DARK ? theme.palette.primary.main : theme.palette.primary.dark;
+
+ return (
+
+ );
+}
diff --git a/admin/vite/src/images/maintenance/Error500.jsx b/admin/vite/src/images/maintenance/Error500.jsx
new file mode 100644
index 0000000..fe5fb60
--- /dev/null
+++ b/admin/vite/src/images/maintenance/Error500.jsx
@@ -0,0 +1,145 @@
+// @mui
+import { useTheme } from '@mui/material/styles';
+
+// @project
+import { ThemeMode } from '@/config';
+
+/*************************** IMAGE - ERROR 500 ***************************/
+
+export default function Error500() {
+ const theme = useTheme();
+ const primaryColor = theme.palette.mode === ThemeMode.DARK ? theme.palette.primary.main : theme.palette.primary.dark;
+
+ return (
+
+ );
+}
diff --git a/admin/vite/src/images/maintenance/Error500Server.jsx b/admin/vite/src/images/maintenance/Error500Server.jsx
new file mode 100644
index 0000000..8e6d330
--- /dev/null
+++ b/admin/vite/src/images/maintenance/Error500Server.jsx
@@ -0,0 +1,100 @@
+// @mui
+import { useTheme } from '@mui/material/styles';
+
+// @project
+import { ThemeMode } from '@/config';
+
+/*************************** IMAGE - ERROR 500 SERVER ***************************/
+
+export default function Error5001() {
+ const theme = useTheme();
+ const primaryColor = theme.palette.mode === ThemeMode.DARK ? theme.palette.primary.main : theme.palette.primary.dark;
+
+ return (
+
+ );
+}
diff --git a/admin/vite/src/index.css b/admin/vite/src/index.css
new file mode 100644
index 0000000..2ea65e4
--- /dev/null
+++ b/admin/vite/src/index.css
@@ -0,0 +1,4 @@
+/* Tap highlight */
+* {
+ -webkit-tap-highlight-color: transparent;
+}
\ No newline at end of file
diff --git a/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/NavCard.jsx b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/NavCard.jsx
new file mode 100644
index 0000000..c9de96b
--- /dev/null
+++ b/admin/vite/src/layouts/AdminLayout/Drawer/DrawerContent/NavCard.jsx
@@ -0,0 +1,67 @@
+import PropTypes from 'prop-types';
+
+// @mui
+import Avatar from '@mui/material/Avatar';
+import Button from '@mui/material/Button';
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+
+// @project
+import LogoSection from '@/components/logo';
+import MainCard from '@/components/MainCard';
+import RouterLink from '@/components/Link';
+import { AvatarSize } from '@/enum';
+
+// @assets
+import { IconBolt } from '@tabler/icons-react';
+
+/*************************** NAVIGATION CARD - DATA ***************************/
+
+const data = {
+ title: 'Upgrade Your Experience',
+ description: 'Take your experience to the next level with our premium offering. Buy now and enjoy more!',
+ icon:
+};
+
+/*************************** NAVIGATION CARD - CONTENT ***************************/
+
+function CardContent({ title, description, icon }) {
+ return (
+
+
+
+
+
+ {import.meta.env.VITE_APP_VERSION}
+
+
+ {title}
+
+ {description}
+
+
+
+
+ );
+}
+
+/*************************** 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)}>
+
+
+ }
+ onClick={handleInnerActionClick}
+ >
+ All Notification
+
+
+ {({ 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}
+
+ ))}
+
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
+ }
+ onClick={logoutAccount}
+ >
+ Logout
+
+
+
+
+
+
+
+ )}
+
+ >
+ );
+}
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) => (
+
+ ))}
+
+
+ >
+ );
+}
+
+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 (
+
+ );
+}
+
+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) => (
+ }
+ >
+ {type === SocialTypes.VERTICAL && (
+
+ {item.title}
+
+ )}
+
+ ))}
+
+ );
+}
+
+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 (
+
+ {value === index && {children}}
+
+ );
+}
+
+/*************************** 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 @@
-
+ )}
-
-
-
-
-
-
+
+
+
+
+
+
+ {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 (
-
-
-
+
+
);
}
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) => (