diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..34d65be
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,11 @@
+# Build directories
+build/*
+dist/*
+public/*
+**/out/*
+**/.next/*
+**/node_modules/*
+
+yarn.lock
+package-lock.json
+jsconfig.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..3e97f62
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,106 @@
+### v3.0.0
+
+###### Apr 3, 2025
+
+- Support MUI v7.
+- Support React v19.
+- Support Eslint v9.
+- Upgrade and restructure the directory.
+- Upgrade some dependencies to the latest versions.
+
+---
+
+### v2.0.0
+
+###### Aug 24, 2024
+
+- [New] Migrate to typescript.
+- Upgrade and restructure the directory.
+- Upgrade some dependencies to the latest versions.
+
+---
+
+### v1.8.0
+
+###### Wed 11, 2023
+
+- [New] Migrate to vite.js.
+- Upgrade and restructure the directory.
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.7.0
+
+###### Feb 21, 2023
+
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.6.0
+
+###### Oct 17, 2022
+
+- Upgrade and restructure the directory.
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.5.0
+
+###### Jul 04, 2022
+
+- Support react 18.
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.4.0
+
+###### Apr 12, 2022
+
+- Update `src/components`.
+- Update `src/sections`.
+- Update `src/pages`.
+- Update `src/layouts`.
+- Update `src/theme`.
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.3.0
+
+###### Feb 21, 2022
+
+- Support react-script v5.0.0
+- Source code improvement
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.2.0
+
+###### Sep 18, 2021
+
+- Support MIU v5.0.0 official release
+- Upgrade some dependencies to the latest versions
+- Update `src/theme/typography.js`
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.1.0
+
+###### Jul 23, 2021
+
+- Support MUI v5.0.0-beta.1
+- Upgrade some dependencies to the latest versions
+
+---
+
+### v1.0.0
+
+###### Jun 28, 2021
+
+Initial release.
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000..fe7c17e
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,194 @@
+import globals from 'globals';
+import eslintJs from '@eslint/js';
+import eslintTs from 'typescript-eslint';
+import reactPlugin from 'eslint-plugin-react';
+import importPlugin from 'eslint-plugin-import';
+import reactHooksPlugin from 'eslint-plugin-react-hooks';
+import perfectionistPlugin from 'eslint-plugin-perfectionist';
+import unusedImportsPlugin from 'eslint-plugin-unused-imports';
+
+// ----------------------------------------------------------------------
+
+/**
+ * @rules common
+ * from 'react', 'eslint-plugin-react-hooks'...
+ */
+const commonRules = () => ({
+ ...reactHooksPlugin.configs.recommended.rules,
+ 'func-names': 1,
+ 'no-bitwise': 2,
+ 'no-unused-vars': 0,
+ 'object-shorthand': 1,
+ 'no-useless-rename': 1,
+ 'default-case-last': 2,
+ 'consistent-return': 2,
+ 'no-constant-condition': 1,
+ 'default-case': [2, { commentPattern: '^no default$' }],
+ 'lines-around-directive': [2, { before: 'always', after: 'always' }],
+ 'arrow-body-style': [2, 'as-needed', { requireReturnForObjectLiteral: false }],
+ // react
+ 'react/jsx-key': 0,
+ 'react/prop-types': 0,
+ 'react/display-name': 0,
+ 'react/no-children-prop': 0,
+ 'react/jsx-boolean-value': 2,
+ 'react/self-closing-comp': 2,
+ 'react/react-in-jsx-scope': 0,
+ 'react/jsx-no-useless-fragment': [1, { allowExpressions: true }],
+ 'react/jsx-curly-brace-presence': [2, { props: 'never', children: 'never' }],
+ // typescript
+ '@typescript-eslint/no-shadow': 2,
+ '@typescript-eslint/no-explicit-any': 0,
+ '@typescript-eslint/no-empty-object-type': 0,
+ '@typescript-eslint/consistent-type-imports': 1,
+ '@typescript-eslint/no-unused-vars': [1, { args: 'none' }],
+});
+
+/**
+ * @rules import
+ * from 'eslint-plugin-import'.
+ */
+const importRules = () => ({
+ ...importPlugin.configs.recommended.rules,
+ 'import/named': 0,
+ 'import/export': 0,
+ 'import/default': 0,
+ 'import/namespace': 0,
+ 'import/no-named-as-default': 0,
+ 'import/newline-after-import': 2,
+ 'import/no-named-as-default-member': 0,
+ 'import/no-cycle': [
+ 0, // disabled if slow
+ { maxDepth: '∞', ignoreExternal: false, allowUnsafeDynamicCyclicDependency: false },
+ ],
+});
+
+/**
+ * @rules unused imports
+ * from 'eslint-plugin-unused-imports'.
+ */
+const unusedImportsRules = () => ({
+ 'unused-imports/no-unused-imports': 1,
+ 'unused-imports/no-unused-vars': [
+ 0,
+ { vars: 'all', varsIgnorePattern: '^_', args: 'after-used', argsIgnorePattern: '^_' },
+ ],
+});
+
+/**
+ * @rules sort or imports/exports
+ * from 'eslint-plugin-perfectionist'.
+ */
+const sortImportsRules = () => {
+ const customGroups = {
+ mui: ['custom-mui'],
+ auth: ['custom-auth'],
+ hooks: ['custom-hooks'],
+ utils: ['custom-utils'],
+ types: ['custom-types'],
+ routes: ['custom-routes'],
+ sections: ['custom-sections'],
+ components: ['custom-components'],
+ };
+
+ return {
+ 'perfectionist/sort-named-imports': [1, { type: 'line-length', order: 'asc' }],
+ 'perfectionist/sort-named-exports': [1, { type: 'line-length', order: 'asc' }],
+ 'perfectionist/sort-exports': [
+ 1,
+ {
+ order: 'asc',
+ type: 'line-length',
+ groupKind: 'values-first',
+ },
+ ],
+ 'perfectionist/sort-imports': [
+ 2,
+ {
+ order: 'asc',
+ ignoreCase: true,
+ type: 'line-length',
+ environment: 'node',
+ maxLineLength: undefined,
+ newlinesBetween: 'always',
+ internalPattern: ['^src/.+'],
+ groups: [
+ 'style',
+ 'side-effect',
+ 'type',
+ ['builtin', 'external'],
+ customGroups.mui,
+ customGroups.routes,
+ customGroups.hooks,
+ customGroups.utils,
+ 'internal',
+ customGroups.components,
+ customGroups.sections,
+ customGroups.auth,
+ customGroups.types,
+ ['parent', 'sibling', 'index'],
+ ['parent-type', 'sibling-type', 'index-type'],
+ 'object',
+ 'unknown',
+ ],
+ customGroups: {
+ value: {
+ [customGroups.mui]: ['^@mui/.+'],
+ [customGroups.auth]: ['^src/auth/.+'],
+ [customGroups.hooks]: ['^src/hooks/.+'],
+ [customGroups.utils]: ['^src/utils/.+'],
+ [customGroups.types]: ['^src/types/.+'],
+ [customGroups.routes]: ['^src/routes/.+'],
+ [customGroups.sections]: ['^src/sections/.+'],
+ [customGroups.components]: ['^src/components/.+'],
+ },
+ },
+ },
+ ],
+ };
+};
+
+/**
+ * Custom ESLint configuration.
+ */
+export const customConfig = {
+ plugins: {
+ 'react-hooks': reactHooksPlugin,
+ 'unused-imports': unusedImportsPlugin,
+ perfectionist: perfectionistPlugin,
+ import: importPlugin,
+ },
+ settings: {
+ // https://www.npmjs.com/package/eslint-import-resolver-typescript
+ ...importPlugin.configs.typescript.settings,
+ 'import/resolver': {
+ ...importPlugin.configs.typescript.settings['import/resolver'],
+ typescript: {
+ project: './tsconfig.json',
+ },
+ },
+ },
+ rules: {
+ ...commonRules(),
+ ...importRules(),
+ ...unusedImportsRules(),
+ ...sortImportsRules(),
+ },
+};
+
+// ----------------------------------------------------------------------
+
+export default [
+ { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] },
+ { ignores: ['*', '!src/', '!eslint.config.*'] },
+ {
+ languageOptions: {
+ globals: { ...globals.browser, ...globals.node },
+ },
+ settings: { react: { version: 'detect' } },
+ },
+ eslintJs.configs.recommended,
+ ...eslintTs.configs.recommended,
+ reactPlugin.configs.flat.recommended,
+ customConfig,
+];
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..efb687c
--- /dev/null
+++ b/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ Minimal UI Kit
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..88c6fd9
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6851 @@
+{
+ "name": "@minimal/material-kit-react",
+ "version": "3.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@minimal/material-kit-react",
+ "version": "3.0.0",
+ "dependencies": {
+ "@emotion/cache": "^11.14.0",
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.0",
+ "@fontsource-variable/dm-sans": "^5.2.5",
+ "@fontsource/barlow": "^5.2.5",
+ "@iconify/react": "^5.2.1",
+ "@mui/lab": "^7.0.0-beta.10",
+ "@mui/material": "^7.0.1",
+ "apexcharts": "^4.5.0",
+ "dayjs": "^1.11.13",
+ "es-toolkit": "^1.34.1",
+ "minimal-shared": "^1.0.7",
+ "react": "^19.1.0",
+ "react-apexcharts": "^1.7.0",
+ "react-dom": "^19.1.0",
+ "react-router-dom": "^7.4.1",
+ "simplebar-react": "^3.3.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.23.0",
+ "@types/node": "^22.14.0",
+ "@types/react": "^19.1.0",
+ "@types/react-dom": "^19.1.1",
+ "@typescript-eslint/parser": "^8.29.0",
+ "@vitejs/plugin-react-swc": "^3.8.1",
+ "eslint": "^9.23.0",
+ "eslint-import-resolver-typescript": "^4.3.1",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-perfectionist": "^4.11.0",
+ "eslint-plugin-react": "^7.37.4",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-unused-imports": "^4.1.4",
+ "globals": "^16.0.0",
+ "prettier": "^3.5.3",
+ "typescript": "^5.8.2",
+ "typescript-eslint": "^8.29.0",
+ "vite": "^6.2.5",
+ "vite-plugin-checker": "^0.9.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "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==",
+ "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",
+ "jsesc": "^3.0.2"
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "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==",
+ "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==",
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.0"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "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==",
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0"
+ },
+ "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==",
+ "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"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
+ "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.0.1",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "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/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/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.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz",
+ "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
+ "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.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz",
+ "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz",
+ "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz",
+ "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz",
+ "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz",
+ "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz",
+ "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz",
+ "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz",
+ "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz",
+ "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz",
+ "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz",
+ "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz",
+ "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz",
+ "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz",
+ "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz",
+ "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz",
+ "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz",
+ "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz",
+ "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz",
+ "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz",
+ "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz",
+ "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz",
+ "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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==",
+ "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/config-array": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
+ "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
+ "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-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/config-array/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/@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==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "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==",
+ "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/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@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/eslintrc/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/@eslint/js": {
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz",
+ "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "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.2.8",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz",
+ "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.13.0",
+ "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/@fontsource-variable/dm-sans": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/dm-sans/-/dm-sans-5.2.5.tgz",
+ "integrity": "sha512-ynWdb1Ncn5ywUOE6OkTsvgjkiZKj+xM/GS2iVE47MBvS3AlfOSyOy3xynfkQsM3ngaxdCamT/06hZGAgPmao0A==",
+ "license": "OFL-1.1",
+ "funding": {
+ "url": "https://github.com/sponsors/ayuhito"
+ }
+ },
+ "node_modules/@fontsource/barlow": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/@fontsource/barlow/-/barlow-5.2.5.tgz",
+ "integrity": "sha512-p+2XXEM7v85kbn0Dh8g0YLMjTCDiRCAi9nHik6w/2owZ9CkT1yYGGgaUMshJRqykh7efv1gE0QxAkOhZHd8tEg==",
+ "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.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
+ "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@iconify/react": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@iconify/react/-/react-5.2.1.tgz",
+ "integrity": "sha512-37GDR3fYDZmnmUn9RagyaX+zca24jfVOMY8E1IXTqJuE8pxNtN51KWPQe3VODOWvuUurq7q9uUu3CFrpqj5Iqg==",
+ "license": "MIT",
+ "dependencies": {
+ "@iconify/types": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/cyberalien"
+ },
+ "peerDependencies": {
+ "react": ">=16"
+ }
+ },
+ "node_modules/@iconify/types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@mui/core-downloads-tracker": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.1.tgz",
+ "integrity": "sha512-T5DNVnSD9pMbj4Jk/Uphz+yvj9dfpl2+EqsOuJtG12HxEihNG5pd3qzX5yM1Id4dDwKRvM3dPVcxyzavTFhJeA==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@mui/system": "^7.0.1",
+ "@mui/types": "^7.4.0",
+ "@mui/utils": "^7.0.1",
+ "clsx": "^2.1.1",
+ "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",
+ "@mui/material": "^7.0.1",
+ "@mui/material-pigment-css": "^7.0.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"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@mui/material-pigment-css": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/material": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.0.1.tgz",
+ "integrity": "sha512-tQwjIIsn/UUSCHoCIQVkANuLua67h7Ro9M9gIHoGWaFbJFuF6cSO4Oda2olDVqIs4SWG+PaDChuu6SngxsaoyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@mui/core-downloads-tracker": "^7.0.1",
+ "@mui/system": "^7.0.1",
+ "@mui/types": "^7.4.0",
+ "@mui/utils": "^7.0.1",
+ "@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.0.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.0.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"
+ },
+ "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.0.1",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.1.tgz",
+ "integrity": "sha512-1kQ7REYjjzDukuMfTbAjm3pLEhD7gUMC2bWhg9VD6f6sHzyokKzX0XHzlr3IdzNWBjPytGkzHpPIRQrUOoPLCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@mui/utils": "^7.0.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.0.1",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.1.tgz",
+ "integrity": "sha512-BeGe4xZmF7tESKhmctYrL54Kl25kGHPKVdZYM5qj5Xz76WM/poY+d8EmAqUesT6k2rbJWPp2gtOAXXinNCGunQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@emotion/cache": "^11.13.5",
+ "@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.0.1",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.0.1.tgz",
+ "integrity": "sha512-pK+puz0hRPHEKGlcPd80mKYD3jpyi0uVIwWffox1WZgPTQMw2dCKLcD+9ndMDJADnrKzmKlpoH756PPFh2UvWA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@mui/private-theming": "^7.0.1",
+ "@mui/styled-engine": "^7.0.1",
+ "@mui/types": "^7.4.0",
+ "@mui/utils": "^7.0.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.0",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.0.tgz",
+ "integrity": "sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/utils": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.0.1.tgz",
+ "integrity": "sha512-SJKrrebNpmK9rJCnVL29nGPhPXQYtBZmb7Dsp0f58uIUhQfAKcBXHE4Kjs06SX4CwqeCuwEVgcHY+MgAO6XQ/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.26.10",
+ "@mui/types": "^7.4.0",
+ "@types/prop-types": "^15.7.14",
+ "clsx": "^2.1.1",
+ "prop-types": "^15.8.1",
+ "react-is": "^19.0.0"
+ },
+ "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/@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==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.0",
+ "@emnapi/runtime": "^1.4.0",
+ "@tybys/wasm-util": "^0.9.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz",
+ "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz",
+ "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz",
+ "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz",
+ "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz",
+ "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz",
+ "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz",
+ "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz",
+ "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz",
+ "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz",
+ "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz",
+ "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz",
+ "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz",
+ "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz",
+ "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz",
+ "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz",
+ "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz",
+ "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz",
+ "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz",
+ "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz",
+ "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rtsao/scc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@svgdotjs/svg.draggable.js": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz",
+ "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ }
+ },
+ "node_modules/@svgdotjs/svg.filter.js": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz",
+ "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==",
+ "license": "MIT",
+ "dependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/@svgdotjs/svg.js": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz",
+ "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Fuzzyma"
+ }
+ },
+ "node_modules/@svgdotjs/svg.resize.js": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz",
+ "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18"
+ },
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4",
+ "@svgdotjs/svg.select.js": "^4.0.1"
+ }
+ },
+ "node_modules/@svgdotjs/svg.select.js": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz",
+ "integrity": "sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18"
+ },
+ "peerDependencies": {
+ "@svgdotjs/svg.js": "^3.2.4"
+ }
+ },
+ "node_modules/@swc/core": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.16.tgz",
+ "integrity": "sha512-wgjrJqVUss8Lxqilg0vkiE0tkEKU3mZkoybQM1Ehy+PKWwwB6lFAwKi20cAEFlSSWo8jFR8hRo19ZELAoLDowg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.21"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.11.16",
+ "@swc/core-darwin-x64": "1.11.16",
+ "@swc/core-linux-arm-gnueabihf": "1.11.16",
+ "@swc/core-linux-arm64-gnu": "1.11.16",
+ "@swc/core-linux-arm64-musl": "1.11.16",
+ "@swc/core-linux-x64-gnu": "1.11.16",
+ "@swc/core-linux-x64-musl": "1.11.16",
+ "@swc/core-win32-arm64-msvc": "1.11.16",
+ "@swc/core-win32-ia32-msvc": "1.11.16",
+ "@swc/core-win32-x64-msvc": "1.11.16"
+ },
+ "peerDependencies": {
+ "@swc/helpers": "*"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.16.tgz",
+ "integrity": "sha512-l6uWMU+MUdfLHCl3dJgtVEdsUHPskoA4BSu0L1hh9SGBwPZ8xeOz8iLIqZM27lTuXxL4KsYH6GQR/OdQ/vhLtg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.16.tgz",
+ "integrity": "sha512-TH0IW8Ao1WZ4ARFHIh29dAQHYBEl4YnP74n++rjppmlCjY+8v3s5nXMA7IqxO3b5LVHyggWtU4+46DXTyMJM7g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.16.tgz",
+ "integrity": "sha512-2IxD9t09oNZrbv37p4cJ9cTHMUAK6qNiShi9s2FJ9LcqSnZSN4iS4hvaaX6KZuG54d58vWnMU7yycjkdOTQcMg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.16.tgz",
+ "integrity": "sha512-AYkN23DOiPh1bf3XBf/xzZQDKSsgZTxlbyTyUIhprLJpAAAT0ZCGAUcS5mHqydk0nWQ13ABUymodvHoroutNzw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.16.tgz",
+ "integrity": "sha512-n/nWXDRCIhM51dDGELfBcTMNnCiFatE7LDvsbYxb7DJt1HGjaCNvHHCKURb/apJTh/YNtWfgFap9dbsTgw8yPA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.16.tgz",
+ "integrity": "sha512-xr182YQrF47n7Awxj+/ruI21bYw+xO/B26KFVnb+i3ezF9NOhqoqTX+33RL1ZLA/uFTq8ksPZO/y+ZVS/odtQA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.16.tgz",
+ "integrity": "sha512-k2JBfiwWfXCIKrBRjFO9/vEdLSYq0QLJ+iNSLdfrejZ/aENNkbEg8O7O2GKUSb30RBacn6k8HMfJrcPLFiEyCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.16.tgz",
+ "integrity": "sha512-taOb5U+abyEhQgex+hr6cI48BoqSvSdfmdirWcxprIEUBHCxa1dSriVwnJRAJOFI9T+5BEz88by6rgbB9MjbHA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.16.tgz",
+ "integrity": "sha512-b7yYggM9LBDiMY+XUt5kYWvs5sn0U3PXSOGvF3CbLufD/N/YQiDcYON2N3lrWHYL8aYnwbuZl45ojmQHSQPcdA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.16.tgz",
+ "integrity": "sha512-/ibq/YDc3B5AROkpOKPGxVkSyCKOg+ml8k11RxrW7FAPy6a9y5y9KPcWIqV74Ahq4RuaMNslTQqHWAGSm0xJsQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swc/types": {
+ "version": "0.1.21",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.21.tgz",
+ "integrity": "sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/counter": "^0.1.3"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.14.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz",
+ "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==",
+ "dev": true,
+ "license": "MIT",
+ "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",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+ "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==",
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "19.1.1",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.1.tgz",
+ "integrity": "sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.0.0"
+ }
+ },
+ "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/@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==",
+ "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",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "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==",
+ "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",
+ "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": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.29.0",
+ "@typescript-eslint/visitor-keys": "8.29.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/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.29.0",
+ "@typescript-eslint/utils": "8.29.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.29.0",
+ "@typescript-eslint/visitor-keys": "8.29.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"
+ },
+ "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 <5.9.0"
+ }
+ },
+ "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==",
+ "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"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.29.0",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.3.3.tgz",
+ "integrity": "sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-x64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.3.3.tgz",
+ "integrity": "sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.3.3.tgz",
+ "integrity": "sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.3.3.tgz",
+ "integrity": "sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.3.3.tgz",
+ "integrity": "sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.3.3.tgz",
+ "integrity": "sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.3.3.tgz",
+ "integrity": "sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.3.3.tgz",
+ "integrity": "sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.3.3.tgz",
+ "integrity": "sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.3.3.tgz",
+ "integrity": "sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.3.3.tgz",
+ "integrity": "sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.3.3.tgz",
+ "integrity": "sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^0.2.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.3.3.tgz",
+ "integrity": "sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.3.3.tgz",
+ "integrity": "sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.3.3.tgz",
+ "integrity": "sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@vitejs/plugin-react-swc": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.1.tgz",
+ "integrity": "sha512-aEUPCckHDcFyxpwFm0AIkbtv6PpUp3xTb9wYGFjtABynXjCYKkWoxX0AOK9NT9XCrdk6mBBUOeHQS+RKdcNO1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@swc/core": "^1.11.11"
+ },
+ "peerDependencies": {
+ "vite": "^4 || ^5 || ^6"
+ }
+ },
+ "node_modules/@yr/monotone-cubic-spline": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz",
+ "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==",
+ "license": "MIT"
+ },
+ "node_modules/acorn": {
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/apexcharts": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.5.0.tgz",
+ "integrity": "sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@svgdotjs/svg.draggable.js": "^3.0.4",
+ "@svgdotjs/svg.filter.js": "^3.0.8",
+ "@svgdotjs/svg.js": "^3.2.4",
+ "@svgdotjs/svg.resize.js": "^2.0.2",
+ "@svgdotjs/svg.select.js": "^4.0.1",
+ "@yr/monotone-cubic-spline": "^1.0.3"
+ }
+ },
+ "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/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.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+ "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "es-shim-unscopables": "^1.1.0"
+ },
+ "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/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/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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/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/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
+ "node_modules/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.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/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "license": "MIT"
+ },
+ "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==",
+ "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/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/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.9",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+ "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+ "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.3",
+ "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-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-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-regex": "^1.2.1",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.0",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.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.18"
+ },
+ "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/es-toolkit": {
+ "version": "1.34.1",
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.34.1.tgz",
+ "integrity": "sha512-OA6cd94fJV9bm8dWhIySkWq4xV+rAQnBZUr2dnpXam0QJ8c+hurLbKA8/QooL9Mx4WCAxvIDsiEkid5KPQ5xgQ==",
+ "license": "MIT",
+ "workspaces": [
+ "docs",
+ "benchmarks"
+ ]
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz",
+ "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.2",
+ "@esbuild/android-arm": "0.25.2",
+ "@esbuild/android-arm64": "0.25.2",
+ "@esbuild/android-x64": "0.25.2",
+ "@esbuild/darwin-arm64": "0.25.2",
+ "@esbuild/darwin-x64": "0.25.2",
+ "@esbuild/freebsd-arm64": "0.25.2",
+ "@esbuild/freebsd-x64": "0.25.2",
+ "@esbuild/linux-arm": "0.25.2",
+ "@esbuild/linux-arm64": "0.25.2",
+ "@esbuild/linux-ia32": "0.25.2",
+ "@esbuild/linux-loong64": "0.25.2",
+ "@esbuild/linux-mips64el": "0.25.2",
+ "@esbuild/linux-ppc64": "0.25.2",
+ "@esbuild/linux-riscv64": "0.25.2",
+ "@esbuild/linux-s390x": "0.25.2",
+ "@esbuild/linux-x64": "0.25.2",
+ "@esbuild/netbsd-arm64": "0.25.2",
+ "@esbuild/netbsd-x64": "0.25.2",
+ "@esbuild/openbsd-arm64": "0.25.2",
+ "@esbuild/openbsd-x64": "0.25.2",
+ "@esbuild/sunos-x64": "0.25.2",
+ "@esbuild/win32-arm64": "0.25.2",
+ "@esbuild/win32-ia32": "0.25.2",
+ "@esbuild/win32-x64": "0.25.2"
+ }
+ },
+ "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.23.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz",
+ "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.19.2",
+ "@eslint/config-helpers": "^0.2.0",
+ "@eslint/core": "^0.12.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.23.0",
+ "@eslint/plugin-kit": "^0.2.7",
+ "@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.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.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-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.1.tgz",
+ "integrity": "sha512-/dR9YMomeBlvfuvX5q0C3Y/2PHC9OCRdT2ijFwdfq/4Bq+4m5/lqstEp9k3P6ocha1pCbhoY9fkwVYLmOqR0VQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "get-tsconfig": "^4.10.0",
+ "is-bun-module": "^2.0.0",
+ "stable-hash": "^0.0.5",
+ "tinyglobby": "^0.2.12",
+ "unrs-resolver": "^1.3.3"
+ },
+ "engines": {
+ "node": "^16.17.0 || >=18.6.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-import-resolver-typescript"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "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==",
+ "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",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.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",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/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/eslint-plugin-import/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/eslint-plugin-perfectionist": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.11.0.tgz",
+ "integrity": "sha512-5s+ehXydnLPQpLDj5mJ0CnYj2fQe6v6gKA3tS+FZVBLzwMOh8skH+l+1Gni08rG0SdEcNhJyjQp/mEkDYK8czw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "^8.29.0",
+ "@typescript-eslint/utils": "^8.29.0",
+ "natural-orderby": "^5.0.0"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.45.0"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz",
+ "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==",
+ "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.8",
+ "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/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-react/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/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-plugin-react/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/eslint-plugin-unused-imports": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz",
+ "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0",
+ "eslint": "^9.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ }
+ }
+ },
+ "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==",
+ "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.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "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/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/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/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "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-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/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.4.3",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
+ "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+ "dev": true,
+ "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/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "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/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.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/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/get-tsconfig": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
+ "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz",
+ "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==",
+ "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/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/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/has-bigints": {
+ "version": "1.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/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-bun-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
+ "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.7.1"
+ }
+ },
+ "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-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-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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/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": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "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/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/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/minimal-shared": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/minimal-shared/-/minimal-shared-1.0.7.tgz",
+ "integrity": "sha512-KP+8dQw43lTkE1vCqjV4dakapCP5sk5trFAo8d2kpJYBZQc3DrGoE1Q9uwKe0hDtbgSwE4zmVYdgmsatF9/JZw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-toolkit": "^1.32.0"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/natural-orderby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz",
+ "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
+ "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^4.0.0",
+ "unicorn-magic": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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/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": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.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.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "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.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.8",
+ "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.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "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/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/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-apexcharts": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.7.0.tgz",
+ "integrity": "sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "apexcharts": ">=4.0.0",
+ "react": ">=0.13"
+ }
+ },
+ "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-is": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz",
+ "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==",
+ "license": "MIT"
+ },
+ "node_modules/react-router": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.1.tgz",
+ "integrity": "sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/cookie": "^0.6.0",
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0",
+ "turbo-stream": "2.4.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.1.tgz",
+ "integrity": "sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.4.1"
+ },
+ "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/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "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/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",
+ "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/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/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.39.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz",
+ "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.7"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.39.0",
+ "@rollup/rollup-android-arm64": "4.39.0",
+ "@rollup/rollup-darwin-arm64": "4.39.0",
+ "@rollup/rollup-darwin-x64": "4.39.0",
+ "@rollup/rollup-freebsd-arm64": "4.39.0",
+ "@rollup/rollup-freebsd-x64": "4.39.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.39.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.39.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.39.0",
+ "@rollup/rollup-linux-arm64-musl": "4.39.0",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.39.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.39.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.39.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.39.0",
+ "@rollup/rollup-linux-x64-gnu": "4.39.0",
+ "@rollup/rollup-linux-x64-musl": "4.39.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.39.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.39.0",
+ "@rollup/rollup-win32-x64-msvc": "4.39.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.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": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.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/simplebar-core": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.0.tgz",
+ "integrity": "sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^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==",
+ "license": "MIT",
+ "dependencies": {
+ "simplebar-core": "^1.3.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "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==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stable-hash": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
+ "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "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.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "license": "MIT"
+ },
+ "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/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.3",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/turbo-stream": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
+ "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
+ "license": "ISC"
+ },
+ "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/typescript": {
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
+ "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz",
+ "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.29.0",
+ "@typescript-eslint/parser": "8.29.0",
+ "@typescript-eslint/utils": "8.29.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "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/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"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unrs-resolver": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.3.3.tgz",
+ "integrity": "sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/JounQin"
+ },
+ "optionalDependencies": {
+ "@unrs/resolver-binding-darwin-arm64": "1.3.3",
+ "@unrs/resolver-binding-darwin-x64": "1.3.3",
+ "@unrs/resolver-binding-freebsd-x64": "1.3.3",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.3.3",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.3.3",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.3.3",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.3.3",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.3.3",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.3.3",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.3.3",
+ "@unrs/resolver-binding-linux-x64-musl": "1.3.3",
+ "@unrs/resolver-binding-wasm32-wasi": "1.3.3",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.3.3",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.3.3",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.3.3"
+ }
+ },
+ "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/vite": {
+ "version": "6.2.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
+ "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "postcss": "^8.5.3",
+ "rollup": "^4.30.1"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "jiti": ">=1.21.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "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-plugin-checker": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.9.1.tgz",
+ "integrity": "sha512-neH3CSNWdkZ+zi+WPt/0y5+IO2I0UAI0NX6MaXqU/KxN1Lz6np/7IooRB6VVAMBa4nigqm1GRF6qNa4+EL5jDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "chokidar": "^4.0.3",
+ "npm-run-path": "^6.0.0",
+ "picocolors": "^1.1.1",
+ "picomatch": "^4.0.2",
+ "strip-ansi": "^7.1.0",
+ "tiny-invariant": "^1.3.3",
+ "tinyglobby": "^0.2.12",
+ "vscode-uri": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "peerDependencies": {
+ "@biomejs/biome": ">=1.7",
+ "eslint": ">=7",
+ "meow": "^13.2.0",
+ "optionator": "^0.9.4",
+ "stylelint": ">=16",
+ "typescript": "*",
+ "vite": ">=2.0.0",
+ "vls": "*",
+ "vti": "*",
+ "vue-tsc": "~2.2.2"
+ },
+ "peerDependenciesMeta": {
+ "@biomejs/biome": {
+ "optional": true
+ },
+ "eslint": {
+ "optional": true
+ },
+ "meow": {
+ "optional": true
+ },
+ "optionator": {
+ "optional": true
+ },
+ "stylelint": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ },
+ "vls": {
+ "optional": true
+ },
+ "vti": {
+ "optional": true
+ },
+ "vue-tsc": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
+ "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.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/yaml": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
+ "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "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/package.json b/package.json
new file mode 100644
index 0000000..a4b79e4
--- /dev/null
+++ b/package.json
@@ -0,0 +1,70 @@
+{
+ "name": "@minimal/material-kit-react",
+ "author": "minimals.cc",
+ "licence": "MIT",
+ "version": "3.0.0",
+ "private": false,
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "start": "vite preview",
+ "build": "tsc && vite build",
+ "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"",
+ "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"",
+ "lint:print": "npx eslint --print-config eslint.config.mjs > eslint-show-config.json",
+ "fm:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"",
+ "fm:fix": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"",
+ "fix:all": "npm run lint:fix && npm run fm:fix",
+ "clean": "rm -rf node_modules .next out dist build",
+ "re:dev": "yarn clean && yarn install && yarn dev",
+ "re:build": "yarn clean && yarn install && yarn build",
+ "re:build-npm": "npm run clean && npm install && npm run build",
+ "tsc:dev": "yarn dev & yarn tsc:watch",
+ "tsc:watch": "tsc --noEmit --watch",
+ "tsc:print": "npx tsc --showConfig"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "packageManager": "yarn@1.22.22",
+ "dependencies": {
+ "@emotion/cache": "^11.14.0",
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.0",
+ "@fontsource-variable/dm-sans": "^5.2.5",
+ "@fontsource/barlow": "^5.2.5",
+ "@iconify/react": "^5.2.1",
+ "@mui/lab": "^7.0.0-beta.10",
+ "@mui/material": "^7.0.1",
+ "apexcharts": "^4.5.0",
+ "dayjs": "^1.11.13",
+ "es-toolkit": "^1.34.1",
+ "minimal-shared": "^1.0.7",
+ "react": "^19.1.0",
+ "react-apexcharts": "^1.7.0",
+ "react-dom": "^19.1.0",
+ "react-router-dom": "^7.4.1",
+ "simplebar-react": "^3.3.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.23.0",
+ "@types/node": "^22.14.0",
+ "@types/react": "^19.1.0",
+ "@types/react-dom": "^19.1.1",
+ "@typescript-eslint/parser": "^8.29.0",
+ "@vitejs/plugin-react-swc": "^3.8.1",
+ "eslint": "^9.23.0",
+ "eslint-import-resolver-typescript": "^4.3.1",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-perfectionist": "^4.11.0",
+ "eslint-plugin-react": "^7.37.4",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-unused-imports": "^4.1.4",
+ "globals": "^16.0.0",
+ "prettier": "^3.5.3",
+ "typescript": "^5.8.2",
+ "typescript-eslint": "^8.29.0",
+ "vite": "^6.2.5",
+ "vite-plugin-checker": "^0.9.1"
+ }
+}
diff --git a/prettier.config.mjs b/prettier.config.mjs
new file mode 100644
index 0000000..a3b4e4e
--- /dev/null
+++ b/prettier.config.mjs
@@ -0,0 +1,15 @@
+/**
+ * @type {import("prettier").Config}
+ * Need to restart IDE when changing configuration
+ * Open the command palette (Ctrl + Shift + P) and execute the command > Reload Window.
+ */
+const config = {
+ semi: true,
+ tabWidth: 2,
+ endOfLine: 'lf',
+ printWidth: 100,
+ singleQuote: true,
+ trailingComma: 'es5',
+};
+
+export default config;
diff --git a/public/assets/background/overlay.jpg b/public/assets/background/overlay.jpg
new file mode 100644
index 0000000..e6e7a32
Binary files /dev/null and b/public/assets/background/overlay.jpg differ
diff --git a/public/assets/background/shape-square.svg b/public/assets/background/shape-square.svg
new file mode 100644
index 0000000..b62e430
--- /dev/null
+++ b/public/assets/background/shape-square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/flags/ic-flag-de.svg b/public/assets/icons/flags/ic-flag-de.svg
new file mode 100644
index 0000000..c361707
--- /dev/null
+++ b/public/assets/icons/flags/ic-flag-de.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/flags/ic-flag-en.svg b/public/assets/icons/flags/ic-flag-en.svg
new file mode 100644
index 0000000..485ad5c
--- /dev/null
+++ b/public/assets/icons/flags/ic-flag-en.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/flags/ic-flag-fr.svg b/public/assets/icons/flags/ic-flag-fr.svg
new file mode 100644
index 0000000..2ae63a1
--- /dev/null
+++ b/public/assets/icons/flags/ic-flag-fr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/glass/ic-glass-bag.svg b/public/assets/icons/glass/ic-glass-bag.svg
new file mode 100644
index 0000000..5875b6f
--- /dev/null
+++ b/public/assets/icons/glass/ic-glass-bag.svg
@@ -0,0 +1,30 @@
+
diff --git a/public/assets/icons/glass/ic-glass-buy.svg b/public/assets/icons/glass/ic-glass-buy.svg
new file mode 100644
index 0000000..07577a6
--- /dev/null
+++ b/public/assets/icons/glass/ic-glass-buy.svg
@@ -0,0 +1,47 @@
+
diff --git a/public/assets/icons/glass/ic-glass-message.svg b/public/assets/icons/glass/ic-glass-message.svg
new file mode 100644
index 0000000..e82d8d8
--- /dev/null
+++ b/public/assets/icons/glass/ic-glass-message.svg
@@ -0,0 +1,30 @@
+
diff --git a/public/assets/icons/glass/ic-glass-users.svg b/public/assets/icons/glass/ic-glass-users.svg
new file mode 100644
index 0000000..d69a579
--- /dev/null
+++ b/public/assets/icons/glass/ic-glass-users.svg
@@ -0,0 +1,39 @@
+
diff --git a/public/assets/icons/navbar/ic-analytics.svg b/public/assets/icons/navbar/ic-analytics.svg
new file mode 100644
index 0000000..2cf74af
--- /dev/null
+++ b/public/assets/icons/navbar/ic-analytics.svg
@@ -0,0 +1,8 @@
+
diff --git a/public/assets/icons/navbar/ic-blog.svg b/public/assets/icons/navbar/ic-blog.svg
new file mode 100644
index 0000000..6f8f006
--- /dev/null
+++ b/public/assets/icons/navbar/ic-blog.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/assets/icons/navbar/ic-cart.svg b/public/assets/icons/navbar/ic-cart.svg
new file mode 100644
index 0000000..bafbda9
--- /dev/null
+++ b/public/assets/icons/navbar/ic-cart.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/assets/icons/navbar/ic-disabled.svg b/public/assets/icons/navbar/ic-disabled.svg
new file mode 100644
index 0000000..5f7bda3
--- /dev/null
+++ b/public/assets/icons/navbar/ic-disabled.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/assets/icons/navbar/ic-lock.svg b/public/assets/icons/navbar/ic-lock.svg
new file mode 100644
index 0000000..1545a1e
--- /dev/null
+++ b/public/assets/icons/navbar/ic-lock.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/assets/icons/navbar/ic-user.svg b/public/assets/icons/navbar/ic-user.svg
new file mode 100644
index 0000000..9f08419
--- /dev/null
+++ b/public/assets/icons/navbar/ic-user.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/assets/icons/notification/ic-notification-chat.svg b/public/assets/icons/notification/ic-notification-chat.svg
new file mode 100644
index 0000000..0fa6d65
--- /dev/null
+++ b/public/assets/icons/notification/ic-notification-chat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/notification/ic-notification-mail.svg b/public/assets/icons/notification/ic-notification-mail.svg
new file mode 100644
index 0000000..524fc75
--- /dev/null
+++ b/public/assets/icons/notification/ic-notification-mail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/notification/ic-notification-package.svg b/public/assets/icons/notification/ic-notification-package.svg
new file mode 100644
index 0000000..87f3b79
--- /dev/null
+++ b/public/assets/icons/notification/ic-notification-package.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/notification/ic-notification-shipping.svg b/public/assets/icons/notification/ic-notification-shipping.svg
new file mode 100644
index 0000000..da3d5ad
--- /dev/null
+++ b/public/assets/icons/notification/ic-notification-shipping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/shape-avatar.svg b/public/assets/icons/shape-avatar.svg
new file mode 100644
index 0000000..38aac7e
--- /dev/null
+++ b/public/assets/icons/shape-avatar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/icons/workspaces/logo-1.webp b/public/assets/icons/workspaces/logo-1.webp
new file mode 100644
index 0000000..daf350d
Binary files /dev/null and b/public/assets/icons/workspaces/logo-1.webp differ
diff --git a/public/assets/icons/workspaces/logo-2.webp b/public/assets/icons/workspaces/logo-2.webp
new file mode 100644
index 0000000..3b629ef
Binary files /dev/null and b/public/assets/icons/workspaces/logo-2.webp differ
diff --git a/public/assets/icons/workspaces/logo-3.webp b/public/assets/icons/workspaces/logo-3.webp
new file mode 100644
index 0000000..273fe07
Binary files /dev/null and b/public/assets/icons/workspaces/logo-3.webp differ
diff --git a/public/assets/illustrations/illustration-404.svg b/public/assets/illustrations/illustration-404.svg
new file mode 100644
index 0000000..bd59d64
--- /dev/null
+++ b/public/assets/illustrations/illustration-404.svg
@@ -0,0 +1,40 @@
+
diff --git a/public/assets/illustrations/illustration-dashboard.webp b/public/assets/illustrations/illustration-dashboard.webp
new file mode 100644
index 0000000..3c1d1a3
Binary files /dev/null and b/public/assets/illustrations/illustration-dashboard.webp differ
diff --git a/public/assets/images/avatar/avatar-1.webp b/public/assets/images/avatar/avatar-1.webp
new file mode 100644
index 0000000..d0860df
Binary files /dev/null and b/public/assets/images/avatar/avatar-1.webp differ
diff --git a/public/assets/images/avatar/avatar-10.webp b/public/assets/images/avatar/avatar-10.webp
new file mode 100644
index 0000000..a523203
Binary files /dev/null and b/public/assets/images/avatar/avatar-10.webp differ
diff --git a/public/assets/images/avatar/avatar-11.webp b/public/assets/images/avatar/avatar-11.webp
new file mode 100644
index 0000000..7da3d8d
Binary files /dev/null and b/public/assets/images/avatar/avatar-11.webp differ
diff --git a/public/assets/images/avatar/avatar-12.webp b/public/assets/images/avatar/avatar-12.webp
new file mode 100644
index 0000000..2ef5666
Binary files /dev/null and b/public/assets/images/avatar/avatar-12.webp differ
diff --git a/public/assets/images/avatar/avatar-13.webp b/public/assets/images/avatar/avatar-13.webp
new file mode 100644
index 0000000..d03b480
Binary files /dev/null and b/public/assets/images/avatar/avatar-13.webp differ
diff --git a/public/assets/images/avatar/avatar-14.webp b/public/assets/images/avatar/avatar-14.webp
new file mode 100644
index 0000000..80a8d29
Binary files /dev/null and b/public/assets/images/avatar/avatar-14.webp differ
diff --git a/public/assets/images/avatar/avatar-15.webp b/public/assets/images/avatar/avatar-15.webp
new file mode 100644
index 0000000..9ac9816
Binary files /dev/null and b/public/assets/images/avatar/avatar-15.webp differ
diff --git a/public/assets/images/avatar/avatar-16.webp b/public/assets/images/avatar/avatar-16.webp
new file mode 100644
index 0000000..7251b74
Binary files /dev/null and b/public/assets/images/avatar/avatar-16.webp differ
diff --git a/public/assets/images/avatar/avatar-17.webp b/public/assets/images/avatar/avatar-17.webp
new file mode 100644
index 0000000..5d5a465
Binary files /dev/null and b/public/assets/images/avatar/avatar-17.webp differ
diff --git a/public/assets/images/avatar/avatar-18.webp b/public/assets/images/avatar/avatar-18.webp
new file mode 100644
index 0000000..4c545e4
Binary files /dev/null and b/public/assets/images/avatar/avatar-18.webp differ
diff --git a/public/assets/images/avatar/avatar-19.webp b/public/assets/images/avatar/avatar-19.webp
new file mode 100644
index 0000000..6fc8ff3
Binary files /dev/null and b/public/assets/images/avatar/avatar-19.webp differ
diff --git a/public/assets/images/avatar/avatar-2.webp b/public/assets/images/avatar/avatar-2.webp
new file mode 100644
index 0000000..6af043a
Binary files /dev/null and b/public/assets/images/avatar/avatar-2.webp differ
diff --git a/public/assets/images/avatar/avatar-20.webp b/public/assets/images/avatar/avatar-20.webp
new file mode 100644
index 0000000..8cb58ce
Binary files /dev/null and b/public/assets/images/avatar/avatar-20.webp differ
diff --git a/public/assets/images/avatar/avatar-21.webp b/public/assets/images/avatar/avatar-21.webp
new file mode 100644
index 0000000..b88979b
Binary files /dev/null and b/public/assets/images/avatar/avatar-21.webp differ
diff --git a/public/assets/images/avatar/avatar-22.webp b/public/assets/images/avatar/avatar-22.webp
new file mode 100644
index 0000000..2fe2c6b
Binary files /dev/null and b/public/assets/images/avatar/avatar-22.webp differ
diff --git a/public/assets/images/avatar/avatar-23.webp b/public/assets/images/avatar/avatar-23.webp
new file mode 100644
index 0000000..5139e23
Binary files /dev/null and b/public/assets/images/avatar/avatar-23.webp differ
diff --git a/public/assets/images/avatar/avatar-24.webp b/public/assets/images/avatar/avatar-24.webp
new file mode 100644
index 0000000..e671720
Binary files /dev/null and b/public/assets/images/avatar/avatar-24.webp differ
diff --git a/public/assets/images/avatar/avatar-25.webp b/public/assets/images/avatar/avatar-25.webp
new file mode 100644
index 0000000..e5bce1b
Binary files /dev/null and b/public/assets/images/avatar/avatar-25.webp differ
diff --git a/public/assets/images/avatar/avatar-3.webp b/public/assets/images/avatar/avatar-3.webp
new file mode 100644
index 0000000..9e7e161
Binary files /dev/null and b/public/assets/images/avatar/avatar-3.webp differ
diff --git a/public/assets/images/avatar/avatar-4.webp b/public/assets/images/avatar/avatar-4.webp
new file mode 100644
index 0000000..acdd7d7
Binary files /dev/null and b/public/assets/images/avatar/avatar-4.webp differ
diff --git a/public/assets/images/avatar/avatar-5.webp b/public/assets/images/avatar/avatar-5.webp
new file mode 100644
index 0000000..d02bbce
Binary files /dev/null and b/public/assets/images/avatar/avatar-5.webp differ
diff --git a/public/assets/images/avatar/avatar-6.webp b/public/assets/images/avatar/avatar-6.webp
new file mode 100644
index 0000000..9519138
Binary files /dev/null and b/public/assets/images/avatar/avatar-6.webp differ
diff --git a/public/assets/images/avatar/avatar-7.webp b/public/assets/images/avatar/avatar-7.webp
new file mode 100644
index 0000000..b1272cb
Binary files /dev/null and b/public/assets/images/avatar/avatar-7.webp differ
diff --git a/public/assets/images/avatar/avatar-8.webp b/public/assets/images/avatar/avatar-8.webp
new file mode 100644
index 0000000..35b9dfe
Binary files /dev/null and b/public/assets/images/avatar/avatar-8.webp differ
diff --git a/public/assets/images/avatar/avatar-9.webp b/public/assets/images/avatar/avatar-9.webp
new file mode 100644
index 0000000..b0a8158
Binary files /dev/null and b/public/assets/images/avatar/avatar-9.webp differ
diff --git a/public/assets/images/cover/cover-1.webp b/public/assets/images/cover/cover-1.webp
new file mode 100644
index 0000000..9fa2560
Binary files /dev/null and b/public/assets/images/cover/cover-1.webp differ
diff --git a/public/assets/images/cover/cover-10.webp b/public/assets/images/cover/cover-10.webp
new file mode 100644
index 0000000..82ca790
Binary files /dev/null and b/public/assets/images/cover/cover-10.webp differ
diff --git a/public/assets/images/cover/cover-11.webp b/public/assets/images/cover/cover-11.webp
new file mode 100644
index 0000000..41ddd00
Binary files /dev/null and b/public/assets/images/cover/cover-11.webp differ
diff --git a/public/assets/images/cover/cover-12.webp b/public/assets/images/cover/cover-12.webp
new file mode 100644
index 0000000..a0ab39a
Binary files /dev/null and b/public/assets/images/cover/cover-12.webp differ
diff --git a/public/assets/images/cover/cover-13.webp b/public/assets/images/cover/cover-13.webp
new file mode 100644
index 0000000..f650ead
Binary files /dev/null and b/public/assets/images/cover/cover-13.webp differ
diff --git a/public/assets/images/cover/cover-14.webp b/public/assets/images/cover/cover-14.webp
new file mode 100644
index 0000000..cf7493d
Binary files /dev/null and b/public/assets/images/cover/cover-14.webp differ
diff --git a/public/assets/images/cover/cover-15.webp b/public/assets/images/cover/cover-15.webp
new file mode 100644
index 0000000..8a82b5d
Binary files /dev/null and b/public/assets/images/cover/cover-15.webp differ
diff --git a/public/assets/images/cover/cover-16.webp b/public/assets/images/cover/cover-16.webp
new file mode 100644
index 0000000..50abb72
Binary files /dev/null and b/public/assets/images/cover/cover-16.webp differ
diff --git a/public/assets/images/cover/cover-17.webp b/public/assets/images/cover/cover-17.webp
new file mode 100644
index 0000000..30f36d0
Binary files /dev/null and b/public/assets/images/cover/cover-17.webp differ
diff --git a/public/assets/images/cover/cover-18.webp b/public/assets/images/cover/cover-18.webp
new file mode 100644
index 0000000..ee64c4a
Binary files /dev/null and b/public/assets/images/cover/cover-18.webp differ
diff --git a/public/assets/images/cover/cover-19.webp b/public/assets/images/cover/cover-19.webp
new file mode 100644
index 0000000..4f1962e
Binary files /dev/null and b/public/assets/images/cover/cover-19.webp differ
diff --git a/public/assets/images/cover/cover-2.webp b/public/assets/images/cover/cover-2.webp
new file mode 100644
index 0000000..5a5d210
Binary files /dev/null and b/public/assets/images/cover/cover-2.webp differ
diff --git a/public/assets/images/cover/cover-20.webp b/public/assets/images/cover/cover-20.webp
new file mode 100644
index 0000000..6e26beb
Binary files /dev/null and b/public/assets/images/cover/cover-20.webp differ
diff --git a/public/assets/images/cover/cover-21.webp b/public/assets/images/cover/cover-21.webp
new file mode 100644
index 0000000..7f94575
Binary files /dev/null and b/public/assets/images/cover/cover-21.webp differ
diff --git a/public/assets/images/cover/cover-22.webp b/public/assets/images/cover/cover-22.webp
new file mode 100644
index 0000000..fc88ae6
Binary files /dev/null and b/public/assets/images/cover/cover-22.webp differ
diff --git a/public/assets/images/cover/cover-23.webp b/public/assets/images/cover/cover-23.webp
new file mode 100644
index 0000000..ab70067
Binary files /dev/null and b/public/assets/images/cover/cover-23.webp differ
diff --git a/public/assets/images/cover/cover-24.webp b/public/assets/images/cover/cover-24.webp
new file mode 100644
index 0000000..d6b9fb7
Binary files /dev/null and b/public/assets/images/cover/cover-24.webp differ
diff --git a/public/assets/images/cover/cover-3.webp b/public/assets/images/cover/cover-3.webp
new file mode 100644
index 0000000..5b023b8
Binary files /dev/null and b/public/assets/images/cover/cover-3.webp differ
diff --git a/public/assets/images/cover/cover-4.webp b/public/assets/images/cover/cover-4.webp
new file mode 100644
index 0000000..0e9ecbf
Binary files /dev/null and b/public/assets/images/cover/cover-4.webp differ
diff --git a/public/assets/images/cover/cover-5.webp b/public/assets/images/cover/cover-5.webp
new file mode 100644
index 0000000..8f1785f
Binary files /dev/null and b/public/assets/images/cover/cover-5.webp differ
diff --git a/public/assets/images/cover/cover-6.webp b/public/assets/images/cover/cover-6.webp
new file mode 100644
index 0000000..bb46a04
Binary files /dev/null and b/public/assets/images/cover/cover-6.webp differ
diff --git a/public/assets/images/cover/cover-7.webp b/public/assets/images/cover/cover-7.webp
new file mode 100644
index 0000000..211355e
Binary files /dev/null and b/public/assets/images/cover/cover-7.webp differ
diff --git a/public/assets/images/cover/cover-8.webp b/public/assets/images/cover/cover-8.webp
new file mode 100644
index 0000000..70cd3fb
Binary files /dev/null and b/public/assets/images/cover/cover-8.webp differ
diff --git a/public/assets/images/cover/cover-9.webp b/public/assets/images/cover/cover-9.webp
new file mode 100644
index 0000000..7445854
Binary files /dev/null and b/public/assets/images/cover/cover-9.webp differ
diff --git a/public/assets/images/minimal-free-preview.jpg b/public/assets/images/minimal-free-preview.jpg
new file mode 100644
index 0000000..91eb756
Binary files /dev/null and b/public/assets/images/minimal-free-preview.jpg differ
diff --git a/public/assets/images/product/product-1.webp b/public/assets/images/product/product-1.webp
new file mode 100644
index 0000000..75659df
Binary files /dev/null and b/public/assets/images/product/product-1.webp differ
diff --git a/public/assets/images/product/product-10.webp b/public/assets/images/product/product-10.webp
new file mode 100644
index 0000000..65e2c60
Binary files /dev/null and b/public/assets/images/product/product-10.webp differ
diff --git a/public/assets/images/product/product-11.webp b/public/assets/images/product/product-11.webp
new file mode 100644
index 0000000..17c3bc8
Binary files /dev/null and b/public/assets/images/product/product-11.webp differ
diff --git a/public/assets/images/product/product-12.webp b/public/assets/images/product/product-12.webp
new file mode 100644
index 0000000..2af581e
Binary files /dev/null and b/public/assets/images/product/product-12.webp differ
diff --git a/public/assets/images/product/product-13.webp b/public/assets/images/product/product-13.webp
new file mode 100644
index 0000000..c1f403b
Binary files /dev/null and b/public/assets/images/product/product-13.webp differ
diff --git a/public/assets/images/product/product-14.webp b/public/assets/images/product/product-14.webp
new file mode 100644
index 0000000..a5896f8
Binary files /dev/null and b/public/assets/images/product/product-14.webp differ
diff --git a/public/assets/images/product/product-15.webp b/public/assets/images/product/product-15.webp
new file mode 100644
index 0000000..475a7af
Binary files /dev/null and b/public/assets/images/product/product-15.webp differ
diff --git a/public/assets/images/product/product-16.webp b/public/assets/images/product/product-16.webp
new file mode 100644
index 0000000..1b3b7ed
Binary files /dev/null and b/public/assets/images/product/product-16.webp differ
diff --git a/public/assets/images/product/product-17.webp b/public/assets/images/product/product-17.webp
new file mode 100644
index 0000000..ddd8da0
Binary files /dev/null and b/public/assets/images/product/product-17.webp differ
diff --git a/public/assets/images/product/product-18.webp b/public/assets/images/product/product-18.webp
new file mode 100644
index 0000000..9ae8e26
Binary files /dev/null and b/public/assets/images/product/product-18.webp differ
diff --git a/public/assets/images/product/product-19.webp b/public/assets/images/product/product-19.webp
new file mode 100644
index 0000000..c5017f6
Binary files /dev/null and b/public/assets/images/product/product-19.webp differ
diff --git a/public/assets/images/product/product-2.webp b/public/assets/images/product/product-2.webp
new file mode 100644
index 0000000..65120df
Binary files /dev/null and b/public/assets/images/product/product-2.webp differ
diff --git a/public/assets/images/product/product-20.webp b/public/assets/images/product/product-20.webp
new file mode 100644
index 0000000..8931720
Binary files /dev/null and b/public/assets/images/product/product-20.webp differ
diff --git a/public/assets/images/product/product-21.webp b/public/assets/images/product/product-21.webp
new file mode 100644
index 0000000..c7795b1
Binary files /dev/null and b/public/assets/images/product/product-21.webp differ
diff --git a/public/assets/images/product/product-22.webp b/public/assets/images/product/product-22.webp
new file mode 100644
index 0000000..b96c809
Binary files /dev/null and b/public/assets/images/product/product-22.webp differ
diff --git a/public/assets/images/product/product-23.webp b/public/assets/images/product/product-23.webp
new file mode 100644
index 0000000..a38a734
Binary files /dev/null and b/public/assets/images/product/product-23.webp differ
diff --git a/public/assets/images/product/product-24.webp b/public/assets/images/product/product-24.webp
new file mode 100644
index 0000000..643a1a6
Binary files /dev/null and b/public/assets/images/product/product-24.webp differ
diff --git a/public/assets/images/product/product-3.webp b/public/assets/images/product/product-3.webp
new file mode 100644
index 0000000..07b5312
Binary files /dev/null and b/public/assets/images/product/product-3.webp differ
diff --git a/public/assets/images/product/product-4.webp b/public/assets/images/product/product-4.webp
new file mode 100644
index 0000000..c18893e
Binary files /dev/null and b/public/assets/images/product/product-4.webp differ
diff --git a/public/assets/images/product/product-5.webp b/public/assets/images/product/product-5.webp
new file mode 100644
index 0000000..014c146
Binary files /dev/null and b/public/assets/images/product/product-5.webp differ
diff --git a/public/assets/images/product/product-6.webp b/public/assets/images/product/product-6.webp
new file mode 100644
index 0000000..3ff7420
Binary files /dev/null and b/public/assets/images/product/product-6.webp differ
diff --git a/public/assets/images/product/product-7.webp b/public/assets/images/product/product-7.webp
new file mode 100644
index 0000000..6a0e943
Binary files /dev/null and b/public/assets/images/product/product-7.webp differ
diff --git a/public/assets/images/product/product-8.webp b/public/assets/images/product/product-8.webp
new file mode 100644
index 0000000..0aae38a
Binary files /dev/null and b/public/assets/images/product/product-8.webp differ
diff --git a/public/assets/images/product/product-9.webp b/public/assets/images/product/product-9.webp
new file mode 100644
index 0000000..2c86ff6
Binary files /dev/null and b/public/assets/images/product/product-9.webp differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..5c435e6
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/src/_mock/_data.ts b/src/_mock/_data.ts
new file mode 100644
index 0000000..056177e
--- /dev/null
+++ b/src/_mock/_data.ts
@@ -0,0 +1,210 @@
+import {
+ _id,
+ _price,
+ _times,
+ _company,
+ _boolean,
+ _fullName,
+ _taskNames,
+ _postTitles,
+ _description,
+ _productNames,
+} from './_mock';
+
+// ----------------------------------------------------------------------
+
+export const _myAccount = {
+ displayName: 'Jaydon Frankie',
+ email: 'demo@minimals.cc',
+ photoURL: '/assets/images/avatar/avatar-25.webp',
+};
+
+// ----------------------------------------------------------------------
+
+export const _users = [...Array(24)].map((_, index) => ({
+ id: _id(index),
+ name: _fullName(index),
+ company: _company(index),
+ isVerified: _boolean(index),
+ avatarUrl: `/assets/images/avatar/avatar-${index + 1}.webp`,
+ status: index % 4 ? 'active' : 'banned',
+ role:
+ [
+ 'Leader',
+ 'Hr Manager',
+ 'UI Designer',
+ 'UX Designer',
+ 'UI/UX Designer',
+ 'Project Manager',
+ 'Backend Developer',
+ 'Full Stack Designer',
+ 'Front End Developer',
+ 'Full Stack Developer',
+ ][index] || 'UI Designer',
+}));
+
+// ----------------------------------------------------------------------
+
+export const _posts = [...Array(23)].map((_, index) => ({
+ id: _id(index),
+ title: _postTitles(index),
+ description: _description(index),
+ coverUrl: `/assets/images/cover/cover-${index + 1}.webp`,
+ totalViews: 8829,
+ totalComments: 7977,
+ totalShares: 8556,
+ totalFavorites: 8870,
+ postedAt: _times(index),
+ author: {
+ name: _fullName(index),
+ avatarUrl: `/assets/images/avatar/avatar-${index + 1}.webp`,
+ },
+}));
+
+// ----------------------------------------------------------------------
+
+const COLORS = [
+ '#00AB55',
+ '#000000',
+ '#FFFFFF',
+ '#FFC0CB',
+ '#FF4842',
+ '#1890FF',
+ '#94D82D',
+ '#FFC107',
+];
+
+export const _products = [...Array(24)].map((_, index) => {
+ const setIndex = index + 1;
+
+ return {
+ id: _id(index),
+ price: _price(index),
+ name: _productNames(index),
+ priceSale: setIndex % 3 ? null : _price(index),
+ coverUrl: `/assets/images/product/product-${setIndex}.webp`,
+ colors:
+ (setIndex === 1 && COLORS.slice(0, 2)) ||
+ (setIndex === 2 && COLORS.slice(1, 3)) ||
+ (setIndex === 3 && COLORS.slice(2, 4)) ||
+ (setIndex === 4 && COLORS.slice(3, 6)) ||
+ (setIndex === 23 && COLORS.slice(4, 6)) ||
+ (setIndex === 24 && COLORS.slice(5, 6)) ||
+ COLORS,
+ status:
+ ([1, 3, 5].includes(setIndex) && 'sale') || ([4, 8, 12].includes(setIndex) && 'new') || '',
+ };
+});
+
+// ----------------------------------------------------------------------
+
+export const _langs = [
+ {
+ value: 'en',
+ label: 'English',
+ icon: '/assets/icons/flags/ic-flag-en.svg',
+ },
+ {
+ value: 'de',
+ label: 'German',
+ icon: '/assets/icons/flags/ic-flag-de.svg',
+ },
+ {
+ value: 'fr',
+ label: 'French',
+ icon: '/assets/icons/flags/ic-flag-fr.svg',
+ },
+];
+
+// ----------------------------------------------------------------------
+
+export const _timeline = [...Array(5)].map((_, index) => ({
+ id: _id(index),
+ title: [
+ '1983, orders, $4220',
+ '12 Invoices have been paid',
+ 'Order #37745 from September',
+ 'New order placed #XF-2356',
+ 'New order placed #XF-2346',
+ ][index],
+ type: `order${index + 1}`,
+ time: _times(index),
+}));
+
+export const _traffic = [
+ {
+ value: 'facebook',
+ label: 'Facebook',
+ total: 19500,
+ },
+ {
+ value: 'google',
+ label: 'Google',
+ total: 91200,
+ },
+ {
+ value: 'linkedin',
+ label: 'Linkedin',
+ total: 69800,
+ },
+ {
+ value: 'twitter',
+ label: 'Twitter',
+ total: 84900,
+ },
+];
+
+export const _tasks = Array.from({ length: 5 }, (_, index) => ({
+ id: _id(index),
+ name: _taskNames(index),
+}));
+
+// ----------------------------------------------------------------------
+
+export const _notifications = [
+ {
+ id: _id(1),
+ title: 'Your order is placed',
+ description: 'waiting for shipping',
+ avatarUrl: null,
+ type: 'order-placed',
+ postedAt: _times(1),
+ isUnRead: true,
+ },
+ {
+ id: _id(2),
+ title: _fullName(2),
+ description: 'answered to your comment on the Minimal',
+ avatarUrl: '/assets/images/avatar/avatar-2.webp',
+ type: 'friend-interactive',
+ postedAt: _times(2),
+ isUnRead: true,
+ },
+ {
+ id: _id(3),
+ title: 'You have new message',
+ description: '5 unread messages',
+ avatarUrl: null,
+ type: 'chat-message',
+ postedAt: _times(3),
+ isUnRead: false,
+ },
+ {
+ id: _id(4),
+ title: 'You have new mail',
+ description: 'sent from Guido Padberg',
+ avatarUrl: null,
+ type: 'mail',
+ postedAt: _times(4),
+ isUnRead: false,
+ },
+ {
+ id: _id(5),
+ title: 'Delivery processing',
+ description: 'Your order is being shipped',
+ avatarUrl: null,
+ type: 'order-shipped',
+ postedAt: _times(5),
+ isUnRead: false,
+ },
+];
diff --git a/src/_mock/_mock.ts b/src/_mock/_mock.ts
new file mode 100644
index 0000000..46f120b
--- /dev/null
+++ b/src/_mock/_mock.ts
@@ -0,0 +1,232 @@
+export const _id = (index: number) => `e99f09a7-dd88-49d5-b1c8-1daf80c2d7b${index}`;
+
+export const _times = (index: number) =>
+ // 'MM/DD/YYYY'
+ [
+ '11/08/2023',
+ '04/09/2024',
+ '09/12/2023',
+ '01/01/2024',
+ '04/23/2024',
+ '02/29/2024',
+ '05/14/2024',
+ '01/13/2024',
+ '06/22/2024',
+ '10/05/2023',
+ '07/11/2024',
+ '05/22/2024',
+ '03/29/2024',
+ '08/29/2023',
+ '11/19/2023',
+ '10/24/2023',
+ '12/02/2023',
+ '02/13/2024',
+ '09/19/2023',
+ '04/17/2024',
+ '12/18/2023',
+ '06/27/2024',
+ '10/19/2023',
+ '08/09/2024',
+ ][index];
+
+export const _fullName = (index: number) =>
+ [
+ 'Billy Stoltenberg',
+ 'Eloise Ebert',
+ 'Teresa Luettgen',
+ 'Salvador Mayert',
+ 'Dr. Guadalupe Rath',
+ 'Kelvin Pouros',
+ 'Thelma Langworth',
+ 'Kristen Wunsch',
+ 'Steve Welch',
+ 'Brian Jacobs',
+ 'Lillie Schultz',
+ 'Mr. Conrad Spinka',
+ 'Charlene Krajcik',
+ 'Kerry Kuhlman',
+ 'Betty Hammes',
+ 'Tony Paucek PhD',
+ 'Sherri Davis',
+ 'Angel Rolfson-Kulas',
+ 'Dr. Lee Doyle-Grant',
+ 'Cheryl Romaguera',
+ 'Billy Braun',
+ 'Adam Trantow',
+ 'Brandon Von',
+ 'Willis Ankunding',
+ ][index];
+
+export const _price = (index: number) =>
+ [
+ 35.17, 57.22, 64.78, 50.79, 9.57, 61.46, 96.73, 63.04, 33.18, 36.3, 54.42, 20.52, 62.82, 19.96,
+ 25.93, 70.39, 23.11, 67.23, 14.31, 31.5, 26.72, 44.8, 37.87, 75.53,
+ ][index];
+
+export const _company = (index: number) =>
+ [
+ 'Medhurst, Moore and Franey',
+ 'Hahn, Homenick and Lind',
+ 'Larkin LLC',
+ 'Stamm, Larson and Mertz',
+ 'Spencer, Raynor and Langosh',
+ 'Lehner - Feeney',
+ 'Leuschke, Harris and Kuhlman',
+ 'Gutmann - Kassulke',
+ 'Turcotte - Runolfsson',
+ 'Howe - Anderson',
+ 'Sipes - Yost',
+ 'Johns - Aufderhar',
+ 'Schmidt LLC',
+ 'Smitham - Gerlach',
+ 'Waelchi - VonRueden',
+ 'Padberg - Macejkovic',
+ 'Lemke - Ferry',
+ 'Koch and Sons',
+ 'Klein - Rolfson',
+ 'Weimann LLC',
+ 'White, Cassin and Goldner',
+ 'Mohr, Langworth and Hills',
+ 'Mitchell, Volkman and Prosacco',
+ 'Streich Group',
+ ][index];
+
+export const _boolean = (index: number) =>
+ [
+ true,
+ false,
+ true,
+ false,
+ true,
+ true,
+ true,
+ false,
+ false,
+ true,
+ false,
+ true,
+ true,
+ false,
+ true,
+ false,
+ false,
+ true,
+ false,
+ false,
+ false,
+ true,
+ true,
+ false,
+ ][index];
+
+export const _postTitles = (index: number) =>
+ [
+ 'Whiteboard Templates By Industry Leaders',
+ 'Tesla Cybertruck-inspired camper trailer for Tesla fans who can’t just wait for the truck!',
+ 'Designify Agency Landing Page Design',
+ '✨What is Done is Done ✨',
+ 'Fresh Prince',
+ 'Six Socks Studio',
+ 'vincenzo de cotiis’ crossing over showcases a research on contamination',
+ 'Simple, Great Looking Animations in Your Project | Video Tutorial',
+ '40 Free Serif Fonts for Digital Designers',
+ 'Examining the Evolution of the Typical Web Design Client',
+ 'Katie Griffin loves making that homey art',
+ 'The American Dream retold through mid-century railroad graphics',
+ 'Illustration System Design',
+ 'CarZio-Delivery Driver App SignIn/SignUp',
+ 'How to create a client-serverless Jamstack app using Netlify, Gatsby and Fauna',
+ 'Tylko Organise effortlessly -3D & Motion Design',
+ 'RAYO ?? A expanded visual arts festival identity',
+ 'Anthony Burrill and Wired mag’s Andrew Diprose discuss how they made January’s Change Everything cover',
+ 'Inside the Mind of Samuel Day',
+ 'Portfolio Review: Is This Portfolio Too Creative?',
+ 'Akkers van Margraten',
+ 'Gradient Ticket icon',
+ 'Here’s a Dyson motorcycle concept that doesn’t ‘suck’!',
+ 'How to Animate a SVG with border-image',
+ ][index];
+
+export const _description = (index: number) =>
+ [
+ 'The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J',
+ 'New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart',
+ 'Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals',
+ 'The Football Is Good For Training And Recreational Purposes',
+ 'New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016',
+ 'Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals',
+ 'Carbonite web goalkeeper gloves are ergonomically designed to give easy fit',
+ 'The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design',
+ 'The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J',
+ 'The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive',
+ 'The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive',
+ 'The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design',
+ 'New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart',
+ "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles",
+ 'New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart',
+ 'Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals',
+ 'Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals',
+ 'The beautiful range of Apple Naturalé that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients',
+ "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles",
+ 'New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016',
+ 'The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J',
+ 'Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support',
+ 'The Football Is Good For Training And Recreational Purposes',
+ 'The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive',
+ ][index];
+
+export const _taskNames = (index: number) =>
+ [
+ `Prepare Monthly Financial Report`,
+ `Design New Marketing Campaign`,
+ `Analyze Customer Feedback`,
+ `Update Website Content`,
+ `Conduct Market Research`,
+ `Develop Software Application`,
+ `Organize Team Meeting`,
+ `Create Social Media Posts`,
+ `Review Project Plan`,
+ `Implement Security Protocols`,
+ `Write Technical Documentation`,
+ `Test New Product Features`,
+ `Manage Client Inquiries`,
+ `Train New Employees`,
+ `Coordinate Logistics`,
+ `Monitor Network Performance`,
+ `Develop Training Materials`,
+ `Draft Press Release`,
+ `Prepare Budget Proposal`,
+ `Evaluate Vendor Proposals`,
+ `Perform Data Analysis`,
+ `Conduct Quality Assurance`,
+ `Plan Event Logistics`,
+ `Optimize SEO Strategies`,
+ ][index];
+
+export const _productNames = (index: number) =>
+ [
+ 'Nike Air Force 1 NDESTRUKT',
+ 'Nike Space Hippie 04',
+ 'Nike Air Zoom Pegasus 37 A.I.R. Chaz Bear',
+ 'Nike Blazer Low 77 Vintage',
+ 'Nike ZoomX SuperRep Surge',
+ 'Zoom Freak 2',
+ 'Nike Air Max Zephyr',
+ 'Jordan Delta',
+ 'Air Jordan XXXV PF',
+ 'Nike Waffle Racer Crater',
+ 'Kyrie 7 EP Sisterhood',
+ 'Nike Air Zoom BB NXT',
+ 'Nike Air Force 1 07 LX',
+ 'Nike Air Force 1 Shadow SE',
+ 'Nike Air Zoom Tempo NEXT%',
+ 'Nike DBreak-Type',
+ 'Nike Air Max Up',
+ 'Nike Air Max 270 React ENG',
+ 'NikeCourt Royale',
+ 'Nike Air Zoom Pegasus 37 Premium',
+ 'Nike Air Zoom SuperRep',
+ 'NikeCourt Royale',
+ 'Nike React Art3mis',
+ 'Nike React Infinity Run Flyknit A.I.R. Chaz Bear',
+ ][index];
diff --git a/src/_mock/index.ts b/src/_mock/index.ts
new file mode 100644
index 0000000..6a726d9
--- /dev/null
+++ b/src/_mock/index.ts
@@ -0,0 +1,2 @@
+export * from './_mock';
+export * from './_data';
diff --git a/src/app.tsx b/src/app.tsx
new file mode 100644
index 0000000..6062fe5
--- /dev/null
+++ b/src/app.tsx
@@ -0,0 +1,59 @@
+import 'src/global.css';
+
+import { useEffect } from 'react';
+
+import Fab from '@mui/material/Fab';
+
+import { usePathname } from 'src/routes/hooks';
+
+import { ThemeProvider } from 'src/theme/theme-provider';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+type AppProps = {
+ children: React.ReactNode;
+};
+
+export default function App({ children }: AppProps) {
+ useScrollToTop();
+
+ const githubButton = () => (
+
+
+
+ );
+
+ return (
+
+ {children}
+ {githubButton()}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+function useScrollToTop() {
+ const pathname = usePathname();
+
+ useEffect(() => {
+ window.scrollTo(0, 0);
+ }, [pathname]);
+
+ return null;
+}
diff --git a/src/components/chart/chart.tsx b/src/components/chart/chart.tsx
new file mode 100644
index 0000000..1d78f38
--- /dev/null
+++ b/src/components/chart/chart.tsx
@@ -0,0 +1,48 @@
+import { lazy, Suspense } from 'react';
+import { useIsClient } from 'minimal-shared/hooks';
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import { chartClasses } from './classes';
+import { ChartLoading } from './components';
+
+import type { ChartProps } from './types';
+
+// ----------------------------------------------------------------------
+
+const LazyChart = lazy(() =>
+ import('react-apexcharts').then((module) => ({ default: module.default }))
+);
+
+export function Chart({ type, series, options, slotProps, className, sx, ...other }: ChartProps) {
+ const isClient = useIsClient();
+
+ const renderFallback = () => ;
+
+ return (
+
+ {isClient ? (
+
+
+
+ ) : (
+ renderFallback()
+ )}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const ChartRoot = styled('div')(({ theme }) => ({
+ width: '100%',
+ flexShrink: 0,
+ position: 'relative',
+ borderRadius: theme.shape.borderRadius * 1.5,
+}));
diff --git a/src/components/chart/classes.ts b/src/components/chart/classes.ts
new file mode 100644
index 0000000..5557a59
--- /dev/null
+++ b/src/components/chart/classes.ts
@@ -0,0 +1,19 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const chartClasses = {
+ root: createClasses('chart__root'),
+ loading: createClasses('chart__loading'),
+ legends: {
+ root: createClasses('chart__legends__root'),
+ item: {
+ wrap: createClasses('chart__legends__item__wrap'),
+ root: createClasses('chart__legends__item__root'),
+ dot: createClasses('chart__legends__item__dot'),
+ icon: createClasses('chart__legends__item__icon'),
+ label: createClasses('chart__legends__item__label'),
+ value: createClasses('chart__legends__item__value'),
+ },
+ },
+};
diff --git a/src/components/chart/components/chart-legends.tsx b/src/components/chart/components/chart-legends.tsx
new file mode 100644
index 0000000..ec7c113
--- /dev/null
+++ b/src/components/chart/components/chart-legends.tsx
@@ -0,0 +1,128 @@
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import { chartClasses } from '../classes';
+
+// ----------------------------------------------------------------------
+
+export type ChartLegendsProps = React.ComponentProps & {
+ labels?: string[];
+ colors?: string[];
+ values?: string[];
+ sublabels?: string[];
+ icons?: React.ReactNode[];
+ slotProps?: {
+ wrapper?: React.ComponentProps;
+ root?: React.ComponentProps;
+ dot?: React.ComponentProps;
+ icon?: React.ComponentProps;
+ value?: React.ComponentProps;
+ label?: React.ComponentProps;
+ };
+};
+
+export function ChartLegends({
+ sx,
+ className,
+ slotProps,
+ icons = [],
+ values = [],
+ labels = [],
+ colors = [],
+ sublabels = [],
+ ...other
+}: ChartLegendsProps) {
+ return (
+
+ {labels.map((series, index) => (
+
+
+ {icons.length ? (
+
+ {icons[index]}
+
+ ) : (
+
+ )}
+
+
+ {series}
+ {!!sublabels.length && <> {` (${sublabels[index]})`}>}
+
+
+
+ {values && (
+
+ {values[index]}
+
+ )}
+
+ ))}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const ListRoot = styled('ul')(({ theme }) => ({
+ display: 'flex',
+ flexWrap: 'wrap',
+ gap: theme.spacing(2),
+}));
+
+const ItemWrap = styled('li')(() => ({
+ display: 'inline-flex',
+ flexDirection: 'column',
+}));
+
+const ItemRoot = styled('div')(({ theme }) => ({
+ gap: 6,
+ alignItems: 'center',
+ display: 'inline-flex',
+ justifyContent: 'flex-start',
+ fontSize: theme.typography.pxToRem(13),
+ fontWeight: theme.typography.fontWeightMedium,
+}));
+
+const ItemIcon = styled('span')({
+ display: 'inline-flex',
+ color: 'var(--icon-color)',
+ /**
+ * As ':first-child' for ssr
+ * https://github.com/emotion-js/emotion/issues/1105#issuecomment-1126025608
+ */
+ '& > :first-of-type:not(style):not(:first-of-type ~ *), & > style + *': { width: 20, height: 20 },
+});
+
+const ItemDot = styled('span')({
+ width: 12,
+ height: 12,
+ flexShrink: 0,
+ display: 'flex',
+ borderRadius: '50%',
+ position: 'relative',
+ alignItems: 'center',
+ justifyContent: 'center',
+ color: 'var(--icon-color)',
+ backgroundColor: 'currentColor',
+});
+
+const ItemLabel = styled('span')({ flexShrink: 0 });
+
+const ItemValue = styled('span')(({ theme }) => ({
+ ...theme.typography.h6,
+ marginTop: theme.spacing(1),
+}));
diff --git a/src/components/chart/components/chart-loading.tsx b/src/components/chart/components/chart-loading.tsx
new file mode 100644
index 0000000..f4e031e
--- /dev/null
+++ b/src/components/chart/components/chart-loading.tsx
@@ -0,0 +1,51 @@
+import type { BoxProps } from '@mui/material/Box';
+
+import { mergeClasses } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import Skeleton from '@mui/material/Skeleton';
+
+import { chartClasses } from '../classes';
+
+import type { ChartProps } from '../types';
+
+// ----------------------------------------------------------------------
+
+export type ChartLoadingProps = BoxProps & Pick;
+
+export function ChartLoading({ sx, className, type, ...other }: ChartLoadingProps) {
+ const circularTypes: ChartProps['type'][] = ['donut', 'radialBar', 'pie', 'polarArea'];
+
+ return (
+ ({
+ top: 0,
+ left: 0,
+ width: 1,
+ zIndex: 9,
+ height: 1,
+ p: 'inherit',
+ overflow: 'hidden',
+ alignItems: 'center',
+ position: 'absolute',
+ borderRadius: 'inherit',
+ justifyContent: 'center',
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+
+
+ );
+}
diff --git a/src/components/chart/components/index.ts b/src/components/chart/components/index.ts
new file mode 100644
index 0000000..748900a
--- /dev/null
+++ b/src/components/chart/components/index.ts
@@ -0,0 +1,3 @@
+export * from './chart-legends';
+
+export * from './chart-loading';
diff --git a/src/components/chart/index.ts b/src/components/chart/index.ts
new file mode 100644
index 0000000..9765b2b
--- /dev/null
+++ b/src/components/chart/index.ts
@@ -0,0 +1,7 @@
+export * from './chart';
+
+export * from './use-chart';
+
+export * from './components';
+
+export type * from './types';
diff --git a/src/components/chart/styles.css b/src/components/chart/styles.css
new file mode 100644
index 0000000..4f16c93
--- /dev/null
+++ b/src/components/chart/styles.css
@@ -0,0 +1,56 @@
+.apexcharts-canvas {
+ /**
+ * Tooltip
+ */
+ .apexcharts-tooltip {
+ min-width: 80px;
+ border-radius: 10px;
+ backdrop-filter: blur(6px);
+ color: var(--palette-text-primary);
+ box-shadow: var(--customShadows-dropdown);
+ background-color: rgba(var(--palette-background-defaultChannel) / 0.9);
+ }
+ .apexcharts-xaxistooltip {
+ border-radius: 10px;
+ border-color: transparent;
+ backdrop-filter: blur(6px);
+ color: var(--palette-text-primary);
+ box-shadow: var(--customShadows-dropdown);
+ background-color: rgba(var(--palette-background-defaultChannel) / 0.9);
+ &::before {
+ border-bottom-color: rgba(var(--palette-grey-500Channel) / 0.16);
+ }
+ &::after {
+ border-bottom-color: rgba(var(--palette-background-defaultChannel) / 0.9);
+ }
+ }
+ .apexcharts-tooltip-title {
+ font-weight: 700;
+ text-align: center;
+ color: var(--palette-text-secondary);
+ background-color: var(--palette-background-neutral);
+ }
+ /**
+ * Tooltip: group
+ */
+ .apexcharts-tooltip-series-group {
+ padding: 4px 12px;
+ }
+ .apexcharts-tooltip-marker {
+ margin-right: 8px;
+ }
+ /**
+ * Legend
+ */
+ .apexcharts-legend {
+ padding: 0;
+ }
+ .apexcharts-legend-marker {
+ margin-right: 6px;
+ }
+ .apexcharts-legend-text {
+ margin-left: 0;
+ padding-left: 0;
+ line-height: 18px;
+ }
+}
diff --git a/src/components/chart/types.ts b/src/components/chart/types.ts
new file mode 100644
index 0000000..0e3922a
--- /dev/null
+++ b/src/components/chart/types.ts
@@ -0,0 +1,14 @@
+import type { Theme, SxProps } from '@mui/material/styles';
+import type { Props as ApexProps } from 'react-apexcharts';
+
+// ----------------------------------------------------------------------
+
+export type ChartOptions = ApexProps['options'];
+
+export type ChartProps = React.ComponentProps<'div'> &
+ Pick & {
+ sx?: SxProps;
+ slotProps?: {
+ loading?: SxProps;
+ };
+ };
diff --git a/src/components/chart/use-chart.ts b/src/components/chart/use-chart.ts
new file mode 100644
index 0000000..2deca76
--- /dev/null
+++ b/src/components/chart/use-chart.ts
@@ -0,0 +1,227 @@
+import type { Theme } from '@mui/material/styles';
+
+import { merge } from 'es-toolkit';
+import { varAlpha } from 'minimal-shared/utils';
+
+import { useTheme } from '@mui/material/styles';
+
+import type { ChartOptions } from './types';
+
+// ----------------------------------------------------------------------
+
+export function useChart(updatedOptions?: ChartOptions): ChartOptions {
+ const theme = useTheme();
+
+ const baseOptions = baseChartOptions(theme) ?? {};
+
+ return merge(baseOptions, updatedOptions ?? {});
+}
+
+// ----------------------------------------------------------------------
+
+const baseChartOptions = (theme: Theme): ChartOptions => {
+ const LABEL_TOTAL = {
+ show: true,
+ label: 'Total',
+ color: theme.vars.palette.text.secondary,
+ fontSize: theme.typography.subtitle2.fontSize as string,
+ fontWeight: theme.typography.subtitle2.fontWeight,
+ };
+
+ const LABEL_VALUE = {
+ offsetY: 8,
+ color: theme.vars.palette.text.primary,
+ fontSize: theme.typography.h4.fontSize as string,
+ fontWeight: theme.typography.h4.fontWeight,
+ };
+
+ return {
+ /** **************************************
+ * Chart
+ * https://apexcharts.com/docs/options/chart/animations/
+ *************************************** */
+ chart: {
+ toolbar: { show: false },
+ zoom: { enabled: false },
+ parentHeightOffset: 0,
+ fontFamily: theme.typography.fontFamily,
+ foreColor: theme.vars.palette.text.disabled,
+ animations: {
+ enabled: true,
+ speed: 360,
+ animateGradually: { enabled: true, delay: 120 },
+ dynamicAnimation: { enabled: true, speed: 360 },
+ },
+ },
+
+ /** **************************************
+ * Colors
+ * https://apexcharts.com/docs/options/colors/
+ *************************************** */
+ colors: [
+ theme.palette.primary.main,
+ theme.palette.warning.main,
+ theme.palette.info.main,
+ theme.palette.error.main,
+ theme.palette.success.main,
+ theme.palette.warning.dark,
+ theme.palette.success.darker,
+ theme.palette.info.dark,
+ theme.palette.info.darker,
+ ],
+
+ /** **************************************
+ * States
+ * https://apexcharts.com/docs/options/states/
+ *************************************** */
+ states: {
+ hover: { filter: { type: 'darken' } },
+ active: { filter: { type: 'darken' } },
+ },
+
+ /** **************************************
+ * Fill
+ * https://apexcharts.com/docs/options/fill/
+ *************************************** */
+ fill: {
+ opacity: 1,
+ gradient: {
+ type: 'vertical',
+ shadeIntensity: 0,
+ opacityFrom: 0.4,
+ opacityTo: 0,
+ stops: [0, 100],
+ },
+ },
+
+ /** **************************************
+ * Data labels
+ * https://apexcharts.com/docs/options/datalabels/
+ *************************************** */
+ dataLabels: { enabled: false },
+
+ /** **************************************
+ * Stroke
+ * https://apexcharts.com/docs/options/stroke/
+ *************************************** */
+ stroke: { width: 2.5, curve: 'smooth', lineCap: 'round' },
+
+ /** **************************************
+ * Grid
+ * https://apexcharts.com/docs/options/grid/
+ *************************************** */
+ grid: {
+ strokeDashArray: 3,
+ borderColor: theme.vars.palette.divider,
+ padding: { top: 0, right: 0, bottom: 0 },
+ xaxis: { lines: { show: false } },
+ },
+
+ /** **************************************
+ * Axis
+ * https://apexcharts.com/docs/options/xaxis/
+ * https://apexcharts.com/docs/options/yaxis/
+ *************************************** */
+ xaxis: { axisBorder: { show: false }, axisTicks: { show: false } },
+ yaxis: { tickAmount: 5 },
+
+ /** **************************************
+ * Markers
+ * https://apexcharts.com/docs/options/markers/
+ *************************************** */
+ markers: {
+ size: 0,
+ strokeColors: theme.vars.palette.background.paper,
+ },
+
+ /** **************************************
+ * Tooltip
+ *************************************** */
+ tooltip: { theme: 'false', fillSeriesColor: false, x: { show: true } },
+
+ /** **************************************
+ * Legend
+ * https://apexcharts.com/docs/options/legend/
+ *************************************** */
+ legend: {
+ show: false,
+ position: 'top',
+ fontWeight: 500,
+ fontSize: '13px',
+ horizontalAlign: 'right',
+ markers: { shape: 'circle' },
+ labels: { colors: theme.vars.palette.text.primary },
+ itemMargin: { horizontal: 8, vertical: 8 },
+ },
+
+ /** **************************************
+ * plotOptions
+ *************************************** */
+ plotOptions: {
+ /**
+ * bar
+ * https://apexcharts.com/docs/options/plotoptions/bar/
+ */
+ bar: { borderRadius: 4, columnWidth: '48%', borderRadiusApplication: 'end' },
+ /**
+ * pie + donut
+ * https://apexcharts.com/docs/options/plotoptions/pie/
+ */
+ pie: {
+ donut: { labels: { show: true, value: { ...LABEL_VALUE }, total: { ...LABEL_TOTAL } } },
+ },
+ /**
+ * radialBar
+ * https://apexcharts.com/docs/options/plotoptions/radialbar/
+ */
+ radialBar: {
+ hollow: { margin: -8, size: '100%' },
+ track: {
+ margin: -8,
+ strokeWidth: '50%',
+ background: varAlpha(theme.vars.palette.grey['500Channel'], 0.16),
+ },
+ dataLabels: { value: { ...LABEL_VALUE }, total: { ...LABEL_TOTAL } },
+ },
+ /**
+ * radar
+ * https://apexcharts.com/docs/options/plotoptions/radar/
+ */
+ radar: {
+ polygons: {
+ fill: { colors: ['transparent'] },
+ strokeColors: theme.vars.palette.divider,
+ connectorColors: theme.vars.palette.divider,
+ },
+ },
+ /**
+ * polarArea
+ * https://apexcharts.com/docs/options/plotoptions/polararea/
+ */
+ polarArea: {
+ rings: { strokeColor: theme.vars.palette.divider },
+ spokes: { connectorColors: theme.vars.palette.divider },
+ },
+ /**
+ * heatmap
+ * https://apexcharts.com/docs/options/plotoptions/heatmap/
+ */
+ heatmap: { distributed: true },
+ },
+
+ /** **************************************
+ * Responsive
+ * https://apexcharts.com/docs/options/responsive/
+ *************************************** */
+ responsive: [
+ {
+ breakpoint: theme.breakpoints.values.sm, // sm ~ 600
+ options: { plotOptions: { bar: { borderRadius: 3, columnWidth: '80%' } } },
+ },
+ {
+ breakpoint: theme.breakpoints.values.md, // md ~ 900
+ options: { plotOptions: { bar: { columnWidth: '60%' } } },
+ },
+ ],
+ };
+};
diff --git a/src/components/color-utils/classes.ts b/src/components/color-utils/classes.ts
new file mode 100644
index 0000000..9bf4bbd
--- /dev/null
+++ b/src/components/color-utils/classes.ts
@@ -0,0 +1,18 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const colorPreviewClasses = {
+ root: createClasses('color__preview__root'),
+ item: createClasses('color__preview__item'),
+ label: createClasses('color__preview__label'),
+};
+
+export const colorPickerClasses = {
+ root: createClasses('color__picker__root'),
+ item: {
+ root: createClasses('color__picker__item__root'),
+ container: createClasses('color__picker__item__container'),
+ icon: createClasses('color__picker__item__icon'),
+ },
+};
diff --git a/src/components/color-utils/color-picker.tsx b/src/components/color-utils/color-picker.tsx
new file mode 100644
index 0000000..2dc3efe
--- /dev/null
+++ b/src/components/color-utils/color-picker.tsx
@@ -0,0 +1,179 @@
+import type { Theme, SxProps } from '@mui/material/styles';
+
+import { useCallback } from 'react';
+import { varAlpha, mergeClasses } from 'minimal-shared/utils';
+
+import ButtonBase from '@mui/material/ButtonBase';
+import { styled, alpha as hexAlpha } from '@mui/material/styles';
+
+import { Iconify } from '../iconify';
+import { colorPickerClasses } from './classes';
+
+// ----------------------------------------------------------------------
+
+export type ColorPickerSlotProps = {
+ item?: React.ComponentProps;
+ itemContainer?: React.ComponentProps;
+ icon?: React.ComponentProps;
+};
+
+export type ColorPickerProps = Omit, 'onChange'> & {
+ sx?: SxProps;
+ size?: number;
+ options?: string[];
+ limit?: 'auto' | number;
+ value?: string | string[];
+ variant?: 'circular' | 'rounded' | 'square';
+ onChange?: (value: string | string[]) => void;
+ slotProps?: ColorPickerSlotProps;
+};
+
+export function ColorPicker({
+ sx,
+ value,
+ onChange,
+ slotProps,
+ className,
+ size = 36,
+ options = [],
+ limit = 'auto',
+ variant = 'circular',
+ ...other
+}: ColorPickerProps) {
+ const isSingleSelect = typeof value === 'string';
+
+ const handleSelect = useCallback(
+ (color: string) => {
+ if (isSingleSelect) {
+ if (color !== value) {
+ onChange?.(color);
+ }
+ } else {
+ const selected = value as string[];
+
+ const newSelected = selected.includes(color)
+ ? selected.filter((currentColor) => currentColor !== color)
+ : [...selected, color];
+
+ onChange?.(newSelected);
+ }
+ },
+ [onChange, value, isSingleSelect]
+ );
+
+ return (
+
+ {options.map((color) => {
+ const hasSelected = isSingleSelect ? value === color : (value as string[]).includes(color);
+
+ return (
+
+ handleSelect(color)}
+ className={colorPickerClasses.item.root}
+ {...slotProps?.item}
+ >
+
+
+
+
+
+ );
+ })}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const ColorPickerRoot = styled('ul', {
+ shouldForwardProp: (prop: string) => !['limit', 'sx'].includes(prop),
+})>(({ limit }) => ({
+ flexWrap: 'wrap',
+ flexDirection: 'row',
+ display: 'inline-flex',
+ '& > li': { display: 'inline-flex' },
+ ...(typeof limit === 'number' && {
+ justifyContent: 'flex-end',
+ width: `calc(var(--item-size) * ${limit})`,
+ }),
+}));
+
+const ItemRoot = styled(ButtonBase)(() => ({
+ width: 'var(--item-size)',
+ height: 'var(--item-size)',
+ borderRadius: 'var(--item-radius)',
+}));
+
+const ItemContainer = styled('span', {
+ shouldForwardProp: (prop: string) => !['color', 'hasSelected', 'sx'].includes(prop),
+})<{ color: string; hasSelected: boolean }>(({ color, theme }) => ({
+ alignItems: 'center',
+ display: 'inline-flex',
+ borderRadius: 'inherit',
+ justifyContent: 'center',
+ backgroundColor: color,
+ width: 'calc(var(--item-size) - 16px)',
+ height: 'calc(var(--item-size) - 16px)',
+ border: `solid 1px ${varAlpha(theme.vars.palette.grey['500Channel'], 0.16)}`,
+ transition: theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.shortest,
+ }),
+ variants: [
+ {
+ props: { hasSelected: true },
+ style: {
+ width: 'calc(var(--item-size) - 8px)',
+ height: 'calc(var(--item-size) - 8px)',
+ outline: `solid 2px ${hexAlpha(color, 0.08)}`,
+ boxShadow: `4px 4px 8px 0 ${hexAlpha(color, 0.48)}`,
+ },
+ },
+ ],
+}));
+
+const ItemIcon = styled(Iconify, {
+ shouldForwardProp: (prop: string) => !['color', 'hasSelected', 'sx'].includes(prop),
+})<{ color: string; hasSelected: boolean }>(({ color, theme }) => ({
+ width: 0,
+ height: 0,
+ color: theme.palette.getContrastText(color),
+ transition: theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.shortest,
+ }),
+ variants: [
+ {
+ props: { hasSelected: true },
+ style: {
+ width: 'calc(var(--item-size) / 2.4)',
+ height: 'calc(var(--item-size) / 2.4)',
+ },
+ },
+ ],
+}));
diff --git a/src/components/color-utils/color-preview.tsx b/src/components/color-utils/color-preview.tsx
new file mode 100644
index 0000000..f485ad2
--- /dev/null
+++ b/src/components/color-utils/color-preview.tsx
@@ -0,0 +1,90 @@
+import { varAlpha, mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import { colorPreviewClasses } from './classes';
+
+// ----------------------------------------------------------------------
+
+export type ColorPreviewSlotProps = {
+ item?: React.ComponentProps;
+ label?: React.ComponentProps;
+};
+
+export type ColorPreviewProps = React.ComponentProps & {
+ limit?: number;
+ size?: number;
+ gap?: number;
+ colors: string[];
+ slotProps?: ColorPreviewSlotProps;
+};
+
+export function ColorPreview({
+ sx,
+ colors,
+ className,
+ slotProps,
+ gap = 6,
+ limit = 3,
+ size = 16,
+ ...other
+}: ColorPreviewProps) {
+ const colorsRange = colors.slice(0, limit);
+ const remainingColorCount = colors.length - limit;
+
+ return (
+
+ {colorsRange.map((color, index) => (
+
+ ))}
+
+ {colors.length > limit && (
+ {`+${remainingColorCount}`}
+ )}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const ColorPreviewRoot = styled('ul')(() => ({
+ display: 'flex',
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'flex-end',
+}));
+
+const ItemRoot = styled('li')(({ theme }) => ({
+ borderRadius: '50%',
+ width: 'var(--item-size)',
+ height: 'var(--item-size)',
+ marginLeft: 'var(--item-gap)',
+ backgroundColor: 'var(--item-color)',
+ border: `solid 2px ${theme.vars.palette.background.paper}`,
+ boxShadow: `inset -1px 1px 2px ${varAlpha(theme.vars.palette.common.blackChannel, 0.24)}`,
+}));
+
+const ItemLabel = styled('li')(({ theme }) => ({
+ ...theme.typography.subtitle2,
+}));
diff --git a/src/components/color-utils/index.ts b/src/components/color-utils/index.ts
new file mode 100644
index 0000000..efdd979
--- /dev/null
+++ b/src/components/color-utils/index.ts
@@ -0,0 +1,5 @@
+export * from './classes';
+
+export * from './color-picker';
+
+export * from './color-preview';
diff --git a/src/components/iconify/classes.ts b/src/components/iconify/classes.ts
new file mode 100644
index 0000000..6d4a463
--- /dev/null
+++ b/src/components/iconify/classes.ts
@@ -0,0 +1,7 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const iconifyClasses = {
+ root: createClasses('iconify__root'),
+};
diff --git a/src/components/iconify/icon-sets.ts b/src/components/iconify/icon-sets.ts
new file mode 100644
index 0000000..586e62c
--- /dev/null
+++ b/src/components/iconify/icon-sets.ts
@@ -0,0 +1,101 @@
+export default {
+ 'solar:pen-bold': {
+ body: '',
+ },
+ 'solar:eye-bold': {
+ body: '',
+ },
+ 'solar:share-bold': {
+ body: '',
+ },
+ 'solar:cart-3-bold': {
+ body: '',
+ },
+ 'solar:restart-bold': {
+ body: '',
+ },
+ 'solar:eye-closed-bold': {
+ body: '',
+ },
+ 'solar:check-circle-bold': {
+ body: '',
+ },
+ 'solar:trash-bin-trash-bold': {
+ body: '',
+ },
+ 'solar:chat-round-dots-bold': {
+ body: '',
+ },
+ 'solar:clock-circle-outline': {
+ body: '',
+ },
+ 'solar:bell-bing-bold-duotone': {
+ body: '',
+ },
+ 'solar:home-angle-bold-duotone': {
+ body: '',
+ },
+ 'solar:settings-bold-duotone': {
+ body: '',
+ },
+ 'solar:shield-keyhole-bold-duotone': {
+ body: '',
+ },
+ 'eva:more-vertical-fill': {
+ body: '',
+ },
+ 'eva:search-fill': {
+ body: '',
+ },
+ 'eva:done-all-fill': {
+ body: '',
+ },
+ 'eva:checkmark-fill': {
+ body: '',
+ },
+ 'eva:trending-down-fill': {
+ body: '',
+ },
+ 'eva:trending-up-fill': {
+ body: '',
+ },
+ 'eva:arrow-ios-forward-fill': {
+ body: '',
+ },
+ 'eva:arrow-ios-downward-fill': {
+ body: '',
+ },
+ 'eva:arrow-ios-upward-fill': {
+ body: '',
+ },
+ 'ic:round-filter-list': {
+ body: '',
+ },
+ 'mingcute:add-line': {
+ body: '',
+ },
+ 'mingcute:close-line': {
+ body: '',
+ },
+ 'carbon:chevron-sort': {
+ body: '',
+ },
+ 'socials:linkedin': {
+ body: '',
+ },
+ 'socials:facebook': {
+ body: '',
+ },
+ 'socials:github': {
+ body: '',
+ },
+ 'socials:twitter': {
+ body: '',
+ },
+ 'socials:google': {
+ body: ' ',
+ },
+ 'custom:menu-duotone': {
+ body: ' ',
+ },
+};
diff --git a/src/components/iconify/iconify.tsx b/src/components/iconify/iconify.tsx
new file mode 100644
index 0000000..8c18c95
--- /dev/null
+++ b/src/components/iconify/iconify.tsx
@@ -0,0 +1,58 @@
+import type { IconProps } from '@iconify/react';
+
+import { useId } from 'react';
+import { Icon } from '@iconify/react';
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import { iconifyClasses } from './classes';
+import { allIconNames, registerIcons } from './register-icons';
+
+import type { IconifyName } from './register-icons';
+
+// ----------------------------------------------------------------------
+
+export type IconifyProps = React.ComponentProps &
+ Omit & {
+ icon: IconifyName;
+ };
+
+export function Iconify({ className, icon, width = 20, height, sx, ...other }: IconifyProps) {
+ const id = useId();
+
+ if (!allIconNames.includes(icon)) {
+ console.warn(
+ [
+ `Icon "${icon}" is currently loaded online, which may cause flickering effects.`,
+ `To ensure a smoother experience, please register your icon collection for offline use.`,
+ `More information is available at: https://docs.minimals.cc/icons/`,
+ ].join('\n')
+ );
+ }
+
+ registerIcons();
+
+ return (
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const IconRoot = styled(Icon)``;
diff --git a/src/components/iconify/index.ts b/src/components/iconify/index.ts
new file mode 100644
index 0000000..72937f9
--- /dev/null
+++ b/src/components/iconify/index.ts
@@ -0,0 +1,5 @@
+export * from './classes';
+
+export * from './iconify';
+
+export * from './register-icons';
diff --git a/src/components/iconify/register-icons.ts b/src/components/iconify/register-icons.ts
new file mode 100644
index 0000000..f00575b
--- /dev/null
+++ b/src/components/iconify/register-icons.ts
@@ -0,0 +1,51 @@
+import type { IconifyJSON } from '@iconify/react';
+
+import { addCollection } from '@iconify/react';
+
+import allIcons from './icon-sets';
+
+// ----------------------------------------------------------------------
+
+export const iconSets = Object.entries(allIcons).reduce((acc, [key, value]) => {
+ const [prefix, iconName] = key.split(':');
+ const existingPrefix = acc.find((item) => item.prefix === prefix);
+
+ if (existingPrefix) {
+ existingPrefix.icons[iconName] = value;
+ } else {
+ acc.push({
+ prefix,
+ icons: {
+ [iconName]: value,
+ },
+ });
+ }
+
+ return acc;
+}, [] as IconifyJSON[]);
+
+export const allIconNames = Object.keys(allIcons) as IconifyName[];
+
+export type IconifyName = keyof typeof allIcons;
+
+// ----------------------------------------------------------------------
+
+let areIconsRegistered = false;
+
+export function registerIcons() {
+ if (areIconsRegistered) {
+ return;
+ }
+
+ iconSets.forEach((iconSet) => {
+ const iconSetConfig = {
+ ...iconSet,
+ width: (iconSet.prefix === 'carbon' && 32) || 24,
+ height: (iconSet.prefix === 'carbon' && 32) || 24,
+ };
+
+ addCollection(iconSetConfig);
+ });
+
+ areIconsRegistered = true;
+}
diff --git a/src/components/label/classes.ts b/src/components/label/classes.ts
new file mode 100644
index 0000000..0042053
--- /dev/null
+++ b/src/components/label/classes.ts
@@ -0,0 +1,8 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const labelClasses = {
+ root: createClasses('label__root'),
+ icon: createClasses('label__icon'),
+};
diff --git a/src/components/label/index.ts b/src/components/label/index.ts
new file mode 100644
index 0000000..71f3c7e
--- /dev/null
+++ b/src/components/label/index.ts
@@ -0,0 +1,7 @@
+export * from './label';
+
+export * from './styles';
+
+export * from './classes';
+
+export type * from './types';
diff --git a/src/components/label/label.tsx b/src/components/label/label.tsx
new file mode 100644
index 0000000..a2b07d6
--- /dev/null
+++ b/src/components/label/label.tsx
@@ -0,0 +1,38 @@
+import { upperFirst } from 'es-toolkit';
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { labelClasses } from './classes';
+import { LabelRoot, LabelIcon } from './styles';
+
+import type { LabelProps } from './types';
+
+// ----------------------------------------------------------------------
+
+export function Label({
+ sx,
+ endIcon,
+ children,
+ startIcon,
+ className,
+ disabled,
+ variant = 'soft',
+ color = 'default',
+ ...other
+}: LabelProps) {
+ return (
+
+ {startIcon && {startIcon}}
+
+ {typeof children === 'string' ? upperFirst(children) : children}
+
+ {endIcon && {endIcon}}
+
+ );
+}
diff --git a/src/components/label/styles.tsx b/src/components/label/styles.tsx
new file mode 100644
index 0000000..b266699
--- /dev/null
+++ b/src/components/label/styles.tsx
@@ -0,0 +1,116 @@
+import type { CSSObject } from '@mui/material/styles';
+
+import { varAlpha } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import type { LabelProps } from './types';
+
+// ----------------------------------------------------------------------
+
+export const LabelRoot = styled('span', {
+ shouldForwardProp: (prop: string) => !['color', 'variant', 'disabled', 'sx'].includes(prop),
+})(({ color, variant, disabled, theme }) => {
+ const defaultStyles: CSSObject = {
+ ...(color === 'default' && {
+ /**
+ * @variant filled
+ */
+ ...(variant === 'filled' && {
+ color: theme.vars.palette.common.white,
+ backgroundColor: theme.vars.palette.text.primary,
+ ...theme.applyStyles('dark', {
+ color: theme.vars.palette.grey[800],
+ }),
+ }),
+ /**
+ * @variant outlined
+ */
+ ...(variant === 'outlined' && {
+ backgroundColor: 'transparent',
+ color: theme.vars.palette.text.primary,
+ border: `2px solid ${theme.vars.palette.text.primary}`,
+ }),
+ /**
+ * @variant soft
+ */
+ ...(variant === 'soft' && {
+ color: theme.vars.palette.text.secondary,
+ backgroundColor: varAlpha(theme.vars.palette.grey['500Channel'], 0.16),
+ }),
+ /**
+ * @variant inverted
+ */
+ ...(variant === 'inverted' && {
+ color: theme.vars.palette.grey[800],
+ backgroundColor: theme.vars.palette.grey[300],
+ }),
+ }),
+ };
+
+ const colorStyles: CSSObject = {
+ ...(color &&
+ color !== 'default' && {
+ /**
+ * @variant filled
+ */
+ ...(variant === 'filled' && {
+ color: theme.vars.palette[color].contrastText,
+ backgroundColor: theme.vars.palette[color].main,
+ }),
+ /**
+ * @variant outlined
+ */
+ ...(variant === 'outlined' && {
+ backgroundColor: 'transparent',
+ color: theme.vars.palette[color].main,
+ border: `2px solid ${theme.vars.palette[color].main}`,
+ }),
+ /**
+ * @variant soft
+ */
+ ...(variant === 'soft' && {
+ color: theme.vars.palette[color].dark,
+ backgroundColor: varAlpha(theme.vars.palette[color].mainChannel, 0.16),
+ ...theme.applyStyles('dark', {
+ color: theme.vars.palette[color].light,
+ }),
+ }),
+ /**
+ * @variant inverted
+ */
+ ...(variant === 'inverted' && {
+ color: theme.vars.palette[color].darker,
+ backgroundColor: theme.vars.palette[color].lighter,
+ }),
+ }),
+ };
+
+ return {
+ height: 24,
+ minWidth: 24,
+ lineHeight: 0,
+ flexShrink: 0,
+ cursor: 'default',
+ alignItems: 'center',
+ whiteSpace: 'nowrap',
+ display: 'inline-flex',
+ gap: theme.spacing(0.75),
+ justifyContent: 'center',
+ padding: theme.spacing(0, 0.75),
+ fontSize: theme.typography.pxToRem(12),
+ fontWeight: theme.typography.fontWeightBold,
+ borderRadius: theme.shape.borderRadius * 0.75,
+ transition: theme.transitions.create(['all'], { duration: theme.transitions.duration.shorter }),
+ ...defaultStyles,
+ ...colorStyles,
+ ...(disabled && { opacity: 0.48, pointerEvents: 'none' }),
+ };
+});
+
+export const LabelIcon = styled('span')({
+ width: 16,
+ height: 16,
+ flexShrink: 0,
+ '& svg, img': { width: '100%', height: '100%', objectFit: 'cover' },
+});
diff --git a/src/components/label/types.ts b/src/components/label/types.ts
new file mode 100644
index 0000000..4db6635
--- /dev/null
+++ b/src/components/label/types.ts
@@ -0,0 +1,23 @@
+import type { Theme, SxProps } from '@mui/material/styles';
+
+// ----------------------------------------------------------------------
+
+export type LabelColor =
+ | 'default'
+ | 'primary'
+ | 'secondary'
+ | 'info'
+ | 'success'
+ | 'warning'
+ | 'error';
+
+export type LabelVariant = 'filled' | 'outlined' | 'soft' | 'inverted';
+
+export interface LabelProps extends React.ComponentProps<'span'> {
+ sx?: SxProps;
+ disabled?: boolean;
+ color?: LabelColor;
+ variant?: LabelVariant;
+ endIcon?: React.ReactNode;
+ startIcon?: React.ReactNode;
+}
diff --git a/src/components/logo/classes.ts b/src/components/logo/classes.ts
new file mode 100644
index 0000000..3801199
--- /dev/null
+++ b/src/components/logo/classes.ts
@@ -0,0 +1,7 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const logoClasses = {
+ root: createClasses('logo__root'),
+};
diff --git a/src/components/logo/index.ts b/src/components/logo/index.ts
new file mode 100644
index 0000000..b86e7ad
--- /dev/null
+++ b/src/components/logo/index.ts
@@ -0,0 +1,3 @@
+export * from './logo';
+
+export * from './classes';
diff --git a/src/components/logo/logo.tsx b/src/components/logo/logo.tsx
new file mode 100644
index 0000000..251b63e
--- /dev/null
+++ b/src/components/logo/logo.tsx
@@ -0,0 +1,197 @@
+import type { LinkProps } from '@mui/material/Link';
+
+import { useId } from 'react';
+import { mergeClasses } from 'minimal-shared/utils';
+
+import Link from '@mui/material/Link';
+import { styled, useTheme } from '@mui/material/styles';
+
+import { RouterLink } from 'src/routes/components';
+
+import { logoClasses } from './classes';
+
+// ----------------------------------------------------------------------
+
+export type LogoProps = LinkProps & {
+ isSingle?: boolean;
+ disabled?: boolean;
+};
+
+export function Logo({
+ sx,
+ disabled,
+ className,
+ href = '/',
+ isSingle = true,
+ ...other
+}: LogoProps) {
+ const theme = useTheme();
+
+ const gradientId = useId();
+
+ const TEXT_PRIMARY = theme.vars.palette.text.primary;
+ const PRIMARY_LIGHT = theme.vars.palette.primary.light;
+ const PRIMARY_MAIN = theme.vars.palette.primary.main;
+ const PRIMARY_DARKER = theme.vars.palette.primary.dark;
+
+ const singleLogo = (
+
+ );
+
+ const fullLogo = (
+
+ );
+
+ return (
+
+ {isSingle ? singleLogo : fullLogo}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const LogoRoot = styled(Link)(() => ({
+ flexShrink: 0,
+ color: 'transparent',
+ display: 'inline-flex',
+ verticalAlign: 'middle',
+}));
diff --git a/src/components/scrollbar/classes.ts b/src/components/scrollbar/classes.ts
new file mode 100644
index 0000000..8cdeacc
--- /dev/null
+++ b/src/components/scrollbar/classes.ts
@@ -0,0 +1,7 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const scrollbarClasses = {
+ root: createClasses('scrollbar__root'),
+};
diff --git a/src/components/scrollbar/index.ts b/src/components/scrollbar/index.ts
new file mode 100644
index 0000000..a483df6
--- /dev/null
+++ b/src/components/scrollbar/index.ts
@@ -0,0 +1,5 @@
+export * from './classes';
+
+export * from './scrollbar';
+
+export type * from './types';
diff --git a/src/components/scrollbar/scrollbar.tsx b/src/components/scrollbar/scrollbar.tsx
new file mode 100644
index 0000000..74c4ca3
--- /dev/null
+++ b/src/components/scrollbar/scrollbar.tsx
@@ -0,0 +1,60 @@
+import SimpleBar from 'simplebar-react';
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import { scrollbarClasses } from './classes';
+
+import type { ScrollbarProps } from './types';
+
+// ----------------------------------------------------------------------
+
+export function Scrollbar({
+ sx,
+ ref,
+ children,
+ className,
+ slotProps,
+ fillContent = true,
+ ...other
+}: ScrollbarProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const ScrollbarRoot = styled(SimpleBar, {
+ shouldForwardProp: (prop: string) => !['fillContent', 'sx'].includes(prop),
+})>(({ fillContent }) => ({
+ minWidth: 0,
+ minHeight: 0,
+ flexGrow: 1,
+ display: 'flex',
+ flexDirection: 'column',
+ ...(fillContent && {
+ '& .simplebar-content': {
+ display: 'flex',
+ flex: '1 1 auto',
+ minHeight: '100%',
+ flexDirection: 'column',
+ },
+ }),
+}));
diff --git a/src/components/scrollbar/styles.css b/src/components/scrollbar/styles.css
new file mode 100644
index 0000000..2fbf4d9
--- /dev/null
+++ b/src/components/scrollbar/styles.css
@@ -0,0 +1,8 @@
+@import 'simplebar-react/dist/simplebar.min.css';
+
+.simplebar-scrollbar:before {
+ background-color: var(--palette-text-disabled);
+}
+.simplebar-scrollbar.simplebar-visible:before {
+ opacity: 0.48;
+}
diff --git a/src/components/scrollbar/types.ts b/src/components/scrollbar/types.ts
new file mode 100644
index 0000000..c53cbb9
--- /dev/null
+++ b/src/components/scrollbar/types.ts
@@ -0,0 +1,15 @@
+import type { Theme, SxProps } from '@mui/material/styles';
+import type { Props as SimplebarProps } from 'simplebar-react';
+
+// ----------------------------------------------------------------------
+
+export type ScrollbarProps = SimplebarProps &
+ React.ComponentProps<'div'> & {
+ sx?: SxProps;
+ fillContent?: boolean;
+ slotProps?: {
+ wrapperSx?: SxProps;
+ contentSx?: SxProps;
+ contentWrapperSx?: SxProps;
+ };
+ };
diff --git a/src/components/svg-color/classes.ts b/src/components/svg-color/classes.ts
new file mode 100644
index 0000000..319b076
--- /dev/null
+++ b/src/components/svg-color/classes.ts
@@ -0,0 +1,7 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const svgColorClasses = {
+ root: createClasses('svg__color__root'),
+};
diff --git a/src/components/svg-color/index.ts b/src/components/svg-color/index.ts
new file mode 100644
index 0000000..372c31d
--- /dev/null
+++ b/src/components/svg-color/index.ts
@@ -0,0 +1,5 @@
+export * from './classes';
+
+export * from './svg-color';
+
+export type * from './types';
diff --git a/src/components/svg-color/svg-color.tsx b/src/components/svg-color/svg-color.tsx
new file mode 100644
index 0000000..023ab8a
--- /dev/null
+++ b/src/components/svg-color/svg-color.tsx
@@ -0,0 +1,35 @@
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import { svgColorClasses } from './classes';
+
+import type { SvgColorProps } from './types';
+
+// ----------------------------------------------------------------------
+
+export function SvgColor({ src, className, sx, ...other }: SvgColorProps) {
+ return (
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const SvgRoot = styled('span')(() => ({
+ width: 24,
+ height: 24,
+ flexShrink: 0,
+ display: 'inline-flex',
+ backgroundColor: 'currentColor',
+}));
diff --git a/src/components/svg-color/types.ts b/src/components/svg-color/types.ts
new file mode 100644
index 0000000..c790c87
--- /dev/null
+++ b/src/components/svg-color/types.ts
@@ -0,0 +1,8 @@
+import type { Theme, SxProps } from '@mui/material/styles';
+
+// ----------------------------------------------------------------------
+
+export type SvgColorProps = React.ComponentProps<'span'> & {
+ src: string;
+ sx?: SxProps;
+};
diff --git a/src/config-global.ts b/src/config-global.ts
new file mode 100644
index 0000000..067d7e4
--- /dev/null
+++ b/src/config-global.ts
@@ -0,0 +1,13 @@
+import packageJson from '../package.json';
+
+// ----------------------------------------------------------------------
+
+export type ConfigValue = {
+ appName: string;
+ appVersion: string;
+};
+
+export const CONFIG: ConfigValue = {
+ appName: 'Minimal UI',
+ appVersion: packageJson.version,
+};
diff --git a/src/global.css b/src/global.css
new file mode 100644
index 0000000..8bd8f44
--- /dev/null
+++ b/src/global.css
@@ -0,0 +1,56 @@
+/** **************************************
+* Fonts: app
+*************************************** */
+@import '@fontsource-variable/dm-sans';
+
+@import '@fontsource/barlow/400.css';
+@import '@fontsource/barlow/500.css';
+@import '@fontsource/barlow/600.css';
+@import '@fontsource/barlow/700.css';
+@import '@fontsource/barlow/800.css';
+
+/** **************************************
+* Plugins
+*************************************** */
+/* scrollbar */
+@import './components/scrollbar/styles.css';
+
+/* chart */
+@import './components/chart/styles.css';
+
+/** **************************************
+* Baseline
+*************************************** */
+html {
+ height: 100%;
+ -webkit-overflow-scrolling: touch;
+}
+body,
+#root,
+#root__layout {
+ display: flex;
+ flex: 1 1 auto;
+ min-height: 100%;
+ flex-direction: column;
+}
+img {
+ max-width: 100%;
+ vertical-align: middle;
+}
+ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+input[type='number'] {
+ -moz-appearance: textfield;
+ appearance: none;
+}
+input[type='number']::-webkit-outer-spin-button {
+ margin: 0;
+ -webkit-appearance: none;
+}
+input[type='number']::-webkit-inner-spin-button {
+ margin: 0;
+ -webkit-appearance: none;
+}
diff --git a/src/layouts/auth/content.tsx b/src/layouts/auth/content.tsx
new file mode 100644
index 0000000..dafddef
--- /dev/null
+++ b/src/layouts/auth/content.tsx
@@ -0,0 +1,36 @@
+import type { BoxProps } from '@mui/material/Box';
+
+import { mergeClasses } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+
+import { layoutClasses } from '../core/classes';
+
+// ----------------------------------------------------------------------
+
+export type AuthContentProps = BoxProps;
+
+export function AuthContent({ sx, children, className, ...other }: AuthContentProps) {
+ return (
+ ({
+ py: 5,
+ px: 3,
+ width: 1,
+ zIndex: 2,
+ borderRadius: 2,
+ display: 'flex',
+ flexDirection: 'column',
+ maxWidth: 'var(--layout-auth-content-width)',
+ bgcolor: theme.vars.palette.background.default,
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+ {children}
+
+ );
+}
diff --git a/src/layouts/auth/index.ts b/src/layouts/auth/index.ts
new file mode 100644
index 0000000..fa1aa0e
--- /dev/null
+++ b/src/layouts/auth/index.ts
@@ -0,0 +1,3 @@
+export * from './layout';
+
+export * from './content';
diff --git a/src/layouts/auth/layout.tsx b/src/layouts/auth/layout.tsx
new file mode 100644
index 0000000..d73d717
--- /dev/null
+++ b/src/layouts/auth/layout.tsx
@@ -0,0 +1,148 @@
+import type { CSSObject, Breakpoint } from '@mui/material/styles';
+
+import { merge } from 'es-toolkit';
+
+import Box from '@mui/material/Box';
+import Link from '@mui/material/Link';
+import Alert from '@mui/material/Alert';
+
+import { RouterLink } from 'src/routes/components';
+
+import { Logo } from 'src/components/logo';
+
+import { AuthContent } from './content';
+import { MainSection } from '../core/main-section';
+import { LayoutSection } from '../core/layout-section';
+import { HeaderSection } from '../core/header-section';
+
+import type { AuthContentProps } from './content';
+import type { MainSectionProps } from '../core/main-section';
+import type { HeaderSectionProps } from '../core/header-section';
+import type { LayoutSectionProps } from '../core/layout-section';
+
+// ----------------------------------------------------------------------
+
+type LayoutBaseProps = Pick;
+
+export type AuthLayoutProps = LayoutBaseProps & {
+ layoutQuery?: Breakpoint;
+ slotProps?: {
+ header?: HeaderSectionProps;
+ main?: MainSectionProps;
+ content?: AuthContentProps;
+ };
+};
+
+export function AuthLayout({
+ sx,
+ cssVars,
+ children,
+ slotProps,
+ layoutQuery = 'md',
+}: AuthLayoutProps) {
+ const renderHeader = () => {
+ const headerSlotProps: HeaderSectionProps['slotProps'] = { container: { maxWidth: false } };
+
+ const headerSlots: HeaderSectionProps['slots'] = {
+ topArea: (
+
+ This is an info Alert.
+
+ ),
+ leftArea: (
+ <>
+ {/** @slot Logo */}
+
+ >
+ ),
+ rightArea: (
+
+ {/** @slot Help link */}
+
+ Need help?
+
+
+ ),
+ };
+
+ return (
+
+ );
+ };
+
+ const renderFooter = () => null;
+
+ const renderMain = () => (
+ ({
+ alignItems: 'center',
+ p: theme.spacing(3, 2, 10, 2),
+ [theme.breakpoints.up(layoutQuery)]: {
+ justifyContent: 'center',
+ p: theme.spacing(10, 0, 10, 0),
+ },
+ }),
+ ...(Array.isArray(slotProps?.main?.sx)
+ ? (slotProps?.main?.sx ?? [])
+ : [slotProps?.main?.sx]),
+ ]}
+ >
+ {children}
+
+ );
+
+ return (
+ ({
+ position: 'relative',
+ '&::before': backgroundStyles(),
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ >
+ {renderMain()}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const backgroundStyles = (): CSSObject => ({
+ zIndex: 1,
+ opacity: 0.24,
+ width: '100%',
+ height: '100%',
+ content: "''",
+ position: 'absolute',
+ backgroundSize: 'cover',
+ backgroundRepeat: 'no-repeat',
+ backgroundPosition: 'center center',
+ backgroundImage: 'url(/assets/background/overlay.jpg)',
+});
diff --git a/src/layouts/components/account-popover.tsx b/src/layouts/components/account-popover.tsx
new file mode 100644
index 0000000..995efce
--- /dev/null
+++ b/src/layouts/components/account-popover.tsx
@@ -0,0 +1,139 @@
+import type { IconButtonProps } from '@mui/material/IconButton';
+
+import { useState, useCallback } from 'react';
+
+import Box from '@mui/material/Box';
+import Button from '@mui/material/Button';
+import Avatar from '@mui/material/Avatar';
+import Popover from '@mui/material/Popover';
+import Divider from '@mui/material/Divider';
+import MenuList from '@mui/material/MenuList';
+import Typography from '@mui/material/Typography';
+import IconButton from '@mui/material/IconButton';
+import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
+
+import { useRouter, usePathname } from 'src/routes/hooks';
+
+import { _myAccount } from 'src/_mock';
+
+// ----------------------------------------------------------------------
+
+export type AccountPopoverProps = IconButtonProps & {
+ data?: {
+ label: string;
+ href: string;
+ icon?: React.ReactNode;
+ info?: React.ReactNode;
+ }[];
+};
+
+export function AccountPopover({ data = [], sx, ...other }: AccountPopoverProps) {
+ const router = useRouter();
+
+ const pathname = usePathname();
+
+ const [openPopover, setOpenPopover] = useState(null);
+
+ const handleOpenPopover = useCallback((event: React.MouseEvent) => {
+ setOpenPopover(event.currentTarget);
+ }, []);
+
+ const handleClosePopover = useCallback(() => {
+ setOpenPopover(null);
+ }, []);
+
+ const handleClickItem = useCallback(
+ (path: string) => {
+ handleClosePopover();
+ router.push(path);
+ },
+ [handleClosePopover, router]
+ );
+
+ return (
+ <>
+
+ `conic-gradient(${theme.vars.palette.primary.light}, ${theme.vars.palette.warning.light}, ${theme.vars.palette.primary.light})`,
+ ...sx,
+ }}
+ {...other}
+ >
+
+ {_myAccount.displayName.charAt(0).toUpperCase()}
+
+
+
+
+
+
+ {_myAccount?.displayName}
+
+
+
+ {_myAccount?.email}
+
+
+
+
+
+
+ {data.map((option) => (
+
+ ))}
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/layouts/components/language-popover.tsx b/src/layouts/components/language-popover.tsx
new file mode 100644
index 0000000..1829e8b
--- /dev/null
+++ b/src/layouts/components/language-popover.tsx
@@ -0,0 +1,109 @@
+import type { IconButtonProps } from '@mui/material/IconButton';
+
+import { useState, useCallback } from 'react';
+import { usePopover } from 'minimal-shared/hooks';
+
+import Box from '@mui/material/Box';
+import Popover from '@mui/material/Popover';
+import MenuList from '@mui/material/MenuList';
+import IconButton from '@mui/material/IconButton';
+import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
+
+// ----------------------------------------------------------------------
+
+export type LanguagePopoverProps = IconButtonProps & {
+ data?: {
+ value: string;
+ label: string;
+ icon: string;
+ }[];
+};
+
+export function LanguagePopover({ data = [], sx, ...other }: LanguagePopoverProps) {
+ const { open, anchorEl, onClose, onOpen } = usePopover();
+
+ const [locale, setLocale] = useState(data[0].value);
+
+ const handleChangeLang = useCallback(
+ (newLang: string) => {
+ setLocale(newLang);
+ onClose();
+ },
+ [onClose]
+ );
+
+ const currentLang = data.find((lang) => lang.value === locale);
+
+ const renderFlag = (label?: string, icon?: string) => (
+
+ );
+
+ const renderMenuList = () => (
+
+
+ {data?.map((option) => (
+
+ ))}
+
+
+ );
+
+ return (
+ <>
+ ({
+ p: 0,
+ width: 40,
+ height: 40,
+ ...(open && { bgcolor: theme.vars.palette.action.selected }),
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+ {renderFlag(currentLang?.label, currentLang?.icon)}
+
+
+ {renderMenuList()}
+ >
+ );
+}
diff --git a/src/layouts/components/menu-button.tsx b/src/layouts/components/menu-button.tsx
new file mode 100644
index 0000000..c1f226b
--- /dev/null
+++ b/src/layouts/components/menu-button.tsx
@@ -0,0 +1,15 @@
+import type { IconButtonProps } from '@mui/material/IconButton';
+
+import IconButton from '@mui/material/IconButton';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+export function MenuButton({ sx, ...other }: IconButtonProps) {
+ return (
+
+
+
+ );
+}
diff --git a/src/layouts/components/nav-upgrade.tsx b/src/layouts/components/nav-upgrade.tsx
new file mode 100644
index 0000000..92861aa
--- /dev/null
+++ b/src/layouts/components/nav-upgrade.tsx
@@ -0,0 +1,64 @@
+import type { StackProps } from '@mui/material/Stack';
+
+import Box from '@mui/material/Box';
+import Button from '@mui/material/Button';
+import Typography from '@mui/material/Typography';
+
+// ----------------------------------------------------------------------
+
+export function NavUpgrade({ sx, ...other }: StackProps) {
+ return (
+
+ ({
+ background: `linear-gradient(to right, ${theme.vars.palette.secondary.main}, ${theme.vars.palette.warning.main})`,
+ WebkitBackgroundClip: 'text',
+ WebkitTextFillColor: 'transparent',
+ backgroundClip: 'text',
+ textFillColor: 'transparent',
+ color: 'transparent',
+ }),
+ ]}
+ >
+ More features?
+
+
+
+ {`From only `}
+
+ $69
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/layouts/components/notifications-popover.tsx b/src/layouts/components/notifications-popover.tsx
new file mode 100644
index 0000000..3a70318
--- /dev/null
+++ b/src/layouts/components/notifications-popover.tsx
@@ -0,0 +1,259 @@
+import type { IconButtonProps } from '@mui/material/IconButton';
+
+import { useState, useCallback } from 'react';
+
+import Box from '@mui/material/Box';
+import List from '@mui/material/List';
+import Badge from '@mui/material/Badge';
+import Button from '@mui/material/Button';
+import Avatar from '@mui/material/Avatar';
+import Divider from '@mui/material/Divider';
+import Tooltip from '@mui/material/Tooltip';
+import Popover from '@mui/material/Popover';
+import Typography from '@mui/material/Typography';
+import IconButton from '@mui/material/IconButton';
+import ListItemText from '@mui/material/ListItemText';
+import ListSubheader from '@mui/material/ListSubheader';
+import ListItemAvatar from '@mui/material/ListItemAvatar';
+import ListItemButton from '@mui/material/ListItemButton';
+
+import { fToNow } from 'src/utils/format-time';
+
+import { Iconify } from 'src/components/iconify';
+import { Scrollbar } from 'src/components/scrollbar';
+
+// ----------------------------------------------------------------------
+
+type NotificationItemProps = {
+ id: string;
+ type: string;
+ title: string;
+ isUnRead: boolean;
+ description: string;
+ avatarUrl: string | null;
+ postedAt: string | number | null;
+};
+
+export type NotificationsPopoverProps = IconButtonProps & {
+ data?: NotificationItemProps[];
+};
+
+export function NotificationsPopover({ data = [], sx, ...other }: NotificationsPopoverProps) {
+ const [notifications, setNotifications] = useState(data);
+
+ const totalUnRead = notifications.filter((item) => item.isUnRead === true).length;
+
+ const [openPopover, setOpenPopover] = useState(null);
+
+ const handleOpenPopover = useCallback((event: React.MouseEvent) => {
+ setOpenPopover(event.currentTarget);
+ }, []);
+
+ const handleClosePopover = useCallback(() => {
+ setOpenPopover(null);
+ }, []);
+
+ const handleMarkAllAsRead = useCallback(() => {
+ const updatedNotifications = notifications.map((notification) => ({
+ ...notification,
+ isUnRead: false,
+ }));
+
+ setNotifications(updatedNotifications);
+ }, [notifications]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ Notifications
+
+ You have {totalUnRead} unread messages
+
+
+
+ {totalUnRead > 0 && (
+
+
+
+
+
+ )}
+
+
+
+
+
+
+ New
+
+ }
+ >
+ {notifications.slice(0, 2).map((notification) => (
+
+ ))}
+
+
+
+ Before that
+
+ }
+ >
+ {notifications.slice(2, 5).map((notification) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+// ----------------------------------------------------------------------
+
+function NotificationItem({ notification }: { notification: NotificationItemProps }) {
+ const { avatarUrl, title } = renderContent(notification);
+
+ return (
+
+
+ {avatarUrl}
+
+
+
+ {fToNow(notification.postedAt)}
+
+ }
+ />
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+function renderContent(notification: NotificationItemProps) {
+ const title = (
+
+ {notification.title}
+
+ {notification.description}
+
+
+ );
+
+ if (notification.type === 'order-placed') {
+ return {
+ avatarUrl: (
+
+ ),
+ title,
+ };
+ }
+ if (notification.type === 'order-shipped') {
+ return {
+ avatarUrl: (
+
+ ),
+ title,
+ };
+ }
+ if (notification.type === 'mail') {
+ return {
+ avatarUrl: (
+
+ ),
+ title,
+ };
+ }
+ if (notification.type === 'chat-message') {
+ return {
+ avatarUrl: (
+
+ ),
+ title,
+ };
+ }
+ return {
+ avatarUrl: notification.avatarUrl ? (
+
+ ) : null,
+ title,
+ };
+}
diff --git a/src/layouts/components/searchbar.tsx b/src/layouts/components/searchbar.tsx
new file mode 100644
index 0000000..31ac203
--- /dev/null
+++ b/src/layouts/components/searchbar.tsx
@@ -0,0 +1,84 @@
+import type { BoxProps } from '@mui/material/Box';
+
+import { useState, useCallback } from 'react';
+import { varAlpha } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import Slide from '@mui/material/Slide';
+import Input from '@mui/material/Input';
+import Button from '@mui/material/Button';
+import { useTheme } from '@mui/material/styles';
+import IconButton from '@mui/material/IconButton';
+import InputAdornment from '@mui/material/InputAdornment';
+import ClickAwayListener from '@mui/material/ClickAwayListener';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+export function Searchbar({ sx, ...other }: BoxProps) {
+ const theme = useTheme();
+
+ const [open, setOpen] = useState(false);
+
+ const handleOpen = useCallback(() => {
+ setOpen((prev) => !prev);
+ }, []);
+
+ const handleClose = useCallback(() => {
+ setOpen(false);
+ }, []);
+
+ return (
+
+
+ {!open && (
+
+
+
+ )}
+
+
+
+
+
+
+ }
+ sx={{ fontWeight: 'fontWeightBold' }}
+ />
+
+
+
+
+
+ );
+}
diff --git a/src/layouts/components/workspaces-popover.tsx b/src/layouts/components/workspaces-popover.tsx
new file mode 100644
index 0000000..56b473c
--- /dev/null
+++ b/src/layouts/components/workspaces-popover.tsx
@@ -0,0 +1,132 @@
+import type { ButtonBaseProps } from '@mui/material/ButtonBase';
+
+import { useState, useCallback } from 'react';
+import { varAlpha } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import Popover from '@mui/material/Popover';
+import MenuList from '@mui/material/MenuList';
+import ButtonBase from '@mui/material/ButtonBase';
+import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
+
+import { Label } from 'src/components/label';
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+export type WorkspacesPopoverProps = ButtonBaseProps & {
+ data?: {
+ id: string;
+ name: string;
+ logo: string;
+ plan: string;
+ }[];
+};
+
+export function WorkspacesPopover({ data = [], sx, ...other }: WorkspacesPopoverProps) {
+ const [workspace, setWorkspace] = useState(data[0]);
+
+ const [openPopover, setOpenPopover] = useState(null);
+
+ const handleOpenPopover = useCallback((event: React.MouseEvent) => {
+ setOpenPopover(event.currentTarget);
+ }, []);
+
+ const handleClosePopover = useCallback(() => {
+ setOpenPopover(null);
+ }, []);
+
+ const handleChangeWorkspace = useCallback(
+ (newValue: (typeof data)[number]) => {
+ setWorkspace(newValue);
+ handleClosePopover();
+ },
+ [handleClosePopover]
+ );
+
+ const renderAvatar = (alt: string, src: string) => (
+
+ );
+
+ const renderLabel = (plan: string) => (
+
+ );
+
+ return (
+ <>
+ varAlpha(theme.vars.palette.grey['500Channel'], 0.08),
+ ...sx,
+ }}
+ {...other}
+ >
+ {renderAvatar(workspace?.name, workspace?.logo)}
+
+
+ {workspace?.name}
+ {renderLabel(workspace?.plan)}
+
+
+
+
+
+
+
+ {data.map((option) => (
+
+ ))}
+
+
+ >
+ );
+}
diff --git a/src/layouts/core/classes.ts b/src/layouts/core/classes.ts
new file mode 100644
index 0000000..7058c09
--- /dev/null
+++ b/src/layouts/core/classes.ts
@@ -0,0 +1,17 @@
+import { createClasses } from 'src/theme/create-classes';
+
+// ----------------------------------------------------------------------
+
+export const layoutClasses = {
+ root: createClasses('layout__root'),
+ main: createClasses('layout__main'),
+ header: createClasses('layout__header'),
+ nav: {
+ root: createClasses('layout__nav__root'),
+ mobile: createClasses('layout__nav__mobile'),
+ vertical: createClasses('layout__nav__vertical'),
+ horizontal: createClasses('layout__nav__horizontal'),
+ },
+ content: createClasses('layout__main__content'),
+ sidebarContainer: createClasses('layout__sidebar__container'),
+};
diff --git a/src/layouts/core/css-vars.ts b/src/layouts/core/css-vars.ts
new file mode 100644
index 0000000..2edd9c5
--- /dev/null
+++ b/src/layouts/core/css-vars.ts
@@ -0,0 +1,14 @@
+import type { Theme } from '@mui/material/styles';
+
+// ----------------------------------------------------------------------
+
+export function layoutSectionVars(theme: Theme) {
+ return {
+ '--layout-nav-zIndex': theme.zIndex.drawer + 1,
+ '--layout-nav-mobile-width': '288px',
+ '--layout-header-blur': '8px',
+ '--layout-header-zIndex': theme.zIndex.appBar + 1,
+ '--layout-header-mobile-height': '64px',
+ '--layout-header-desktop-height': '72px',
+ };
+}
diff --git a/src/layouts/core/header-section.tsx b/src/layouts/core/header-section.tsx
new file mode 100644
index 0000000..336f00f
--- /dev/null
+++ b/src/layouts/core/header-section.tsx
@@ -0,0 +1,153 @@
+import type { AppBarProps } from '@mui/material/AppBar';
+import type { ContainerProps } from '@mui/material/Container';
+import type { Theme, SxProps, CSSObject, Breakpoint } from '@mui/material/styles';
+
+import { useScrollOffsetTop } from 'minimal-shared/hooks';
+import { varAlpha, mergeClasses } from 'minimal-shared/utils';
+
+import AppBar from '@mui/material/AppBar';
+import { styled } from '@mui/material/styles';
+import Container from '@mui/material/Container';
+
+import { layoutClasses } from './classes';
+
+// ----------------------------------------------------------------------
+
+export type HeaderSectionProps = AppBarProps & {
+ layoutQuery?: Breakpoint;
+ disableOffset?: boolean;
+ disableElevation?: boolean;
+ slots?: {
+ leftArea?: React.ReactNode;
+ rightArea?: React.ReactNode;
+ topArea?: React.ReactNode;
+ centerArea?: React.ReactNode;
+ bottomArea?: React.ReactNode;
+ };
+ slotProps?: {
+ container?: ContainerProps;
+ centerArea?: React.ComponentProps<'div'> & { sx?: SxProps };
+ };
+};
+
+export function HeaderSection({
+ sx,
+ slots,
+ slotProps,
+ className,
+ disableOffset,
+ disableElevation,
+ layoutQuery = 'md',
+ ...other
+}: HeaderSectionProps) {
+ const { offsetTop: isOffset } = useScrollOffsetTop();
+
+ return (
+ ({
+ ...(isOffset && {
+ '--color': `var(--offset-color, ${theme.vars.palette.text.primary})`,
+ }),
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+ {slots?.topArea}
+
+
+ {slots?.leftArea}
+
+ {slots?.centerArea}
+
+ {slots?.rightArea}
+
+
+ {slots?.bottomArea}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+type HeaderRootProps = Pick & {
+ isOffset: boolean;
+};
+
+const HeaderRoot = styled(AppBar, {
+ shouldForwardProp: (prop: string) =>
+ !['isOffset', 'disableOffset', 'disableElevation', 'sx'].includes(prop),
+})(({ isOffset, disableOffset, disableElevation, theme }) => {
+ const pauseZindex = { top: -1, bottom: -2 };
+
+ const pauseStyles: CSSObject = {
+ opacity: 0,
+ content: '""',
+ visibility: 'hidden',
+ position: 'absolute',
+ transition: theme.transitions.create(['opacity', 'visibility'], {
+ easing: theme.transitions.easing.easeInOut,
+ duration: theme.transitions.duration.shorter,
+ }),
+ };
+
+ const bgStyles: CSSObject = {
+ ...pauseStyles,
+ top: 0,
+ left: 0,
+ width: '100%',
+ height: '100%',
+ zIndex: pauseZindex.top,
+ backdropFilter: `blur(6px)`,
+ WebkitBackdropFilter: `blur(6px)`,
+ backgroundColor: varAlpha(theme.vars.palette.background.defaultChannel, 0.8),
+ ...(isOffset && {
+ opacity: 1,
+ visibility: 'visible',
+ }),
+ };
+
+ const shadowStyles: CSSObject = {
+ ...pauseStyles,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ height: 24,
+ margin: 'auto',
+ borderRadius: '50%',
+ width: `calc(100% - 48px)`,
+ zIndex: pauseZindex.bottom,
+ boxShadow: theme.vars.customShadows.z8,
+ ...(isOffset && { opacity: 0.48, visibility: 'visible' }),
+ };
+
+ return {
+ boxShadow: 'none',
+ zIndex: 'var(--layout-header-zIndex)',
+ ...(!disableOffset && { '&::before': bgStyles }),
+ ...(!disableElevation && { '&::after': shadowStyles }),
+ };
+});
+
+const HeaderContainer = styled(Container, {
+ shouldForwardProp: (prop: string) => !['layoutQuery', 'sx'].includes(prop),
+})>(({ layoutQuery = 'md', theme }) => ({
+ display: 'flex',
+ alignItems: 'center',
+ color: 'var(--color)',
+ height: 'var(--layout-header-mobile-height)',
+ [theme.breakpoints.up(layoutQuery)]: { height: 'var(--layout-header-desktop-height)' },
+}));
+
+const HeaderCenterArea = styled('div')(() => ({
+ display: 'flex',
+ flex: '1 1 auto',
+ justifyContent: 'center',
+}));
diff --git a/src/layouts/core/index.ts b/src/layouts/core/index.ts
new file mode 100644
index 0000000..c68992f
--- /dev/null
+++ b/src/layouts/core/index.ts
@@ -0,0 +1,9 @@
+export * from './classes';
+
+export * from './css-vars';
+
+export * from './main-section';
+
+export * from './layout-section';
+
+export * from './header-section';
diff --git a/src/layouts/core/layout-section.tsx b/src/layouts/core/layout-section.tsx
new file mode 100644
index 0000000..1789aa2
--- /dev/null
+++ b/src/layouts/core/layout-section.tsx
@@ -0,0 +1,75 @@
+import type { Theme, SxProps, CSSObject } from '@mui/material/styles';
+
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+import GlobalStyles from '@mui/material/GlobalStyles';
+
+import { layoutClasses } from './classes';
+import { layoutSectionVars } from './css-vars';
+
+// ----------------------------------------------------------------------
+
+export type LayoutSectionProps = React.ComponentProps<'div'> & {
+ sx?: SxProps;
+ cssVars?: CSSObject;
+ children?: React.ReactNode;
+ footerSection?: React.ReactNode;
+ headerSection?: React.ReactNode;
+ sidebarSection?: React.ReactNode;
+};
+
+export function LayoutSection({
+ sx,
+ cssVars,
+ children,
+ footerSection,
+ headerSection,
+ sidebarSection,
+ className,
+ ...other
+}: LayoutSectionProps) {
+ const inputGlobalStyles = (
+ ({ body: { ...layoutSectionVars(theme), ...cssVars } })} />
+ );
+
+ return (
+ <>
+ {inputGlobalStyles}
+
+
+ {sidebarSection ? (
+ <>
+ {sidebarSection}
+
+ {headerSection}
+ {children}
+ {footerSection}
+
+ >
+ ) : (
+ <>
+ {headerSection}
+ {children}
+ {footerSection}
+ >
+ )}
+
+ >
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const LayoutRoot = styled('div')``;
+
+const LayoutSidebarContainer = styled('div')(() => ({
+ display: 'flex',
+ flex: '1 1 auto',
+ flexDirection: 'column',
+}));
diff --git a/src/layouts/core/main-section.tsx b/src/layouts/core/main-section.tsx
new file mode 100644
index 0000000..1ac05c7
--- /dev/null
+++ b/src/layouts/core/main-section.tsx
@@ -0,0 +1,25 @@
+import { mergeClasses } from 'minimal-shared/utils';
+
+import { styled } from '@mui/material/styles';
+
+import { layoutClasses } from './classes';
+
+// ----------------------------------------------------------------------
+
+export type MainSectionProps = React.ComponentProps;
+
+export function MainSection({ children, className, sx, ...other }: MainSectionProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+const MainRoot = styled('main')({
+ display: 'flex',
+ flex: '1 1 auto',
+ flexDirection: 'column',
+});
diff --git a/src/layouts/dashboard/content.tsx b/src/layouts/dashboard/content.tsx
new file mode 100644
index 0000000..b007718
--- /dev/null
+++ b/src/layouts/dashboard/content.tsx
@@ -0,0 +1,57 @@
+import type { Breakpoint } from '@mui/material/styles';
+import type { ContainerProps } from '@mui/material/Container';
+
+import { mergeClasses } from 'minimal-shared/utils';
+
+import Container from '@mui/material/Container';
+
+import { layoutClasses } from '../core/classes';
+
+// ----------------------------------------------------------------------
+
+export type DashboardContentProps = ContainerProps & {
+ layoutQuery?: Breakpoint;
+ disablePadding?: boolean;
+};
+
+export function DashboardContent({
+ sx,
+ children,
+ className,
+ disablePadding,
+ maxWidth = 'lg',
+ layoutQuery = 'lg',
+ ...other
+}: DashboardContentProps) {
+ return (
+ ({
+ display: 'flex',
+ flex: '1 1 auto',
+ flexDirection: 'column',
+ pt: 'var(--layout-dashboard-content-pt)',
+ pb: 'var(--layout-dashboard-content-pb)',
+ [theme.breakpoints.up(layoutQuery)]: {
+ px: 'var(--layout-dashboard-content-px)',
+ },
+ ...(disablePadding && {
+ p: {
+ xs: 0,
+ sm: 0,
+ md: 0,
+ lg: 0,
+ xl: 0,
+ },
+ }),
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+ {children}
+
+ );
+}
diff --git a/src/layouts/dashboard/css-vars.ts b/src/layouts/dashboard/css-vars.ts
new file mode 100644
index 0000000..d9220af
--- /dev/null
+++ b/src/layouts/dashboard/css-vars.ts
@@ -0,0 +1,14 @@
+import type { Theme } from '@mui/material/styles';
+
+// ----------------------------------------------------------------------
+
+export function dashboardLayoutVars(theme: Theme) {
+ return {
+ '--layout-transition-easing': 'linear',
+ '--layout-transition-duration': '120ms',
+ '--layout-nav-vertical-width': '300px',
+ '--layout-dashboard-content-pt': theme.spacing(1),
+ '--layout-dashboard-content-pb': theme.spacing(8),
+ '--layout-dashboard-content-px': theme.spacing(5),
+ };
+}
diff --git a/src/layouts/dashboard/index.ts b/src/layouts/dashboard/index.ts
new file mode 100644
index 0000000..fa1aa0e
--- /dev/null
+++ b/src/layouts/dashboard/index.ts
@@ -0,0 +1,3 @@
+export * from './layout';
+
+export * from './content';
diff --git a/src/layouts/dashboard/layout.tsx b/src/layouts/dashboard/layout.tsx
new file mode 100644
index 0000000..3002b83
--- /dev/null
+++ b/src/layouts/dashboard/layout.tsx
@@ -0,0 +1,148 @@
+import type { Breakpoint } from '@mui/material/styles';
+
+import { merge } from 'es-toolkit';
+import { useBoolean } from 'minimal-shared/hooks';
+
+import Box from '@mui/material/Box';
+import Alert from '@mui/material/Alert';
+import { useTheme } from '@mui/material/styles';
+
+import { _langs, _notifications } from 'src/_mock';
+
+import { NavMobile, NavDesktop } from './nav';
+import { layoutClasses } from '../core/classes';
+import { _account } from '../nav-config-account';
+import { dashboardLayoutVars } from './css-vars';
+import { navData } from '../nav-config-dashboard';
+import { MainSection } from '../core/main-section';
+import { Searchbar } from '../components/searchbar';
+import { _workspaces } from '../nav-config-workspace';
+import { MenuButton } from '../components/menu-button';
+import { HeaderSection } from '../core/header-section';
+import { LayoutSection } from '../core/layout-section';
+import { AccountPopover } from '../components/account-popover';
+import { LanguagePopover } from '../components/language-popover';
+import { NotificationsPopover } from '../components/notifications-popover';
+
+import type { MainSectionProps } from '../core/main-section';
+import type { HeaderSectionProps } from '../core/header-section';
+import type { LayoutSectionProps } from '../core/layout-section';
+
+// ----------------------------------------------------------------------
+
+type LayoutBaseProps = Pick;
+
+export type DashboardLayoutProps = LayoutBaseProps & {
+ layoutQuery?: Breakpoint;
+ slotProps?: {
+ header?: HeaderSectionProps;
+ main?: MainSectionProps;
+ };
+};
+
+export function DashboardLayout({
+ sx,
+ cssVars,
+ children,
+ slotProps,
+ layoutQuery = 'lg',
+}: DashboardLayoutProps) {
+ const theme = useTheme();
+
+ const { value: open, onFalse: onClose, onTrue: onOpen } = useBoolean();
+
+ const renderHeader = () => {
+ const headerSlotProps: HeaderSectionProps['slotProps'] = {
+ container: {
+ maxWidth: false,
+ },
+ };
+
+ const headerSlots: HeaderSectionProps['slots'] = {
+ topArea: (
+
+ This is an info Alert.
+
+ ),
+ leftArea: (
+ <>
+ {/** @slot Nav mobile */}
+
+
+ >
+ ),
+ rightArea: (
+
+ {/** @slot Searchbar */}
+
+
+ {/** @slot Language popover */}
+
+
+ {/** @slot Notifications popover */}
+
+
+ {/** @slot Account drawer */}
+
+
+ ),
+ };
+
+ return (
+
+ );
+ };
+
+ const renderFooter = () => null;
+
+ const renderMain = () => {children};
+
+ return (
+
+ }
+ /** **************************************
+ * @Footer
+ *************************************** */
+ footerSection={renderFooter()}
+ /** **************************************
+ * @Styles
+ *************************************** */
+ cssVars={{ ...dashboardLayoutVars(theme), ...cssVars }}
+ sx={[
+ {
+ [`& .${layoutClasses.sidebarContainer}`]: {
+ [theme.breakpoints.up(layoutQuery)]: {
+ pl: 'var(--layout-nav-vertical-width)',
+ transition: theme.transitions.create(['padding-left'], {
+ easing: 'var(--layout-transition-easing)',
+ duration: 'var(--layout-transition-duration)',
+ }),
+ },
+ },
+ },
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ >
+ {renderMain()}
+
+ );
+}
diff --git a/src/layouts/dashboard/nav.tsx b/src/layouts/dashboard/nav.tsx
new file mode 100644
index 0000000..f46007d
--- /dev/null
+++ b/src/layouts/dashboard/nav.tsx
@@ -0,0 +1,194 @@
+import type { Theme, SxProps, Breakpoint } from '@mui/material/styles';
+
+import { useEffect } from 'react';
+import { varAlpha } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import ListItem from '@mui/material/ListItem';
+import { useTheme } from '@mui/material/styles';
+import ListItemButton from '@mui/material/ListItemButton';
+import Drawer, { drawerClasses } from '@mui/material/Drawer';
+
+import { usePathname } from 'src/routes/hooks';
+import { RouterLink } from 'src/routes/components';
+
+import { Logo } from 'src/components/logo';
+import { Scrollbar } from 'src/components/scrollbar';
+
+import { NavUpgrade } from '../components/nav-upgrade';
+import { WorkspacesPopover } from '../components/workspaces-popover';
+
+import type { NavItem } from '../nav-config-dashboard';
+import type { WorkspacesPopoverProps } from '../components/workspaces-popover';
+
+// ----------------------------------------------------------------------
+
+export type NavContentProps = {
+ data: NavItem[];
+ slots?: {
+ topArea?: React.ReactNode;
+ bottomArea?: React.ReactNode;
+ };
+ workspaces: WorkspacesPopoverProps['data'];
+ sx?: SxProps;
+};
+
+export function NavDesktop({
+ sx,
+ data,
+ slots,
+ workspaces,
+ layoutQuery,
+}: NavContentProps & { layoutQuery: Breakpoint }) {
+ const theme = useTheme();
+
+ return (
+
+
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+export function NavMobile({
+ sx,
+ data,
+ open,
+ slots,
+ onClose,
+ workspaces,
+}: NavContentProps & { open: boolean; onClose: () => void }) {
+ const pathname = usePathname();
+
+ useEffect(() => {
+ if (open) {
+ onClose();
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [pathname]);
+
+ return (
+
+
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+export function NavContent({ data, slots, workspaces, sx }: NavContentProps) {
+ const pathname = usePathname();
+
+ return (
+ <>
+
+
+ {slots?.topArea}
+
+
+
+
+
+
+ {data.map((item) => {
+ const isActived = item.path === pathname;
+
+ return (
+
+ ({
+ pl: 2,
+ py: 1,
+ gap: 2,
+ pr: 1.5,
+ borderRadius: 0.75,
+ typography: 'body2',
+ fontWeight: 'fontWeightMedium',
+ color: theme.vars.palette.text.secondary,
+ minHeight: 44,
+ ...(isActived && {
+ fontWeight: 'fontWeightSemiBold',
+ color: theme.vars.palette.primary.main,
+ bgcolor: varAlpha(theme.vars.palette.primary.mainChannel, 0.08),
+ '&:hover': {
+ bgcolor: varAlpha(theme.vars.palette.primary.mainChannel, 0.16),
+ },
+ }),
+ }),
+ ]}
+ >
+
+ {item.icon}
+
+
+
+ {item.title}
+
+
+ {item.info && item.info}
+
+
+ );
+ })}
+
+
+
+
+ {slots?.bottomArea}
+
+
+ >
+ );
+}
diff --git a/src/layouts/nav-config-account.tsx b/src/layouts/nav-config-account.tsx
new file mode 100644
index 0000000..ea32510
--- /dev/null
+++ b/src/layouts/nav-config-account.tsx
@@ -0,0 +1,23 @@
+import { Iconify } from 'src/components/iconify';
+
+import type { AccountPopoverProps } from './components/account-popover';
+
+// ----------------------------------------------------------------------
+
+export const _account: AccountPopoverProps['data'] = [
+ {
+ label: 'Home',
+ href: '/',
+ icon: ,
+ },
+ {
+ label: 'Profile',
+ href: '#',
+ icon: ,
+ },
+ {
+ label: 'Settings',
+ href: '#',
+ icon: ,
+ },
+];
diff --git a/src/layouts/nav-config-dashboard.tsx b/src/layouts/nav-config-dashboard.tsx
new file mode 100644
index 0000000..ccd2cd0
--- /dev/null
+++ b/src/layouts/nav-config-dashboard.tsx
@@ -0,0 +1,51 @@
+import { Label } from 'src/components/label';
+import { SvgColor } from 'src/components/svg-color';
+
+// ----------------------------------------------------------------------
+
+const icon = (name: string) => ;
+
+export type NavItem = {
+ title: string;
+ path: string;
+ icon: React.ReactNode;
+ info?: React.ReactNode;
+};
+
+export const navData = [
+ {
+ title: 'Dashboard',
+ path: '/',
+ icon: icon('ic-analytics'),
+ },
+ {
+ title: 'User',
+ path: '/user',
+ icon: icon('ic-user'),
+ },
+ {
+ title: 'Product',
+ path: '/products',
+ icon: icon('ic-cart'),
+ info: (
+
+ ),
+ },
+ {
+ title: 'Blog',
+ path: '/blog',
+ icon: icon('ic-blog'),
+ },
+ {
+ title: 'Sign in',
+ path: '/sign-in',
+ icon: icon('ic-lock'),
+ },
+ {
+ title: 'Not found',
+ path: '/404',
+ icon: icon('ic-disabled'),
+ },
+];
diff --git a/src/layouts/nav-config-workspace.tsx b/src/layouts/nav-config-workspace.tsx
new file mode 100644
index 0000000..b665f88
--- /dev/null
+++ b/src/layouts/nav-config-workspace.tsx
@@ -0,0 +1,24 @@
+import type { WorkspacesPopoverProps } from './components/workspaces-popover';
+
+// ----------------------------------------------------------------------
+
+export const _workspaces: WorkspacesPopoverProps['data'] = [
+ {
+ id: 'team-1',
+ name: 'Team 1',
+ plan: 'Free',
+ logo: '/assets/icons/workspaces/logo-1.webp',
+ },
+ {
+ id: 'team-2',
+ name: 'Team 2',
+ plan: 'Pro',
+ logo: '/assets/icons/workspaces/logo-2.webp',
+ },
+ {
+ id: 'team-3',
+ name: 'Team 3',
+ plan: 'Pro',
+ logo: '/assets/icons/workspaces/logo-3.webp',
+ },
+];
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 0000000..9ae50be
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,29 @@
+import { StrictMode } from 'react';
+import { createRoot } from 'react-dom/client';
+import { Outlet, RouterProvider, createBrowserRouter } from 'react-router';
+
+import App from './app';
+import { routesSection } from './routes/sections';
+import { ErrorBoundary } from './routes/components';
+
+// ----------------------------------------------------------------------
+
+const router = createBrowserRouter([
+ {
+ Component: () => (
+
+
+
+ ),
+ errorElement: ,
+ children: routesSection,
+ },
+]);
+
+const root = createRoot(document.getElementById('root')!);
+
+root.render(
+
+
+
+);
diff --git a/src/pages/blog.tsx b/src/pages/blog.tsx
new file mode 100644
index 0000000..2ce43be
--- /dev/null
+++ b/src/pages/blog.tsx
@@ -0,0 +1,16 @@
+import { _posts } from 'src/_mock';
+import { CONFIG } from 'src/config-global';
+
+import { BlogView } from 'src/sections/blog/view';
+
+// ----------------------------------------------------------------------
+
+export default function Page() {
+ return (
+ <>
+ {`Blog - ${CONFIG.appName}`}
+
+
+ >
+ );
+}
diff --git a/src/pages/dashboard.tsx b/src/pages/dashboard.tsx
new file mode 100644
index 0000000..a078c39
--- /dev/null
+++ b/src/pages/dashboard.tsx
@@ -0,0 +1,20 @@
+import { CONFIG } from 'src/config-global';
+
+import { OverviewAnalyticsView as DashboardView } from 'src/sections/overview/view';
+
+// ----------------------------------------------------------------------
+
+export default function Page() {
+ return (
+ <>
+ {`Dashboard - ${CONFIG.appName}`}
+
+
+
+
+ >
+ );
+}
diff --git a/src/pages/page-not-found.tsx b/src/pages/page-not-found.tsx
new file mode 100644
index 0000000..3cb7ff1
--- /dev/null
+++ b/src/pages/page-not-found.tsx
@@ -0,0 +1,15 @@
+import { CONFIG } from 'src/config-global';
+
+import { NotFoundView } from 'src/sections/error';
+
+// ----------------------------------------------------------------------
+
+export default function Page() {
+ return (
+ <>
+ {`404 page not found! | Error - ${CONFIG.appName}`}
+
+
+ >
+ );
+}
diff --git a/src/pages/products.tsx b/src/pages/products.tsx
new file mode 100644
index 0000000..049603b
--- /dev/null
+++ b/src/pages/products.tsx
@@ -0,0 +1,15 @@
+import { CONFIG } from 'src/config-global';
+
+import { ProductsView } from 'src/sections/product/view';
+
+// ----------------------------------------------------------------------
+
+export default function Page() {
+ return (
+ <>
+ {`Products - ${CONFIG.appName}`}
+
+
+ >
+ );
+}
diff --git a/src/pages/sign-in.tsx b/src/pages/sign-in.tsx
new file mode 100644
index 0000000..dcc440c
--- /dev/null
+++ b/src/pages/sign-in.tsx
@@ -0,0 +1,15 @@
+import { CONFIG } from 'src/config-global';
+
+import { SignInView } from 'src/sections/auth';
+
+// ----------------------------------------------------------------------
+
+export default function Page() {
+ return (
+ <>
+ {`Sign in - ${CONFIG.appName}`}
+
+
+ >
+ );
+}
diff --git a/src/pages/user.tsx b/src/pages/user.tsx
new file mode 100644
index 0000000..68e1adc
--- /dev/null
+++ b/src/pages/user.tsx
@@ -0,0 +1,15 @@
+import { CONFIG } from 'src/config-global';
+
+import { UserView } from 'src/sections/user/view';
+
+// ----------------------------------------------------------------------
+
+export default function Page() {
+ return (
+ <>
+ {`Users - ${CONFIG.appName}`}
+
+
+ >
+ );
+}
diff --git a/src/routes/components/error-boundary.tsx b/src/routes/components/error-boundary.tsx
new file mode 100644
index 0000000..66a0326
--- /dev/null
+++ b/src/routes/components/error-boundary.tsx
@@ -0,0 +1,168 @@
+import type { Theme, CSSObject } from '@mui/material/styles';
+
+import { useRouteError, isRouteErrorResponse } from 'react-router';
+
+import GlobalStyles from '@mui/material/GlobalStyles';
+
+// ----------------------------------------------------------------------
+
+export function ErrorBoundary() {
+ const error = useRouteError();
+
+ return (
+ <>
+ {inputGlobalStyles()}
+
+
+
{renderErrorMessage(error)}
+
+ >
+ );
+}
+
+// ----------------------------------------------------------------------
+
+function parseStackTrace(stack?: string) {
+ if (!stack) return { filePath: null, functionName: null };
+
+ const filePathMatch = stack.match(/\/src\/[^?]+/);
+ const functionNameMatch = stack.match(/at (\S+)/);
+
+ return {
+ filePath: filePathMatch ? filePathMatch[0] : null,
+ functionName: functionNameMatch ? functionNameMatch[1] : null,
+ };
+}
+
+function renderErrorMessage(error: any) {
+ if (isRouteErrorResponse(error)) {
+ return (
+ <>
+
+ {error.status}: {error.statusText}
+
+ {error.data}
+ >
+ );
+ }
+
+ if (error instanceof Error) {
+ const { filePath, functionName } = parseStackTrace(error.stack);
+
+ return (
+ <>
+ Unexpected Application Error!
+
+ {error.name}: {error.message}
+
+ {error.stack}
+ {(filePath || functionName) && (
+
+ {filePath} ({functionName})
+
+ )}
+ >
+ );
+ }
+
+ return Unknown Error
;
+}
+
+// ----------------------------------------------------------------------
+
+const errorBoundaryClasses = {
+ root: 'error-boundary-root',
+ container: 'error-boundary-container',
+ title: 'error-boundary-title',
+ details: 'error-boundary-details',
+ message: 'error-boundary-message',
+ filePath: 'error-boundary-file-path',
+};
+
+const cssVars: CSSObject = {
+ '--info-color': '#2dd9da',
+ '--warning-color': '#e2aa53',
+ '--error-color': '#ff5555',
+ '--error-background': '#2a1e1e',
+ '--details-background': '#111111',
+ '--root-background': '#2c2c2e',
+ '--container-background': '#1c1c1e',
+ '--font-stack-monospace':
+ '"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace',
+ '--font-stack-sans':
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',
+};
+
+const rootStyles = (): CSSObject => ({
+ display: 'flex',
+ flex: '1 1 auto',
+ alignItems: 'center',
+ padding: '10vh 15px 0',
+ flexDirection: 'column',
+ fontFamily: 'var(--font-stack-sans)',
+});
+
+const contentStyles = (): CSSObject => ({
+ gap: 24,
+ padding: 20,
+ width: '100%',
+ maxWidth: 960,
+ display: 'flex',
+ borderRadius: 8,
+ flexDirection: 'column',
+ backgroundColor: 'var(--container-background)',
+});
+
+const titleStyles = (theme: Theme): CSSObject => ({
+ margin: 0,
+ lineHeight: 1.2,
+ fontSize: theme.typography.pxToRem(20),
+ fontWeight: theme.typography.fontWeightBold,
+});
+
+const messageStyles = (theme: Theme): CSSObject => ({
+ margin: 0,
+ lineHeight: 1.5,
+ padding: '12px 16px',
+ whiteSpace: 'pre-wrap',
+ color: 'var(--error-color)',
+ fontSize: theme.typography.pxToRem(14),
+ fontFamily: 'var(--font-stack-monospace)',
+ backgroundColor: 'var(--error-background)',
+ borderLeft: '2px solid var(--error-color)',
+ fontWeight: theme.typography.fontWeightBold,
+});
+
+const detailsStyles = (): CSSObject => ({
+ margin: 0,
+ padding: 16,
+ lineHeight: 1.5,
+ overflow: 'auto',
+ borderRadius: 'inherit',
+ color: 'var(--warning-color)',
+ backgroundColor: 'var(--details-background)',
+});
+
+const filePathStyles = (): CSSObject => ({
+ marginTop: 0,
+ color: 'var(--info-color)',
+});
+
+const inputGlobalStyles = () => (
+ ({
+ body: {
+ ...cssVars,
+ margin: 0,
+ color: 'white',
+ backgroundColor: 'var(--root-background)',
+ [`& .${errorBoundaryClasses.root}`]: rootStyles(),
+ [`& .${errorBoundaryClasses.container}`]: contentStyles(),
+ [`& .${errorBoundaryClasses.title}`]: titleStyles(theme),
+ [`& .${errorBoundaryClasses.message}`]: messageStyles(theme),
+ [`& .${errorBoundaryClasses.filePath}`]: filePathStyles(),
+ [`& .${errorBoundaryClasses.details}`]: detailsStyles(),
+ },
+ })}
+ />
+);
diff --git a/src/routes/components/index.ts b/src/routes/components/index.ts
new file mode 100644
index 0000000..12530ea
--- /dev/null
+++ b/src/routes/components/index.ts
@@ -0,0 +1,3 @@
+export * from './router-link';
+
+export * from './error-boundary';
diff --git a/src/routes/components/router-link.tsx b/src/routes/components/router-link.tsx
new file mode 100644
index 0000000..ac48a76
--- /dev/null
+++ b/src/routes/components/router-link.tsx
@@ -0,0 +1,14 @@
+import type { LinkProps } from 'react-router';
+
+import { Link } from 'react-router';
+
+// ----------------------------------------------------------------------
+
+interface RouterLinkProps extends Omit {
+ href: string;
+ ref?: React.RefObject;
+}
+
+export function RouterLink({ href, ref, ...other }: RouterLinkProps) {
+ return ;
+}
diff --git a/src/routes/hooks/index.ts b/src/routes/hooks/index.ts
new file mode 100644
index 0000000..03b7351
--- /dev/null
+++ b/src/routes/hooks/index.ts
@@ -0,0 +1,3 @@
+export { useRouter } from './use-router';
+
+export { usePathname } from './use-pathname';
diff --git a/src/routes/hooks/use-pathname.ts b/src/routes/hooks/use-pathname.ts
new file mode 100644
index 0000000..76a035e
--- /dev/null
+++ b/src/routes/hooks/use-pathname.ts
@@ -0,0 +1,10 @@
+import { useMemo } from 'react';
+import { useLocation } from 'react-router';
+
+// ----------------------------------------------------------------------
+
+export function usePathname() {
+ const { pathname } = useLocation();
+
+ return useMemo(() => pathname, [pathname]);
+}
diff --git a/src/routes/hooks/use-router.ts b/src/routes/hooks/use-router.ts
new file mode 100644
index 0000000..2a7ecf6
--- /dev/null
+++ b/src/routes/hooks/use-router.ts
@@ -0,0 +1,21 @@
+import { useMemo } from 'react';
+import { useNavigate } from 'react-router';
+
+// ----------------------------------------------------------------------
+
+export function useRouter() {
+ const navigate = useNavigate();
+
+ const router = useMemo(
+ () => ({
+ back: () => navigate(-1),
+ forward: () => navigate(1),
+ refresh: () => navigate(0),
+ push: (href: string) => navigate(href),
+ replace: (href: string) => navigate(href, { replace: true }),
+ }),
+ [navigate]
+ );
+
+ return router;
+}
diff --git a/src/routes/sections.tsx b/src/routes/sections.tsx
new file mode 100644
index 0000000..20009c7
--- /dev/null
+++ b/src/routes/sections.tsx
@@ -0,0 +1,71 @@
+import type { RouteObject } from 'react-router';
+
+import { lazy, Suspense } from 'react';
+import { Outlet } from 'react-router-dom';
+import { varAlpha } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import LinearProgress, { linearProgressClasses } from '@mui/material/LinearProgress';
+
+import { AuthLayout } from 'src/layouts/auth';
+import { DashboardLayout } from 'src/layouts/dashboard';
+
+// ----------------------------------------------------------------------
+
+export const DashboardPage = lazy(() => import('src/pages/dashboard'));
+export const BlogPage = lazy(() => import('src/pages/blog'));
+export const UserPage = lazy(() => import('src/pages/user'));
+export const SignInPage = lazy(() => import('src/pages/sign-in'));
+export const ProductsPage = lazy(() => import('src/pages/products'));
+export const Page404 = lazy(() => import('src/pages/page-not-found'));
+
+const renderFallback = () => (
+
+ varAlpha(theme.vars.palette.text.primaryChannel, 0.16),
+ [`& .${linearProgressClasses.bar}`]: { bgcolor: 'text.primary' },
+ }}
+ />
+
+);
+
+export const routesSection: RouteObject[] = [
+ {
+ element: (
+
+
+
+
+
+ ),
+ children: [
+ { index: true, element: },
+ { path: 'user', element: },
+ { path: 'products', element: },
+ { path: 'blog', element: },
+ ],
+ },
+ {
+ path: 'sign-in',
+ element: (
+
+
+
+ ),
+ },
+ {
+ path: '404',
+ element: ,
+ },
+ { path: '*', element: },
+];
diff --git a/src/sections/auth/index.ts b/src/sections/auth/index.ts
new file mode 100644
index 0000000..d9ccca2
--- /dev/null
+++ b/src/sections/auth/index.ts
@@ -0,0 +1 @@
+export * from './sign-in-view';
diff --git a/src/sections/auth/sign-in-view.tsx b/src/sections/auth/sign-in-view.tsx
new file mode 100644
index 0000000..09d3dd9
--- /dev/null
+++ b/src/sections/auth/sign-in-view.tsx
@@ -0,0 +1,136 @@
+import { useState, useCallback } from 'react';
+
+import Box from '@mui/material/Box';
+import Link from '@mui/material/Link';
+import Button from '@mui/material/Button';
+import Divider from '@mui/material/Divider';
+import TextField from '@mui/material/TextField';
+import IconButton from '@mui/material/IconButton';
+import Typography from '@mui/material/Typography';
+import InputAdornment from '@mui/material/InputAdornment';
+
+import { useRouter } from 'src/routes/hooks';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+export function SignInView() {
+ const router = useRouter();
+
+ const [showPassword, setShowPassword] = useState(false);
+
+ const handleSignIn = useCallback(() => {
+ router.push('/');
+ }, [router]);
+
+ const renderForm = (
+
+
+
+
+ Forgot password?
+
+
+
+ setShowPassword(!showPassword)} edge="end">
+
+
+
+ ),
+ },
+ }}
+ sx={{ mb: 3 }}
+ />
+
+
+
+ );
+
+ return (
+ <>
+
+ Sign in
+
+ Don’t have an account?
+
+ Get started
+
+
+
+ {renderForm}
+
+
+ OR
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/sections/blog/post-item.tsx b/src/sections/blog/post-item.tsx
new file mode 100644
index 0000000..90980bf
--- /dev/null
+++ b/src/sections/blog/post-item.tsx
@@ -0,0 +1,211 @@
+import type { CardProps } from '@mui/material/Card';
+import type { IconifyName } from 'src/components/iconify';
+
+import { varAlpha } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import Link from '@mui/material/Link';
+import Card from '@mui/material/Card';
+import Avatar from '@mui/material/Avatar';
+import Typography from '@mui/material/Typography';
+
+import { fDate } from 'src/utils/format-time';
+import { fShortenNumber } from 'src/utils/format-number';
+
+import { Iconify } from 'src/components/iconify';
+import { SvgColor } from 'src/components/svg-color';
+
+// ----------------------------------------------------------------------
+
+export type IPostItem = {
+ id: string;
+ title: string;
+ coverUrl: string;
+ totalViews: number;
+ description: string;
+ totalShares: number;
+ totalComments: number;
+ totalFavorites: number;
+ postedAt: string | number | null;
+ author: {
+ name: string;
+ avatarUrl: string;
+ };
+};
+
+export function PostItem({
+ sx,
+ post,
+ latestPost,
+ latestPostLarge,
+ ...other
+}: CardProps & {
+ post: IPostItem;
+ latestPost: boolean;
+ latestPostLarge: boolean;
+}) {
+ const renderAvatar = (
+
+ );
+
+ const renderTitle = (
+
+ {post.title}
+
+ );
+
+ const renderInfo = (
+
+ {[
+ { number: post.totalComments, icon: 'solar:chat-round-dots-bold' },
+ { number: post.totalViews, icon: 'solar:eye-bold' },
+ { number: post.totalShares, icon: 'solar:share-bold' },
+ ].map((info, _index) => (
+
+
+ {fShortenNumber(info.number)}
+
+ ))}
+
+ );
+
+ const renderCover = (
+
+ );
+
+ const renderDate = (
+
+ {fDate(post.postedAt)}
+
+ );
+
+ const renderShape = (
+
+ );
+
+ return (
+
+ ({
+ position: 'relative',
+ pt: 'calc(100% * 3 / 4)',
+ ...((latestPostLarge || latestPost) && {
+ pt: 'calc(100% * 4 / 3)',
+ '&:after': {
+ top: 0,
+ content: "''",
+ width: '100%',
+ height: '100%',
+ position: 'absolute',
+ bgcolor: varAlpha(theme.palette.grey['900Channel'], 0.72),
+ },
+ }),
+ ...(latestPostLarge && {
+ pt: {
+ xs: 'calc(100% * 4 / 3)',
+ sm: 'calc(100% * 3 / 4.66)',
+ },
+ }),
+ })}
+ >
+ {renderShape}
+ {renderAvatar}
+ {renderCover}
+
+
+ ({
+ p: theme.spacing(6, 3, 3, 3),
+ ...((latestPostLarge || latestPost) && {
+ width: 1,
+ bottom: 0,
+ position: 'absolute',
+ }),
+ })}
+ >
+ {renderDate}
+ {renderTitle}
+ {renderInfo}
+
+
+ );
+}
diff --git a/src/sections/blog/post-search.tsx b/src/sections/blog/post-search.tsx
new file mode 100644
index 0000000..828a0b8
--- /dev/null
+++ b/src/sections/blog/post-search.tsx
@@ -0,0 +1,59 @@
+import type { Theme, SxProps } from '@mui/material/styles';
+
+import TextField from '@mui/material/TextField';
+import InputAdornment from '@mui/material/InputAdornment';
+import Autocomplete, { autocompleteClasses } from '@mui/material/Autocomplete';
+
+import { Iconify } from 'src/components/iconify';
+
+import type { IPostItem } from './post-item';
+
+// ----------------------------------------------------------------------
+
+type PostSearchProps = {
+ posts: IPostItem[];
+ sx?: SxProps;
+};
+
+export function PostSearch({ posts, sx }: PostSearchProps) {
+ return (
+ post.title}
+ isOptionEqualToValue={(option, value) => option.id === value.id}
+ renderInput={(params) => (
+
+
+
+ ),
+ },
+ }}
+ />
+ )}
+ />
+ );
+}
diff --git a/src/sections/blog/post-sort.tsx b/src/sections/blog/post-sort.tsx
new file mode 100644
index 0000000..9b1c155
--- /dev/null
+++ b/src/sections/blog/post-sort.tsx
@@ -0,0 +1,96 @@
+import type { ButtonProps } from '@mui/material/Button';
+
+import { useState, useCallback } from 'react';
+import { varAlpha } from 'minimal-shared/utils';
+
+import Button from '@mui/material/Button';
+import Popover from '@mui/material/Popover';
+import MenuList from '@mui/material/MenuList';
+import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+type PostSortProps = ButtonProps & {
+ sortBy: string;
+ onSort: (newSort: string) => void;
+ options: { value: string; label: string }[];
+};
+
+export function PostSort({ options, sortBy, onSort, sx, ...other }: PostSortProps) {
+ const [openPopover, setOpenPopover] = useState(null);
+
+ const handleOpenPopover = useCallback((event: React.MouseEvent) => {
+ setOpenPopover(event.currentTarget);
+ }, []);
+
+ const handleClosePopover = useCallback(() => {
+ setOpenPopover(null);
+ }, []);
+
+ return (
+ <>
+
+ }
+ sx={[
+ {
+ bgcolor: (theme) => varAlpha(theme.vars.palette.grey['500Channel'], 0.08),
+ },
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+ {options.find((option) => option.value === sortBy)?.label}
+
+
+
+
+ {options.map((option) => (
+
+ ))}
+
+
+ >
+ );
+}
diff --git a/src/sections/blog/view/blog-view.tsx b/src/sections/blog/view/blog-view.tsx
new file mode 100644
index 0000000..37d7ea9
--- /dev/null
+++ b/src/sections/blog/view/blog-view.tsx
@@ -0,0 +1,96 @@
+import { useState, useCallback } from 'react';
+
+import Box from '@mui/material/Box';
+import Grid from '@mui/material/Grid';
+import Button from '@mui/material/Button';
+import Typography from '@mui/material/Typography';
+import Pagination from '@mui/material/Pagination';
+
+import { DashboardContent } from 'src/layouts/dashboard';
+
+import { Iconify } from 'src/components/iconify';
+
+import { PostItem } from '../post-item';
+import { PostSort } from '../post-sort';
+import { PostSearch } from '../post-search';
+
+import type { IPostItem } from '../post-item';
+
+// ----------------------------------------------------------------------
+
+type Props = {
+ posts: IPostItem[];
+};
+
+export function BlogView({ posts }: Props) {
+ const [sortBy, setSortBy] = useState('latest');
+
+ const handleSort = useCallback((newSort: string) => {
+ setSortBy(newSort);
+ }, []);
+
+ return (
+
+
+
+ Blog
+
+ }
+ >
+ New post
+
+
+
+
+
+
+
+
+
+ {posts.map((post, index) => {
+ const latestPostLarge = index === 0;
+ const latestPost = index === 1 || index === 2;
+
+ return (
+
+
+
+ );
+ })}
+
+
+
+
+ );
+}
diff --git a/src/sections/blog/view/index.ts b/src/sections/blog/view/index.ts
new file mode 100644
index 0000000..f7cb1c6
--- /dev/null
+++ b/src/sections/blog/view/index.ts
@@ -0,0 +1 @@
+export * from './blog-view';
diff --git a/src/sections/error/index.ts b/src/sections/error/index.ts
new file mode 100644
index 0000000..f642972
--- /dev/null
+++ b/src/sections/error/index.ts
@@ -0,0 +1 @@
+export * from './not-found-view';
diff --git a/src/sections/error/not-found-view.tsx b/src/sections/error/not-found-view.tsx
new file mode 100644
index 0000000..34e5d8b
--- /dev/null
+++ b/src/sections/error/not-found-view.tsx
@@ -0,0 +1,52 @@
+import Box from '@mui/material/Box';
+import Button from '@mui/material/Button';
+import Container from '@mui/material/Container';
+import Typography from '@mui/material/Typography';
+
+import { RouterLink } from 'src/routes/components';
+
+import { Logo } from 'src/components/logo';
+
+// ----------------------------------------------------------------------
+
+export function NotFoundView() {
+ return (
+ <>
+
+
+
+
+ Sorry, page not found!
+
+
+
+ Sorry, we couldn’t find the page you’re looking for. Perhaps you’ve mistyped the URL? Be
+ sure to check your spelling.
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/sections/overview/analytics-conversion-rates.tsx b/src/sections/overview/analytics-conversion-rates.tsx
new file mode 100644
index 0000000..7b8e737
--- /dev/null
+++ b/src/sections/overview/analytics-conversion-rates.tsx
@@ -0,0 +1,82 @@
+import type { CardProps } from '@mui/material/Card';
+import type { ChartOptions } from 'src/components/chart';
+
+import Card from '@mui/material/Card';
+import CardHeader from '@mui/material/CardHeader';
+import { useTheme, alpha as hexAlpha } from '@mui/material/styles';
+
+import { fNumber } from 'src/utils/format-number';
+
+import { Chart, useChart } from 'src/components/chart';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ chart: {
+ colors?: string[];
+ categories?: string[];
+ series: {
+ name: string;
+ data: number[];
+ }[];
+ options?: ChartOptions;
+ };
+};
+
+export function AnalyticsConversionRates({ title, subheader, chart, sx, ...other }: Props) {
+ const theme = useTheme();
+
+ const chartColors = chart.colors ?? [
+ theme.palette.primary.dark,
+ hexAlpha(theme.palette.primary.dark, 0.24),
+ ];
+
+ const chartOptions = useChart({
+ colors: chartColors,
+ stroke: { width: 2, colors: ['transparent'] },
+ tooltip: {
+ shared: true,
+ intersect: false,
+ y: {
+ formatter: (value: number) => fNumber(value),
+ title: { formatter: (seriesName: string) => `${seriesName}: ` },
+ },
+ },
+ xaxis: { categories: chart.categories },
+ dataLabels: {
+ enabled: true,
+ offsetX: -6,
+ style: { fontSize: '10px', colors: ['#FFFFFF', theme.palette.text.primary] },
+ },
+ plotOptions: {
+ bar: {
+ horizontal: true,
+ borderRadius: 2,
+ barHeight: '48%',
+ dataLabels: { position: 'top' },
+ },
+ },
+ ...chart.options,
+ });
+
+ return (
+
+
+
+
+
+ );
+}
diff --git a/src/sections/overview/analytics-current-subject.tsx b/src/sections/overview/analytics-current-subject.tsx
new file mode 100644
index 0000000..87dc344
--- /dev/null
+++ b/src/sections/overview/analytics-current-subject.tsx
@@ -0,0 +1,73 @@
+import type { CardProps } from '@mui/material/Card';
+import type { ChartOptions } from 'src/components/chart';
+
+import Card from '@mui/material/Card';
+import Divider from '@mui/material/Divider';
+import { useTheme } from '@mui/material/styles';
+import CardHeader from '@mui/material/CardHeader';
+
+import { Chart, useChart, ChartLegends } from 'src/components/chart';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ chart: {
+ colors?: string[];
+ categories: string[];
+ series: {
+ name: string;
+ data: number[];
+ }[];
+ options?: ChartOptions;
+ };
+};
+
+export function AnalyticsCurrentSubject({ title, subheader, chart, sx, ...other }: Props) {
+ const theme = useTheme();
+
+ const chartColors = chart.colors ?? [
+ theme.palette.primary.main,
+ theme.palette.warning.main,
+ theme.palette.info.main,
+ ];
+
+ const chartOptions = useChart({
+ colors: chartColors,
+ stroke: { width: 2 },
+ fill: { opacity: 0.48 },
+ xaxis: {
+ categories: chart.categories,
+ labels: { style: { colors: Array.from({ length: 6 }, () => theme.palette.text.secondary) } },
+ },
+ ...chart.options,
+ });
+
+ return (
+
+
+
+
+
+
+
+ item.name)}
+ colors={chartOptions?.colors}
+ sx={{ p: 3, justifyContent: 'center' }}
+ />
+
+ );
+}
diff --git a/src/sections/overview/analytics-current-visits.tsx b/src/sections/overview/analytics-current-visits.tsx
new file mode 100644
index 0000000..c607796
--- /dev/null
+++ b/src/sections/overview/analytics-current-visits.tsx
@@ -0,0 +1,81 @@
+import type { CardProps } from '@mui/material/Card';
+import type { ChartOptions } from 'src/components/chart';
+
+import Card from '@mui/material/Card';
+import Divider from '@mui/material/Divider';
+import { useTheme } from '@mui/material/styles';
+import CardHeader from '@mui/material/CardHeader';
+
+import { fNumber } from 'src/utils/format-number';
+
+import { Chart, useChart, ChartLegends } from 'src/components/chart';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ chart: {
+ colors?: string[];
+ series: {
+ label: string;
+ value: number;
+ }[];
+ options?: ChartOptions;
+ };
+};
+
+export function AnalyticsCurrentVisits({ title, subheader, chart, sx, ...other }: Props) {
+ const theme = useTheme();
+
+ const chartSeries = chart.series.map((item) => item.value);
+
+ const chartColors = chart.colors ?? [
+ theme.palette.primary.main,
+ theme.palette.warning.light,
+ theme.palette.info.dark,
+ theme.palette.error.main,
+ ];
+
+ const chartOptions = useChart({
+ chart: { sparkline: { enabled: true } },
+ colors: chartColors,
+ labels: chart.series.map((item) => item.label),
+ stroke: { width: 0 },
+ dataLabels: { enabled: true, dropShadow: { enabled: false } },
+ tooltip: {
+ y: {
+ formatter: (value: number) => fNumber(value),
+ title: { formatter: (seriesName: string) => `${seriesName}` },
+ },
+ },
+ plotOptions: { pie: { donut: { labels: { show: false } } } },
+ ...chart.options,
+ });
+
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/sections/overview/analytics-news.tsx b/src/sections/overview/analytics-news.tsx
new file mode 100644
index 0000000..3b377a9
--- /dev/null
+++ b/src/sections/overview/analytics-news.tsx
@@ -0,0 +1,103 @@
+import type { BoxProps } from '@mui/material/Box';
+import type { CardProps } from '@mui/material/Card';
+
+import Box from '@mui/material/Box';
+import Link from '@mui/material/Link';
+import Card from '@mui/material/Card';
+import Button from '@mui/material/Button';
+import Avatar from '@mui/material/Avatar';
+import CardHeader from '@mui/material/CardHeader';
+import ListItemText from '@mui/material/ListItemText';
+
+import { fToNow } from 'src/utils/format-time';
+
+import { Iconify } from 'src/components/iconify';
+import { Scrollbar } from 'src/components/scrollbar';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ list: {
+ id: string;
+ title: string;
+ coverUrl: string;
+ description: string;
+ postedAt: string | number | null;
+ }[];
+};
+
+export function AnalyticsNews({ title, subheader, list, sx, ...other }: Props) {
+ return (
+
+
+
+
+
+ {list.map((item) => (
+
+ ))}
+
+
+
+
+ }
+ >
+ View all
+
+
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+type ItemProps = BoxProps & {
+ item: Props['list'][number];
+};
+
+function Item({ item, sx, ...other }: ItemProps) {
+ return (
+ ({
+ py: 2,
+ px: 3,
+ gap: 2,
+ display: 'flex',
+ alignItems: 'center',
+ borderBottom: `dashed 1px ${theme.vars.palette.divider}`,
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+
+
+ {item.title}}
+ secondary={item.description}
+ slotProps={{
+ primary: { noWrap: true },
+ secondary: {
+ noWrap: true,
+ sx: { mt: 0.5 },
+ },
+ }}
+ />
+
+
+ {fToNow(item.postedAt)}
+
+
+ );
+}
diff --git a/src/sections/overview/analytics-order-timeline.tsx b/src/sections/overview/analytics-order-timeline.tsx
new file mode 100644
index 0000000..9abb88a
--- /dev/null
+++ b/src/sections/overview/analytics-order-timeline.tsx
@@ -0,0 +1,77 @@
+import type { CardProps } from '@mui/material/Card';
+import type { TimelineItemProps } from '@mui/lab/TimelineItem';
+
+import Card from '@mui/material/Card';
+import Timeline from '@mui/lab/Timeline';
+import TimelineDot from '@mui/lab/TimelineDot';
+import Typography from '@mui/material/Typography';
+import CardHeader from '@mui/material/CardHeader';
+import TimelineContent from '@mui/lab/TimelineContent';
+import TimelineSeparator from '@mui/lab/TimelineSeparator';
+import TimelineConnector from '@mui/lab/TimelineConnector';
+import TimelineItem, { timelineItemClasses } from '@mui/lab/TimelineItem';
+
+import { fDateTime } from 'src/utils/format-time';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ list: {
+ id: string;
+ type: string;
+ title: string;
+ time: string | number | null;
+ }[];
+};
+
+export function AnalyticsOrderTimeline({ title, subheader, list, sx, ...other }: Props) {
+ return (
+
+
+
+
+ {list.map((item, index) => (
+
+ ))}
+
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+type ItemProps = TimelineItemProps & {
+ lastItem: boolean;
+ item: Props['list'][number];
+};
+
+function Item({ item, lastItem, ...other }: ItemProps) {
+ return (
+
+
+
+ {lastItem ? null : }
+
+
+
+ {item.title}
+
+
+ {fDateTime(item.time)}
+
+
+
+ );
+}
diff --git a/src/sections/overview/analytics-tasks.tsx b/src/sections/overview/analytics-tasks.tsx
new file mode 100644
index 0000000..5accf38
--- /dev/null
+++ b/src/sections/overview/analytics-tasks.tsx
@@ -0,0 +1,179 @@
+import type { BoxProps } from '@mui/material/Box';
+import type { CardProps } from '@mui/material/Card';
+
+import { useState } from 'react';
+import { usePopover } from 'minimal-shared/hooks';
+
+import Box from '@mui/material/Box';
+import Card from '@mui/material/Card';
+import Stack from '@mui/material/Stack';
+import Popover from '@mui/material/Popover';
+import Divider from '@mui/material/Divider';
+import MenuList from '@mui/material/MenuList';
+import Checkbox from '@mui/material/Checkbox';
+import IconButton from '@mui/material/IconButton';
+import CardHeader from '@mui/material/CardHeader';
+import FormControlLabel from '@mui/material/FormControlLabel';
+import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
+
+import { Iconify } from 'src/components/iconify';
+import { Scrollbar } from 'src/components/scrollbar';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ list: {
+ id: string;
+ name: string;
+ }[];
+};
+
+export function AnalyticsTasks({ title, subheader, list, sx, ...other }: Props) {
+ const [selected, setSelected] = useState(['2']);
+
+ const handleClickComplete = (taskId: string) => {
+ const tasksCompleted = selected.includes(taskId)
+ ? selected.filter((value) => value !== taskId)
+ : [...selected, taskId];
+
+ setSelected(tasksCompleted);
+ };
+
+ return (
+
+
+
+
+ } sx={{ minWidth: 560 }}>
+ {list.map((item) => (
+ handleClickComplete(item.id)}
+ />
+ ))}
+
+
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+type TaskItemProps = BoxProps & {
+ selected: boolean;
+ item: Props['list'][number];
+ onChange: (id: string) => void;
+};
+
+function TaskItem({ item, selected, onChange, sx, ...other }: TaskItemProps) {
+ const menuActions = usePopover();
+
+ const handleMarkComplete = () => {
+ menuActions.onClose();
+ console.info('MARK COMPLETE', item.id);
+ };
+
+ const handleShare = () => {
+ menuActions.onClose();
+ console.info('SHARE', item.id);
+ };
+
+ const handleEdit = () => {
+ menuActions.onClose();
+ console.info('EDIT', item.id);
+ };
+
+ const handleDelete = () => {
+ menuActions.onClose();
+ console.info('DELETE', item.id);
+ };
+
+ return (
+ <>
+ ({
+ pl: 2,
+ pr: 1,
+ py: 1.5,
+ display: 'flex',
+ ...(selected && {
+ color: 'text.disabled',
+ textDecoration: 'line-through',
+ }),
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+
+ }
+ sx={{ flexGrow: 1, m: 0 }}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/sections/overview/analytics-traffic-by-site.tsx b/src/sections/overview/analytics-traffic-by-site.tsx
new file mode 100644
index 0000000..607b292
--- /dev/null
+++ b/src/sections/overview/analytics-traffic-by-site.tsx
@@ -0,0 +1,64 @@
+import type { CardProps } from '@mui/material/Card';
+
+import { varAlpha } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import Card from '@mui/material/Card';
+import CardHeader from '@mui/material/CardHeader';
+import Typography from '@mui/material/Typography';
+
+import { fShortenNumber } from 'src/utils/format-number';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ list: { value: string; label: string; total: number }[];
+};
+
+export function AnalyticsTrafficBySite({ title, subheader, list, sx, ...other }: Props) {
+ return (
+
+
+
+ {list.map((site) => (
+ ({
+ py: 2.5,
+ display: 'flex',
+ borderRadius: 1.5,
+ textAlign: 'center',
+ alignItems: 'center',
+ flexDirection: 'column',
+ border: `solid 1px ${varAlpha(theme.vars.palette.grey['500Channel'], 0.12)}`,
+ })}
+ >
+ {site.value === 'twitter' && }
+ {site.value === 'facebook' && }
+ {site.value === 'google' && }
+ {site.value === 'linkedin' && }
+
+
+ {fShortenNumber(site.total)}
+
+
+
+ {site.label}
+
+
+ ))}
+
+
+ );
+}
diff --git a/src/sections/overview/analytics-website-visits.tsx b/src/sections/overview/analytics-website-visits.tsx
new file mode 100644
index 0000000..b6ea5ee
--- /dev/null
+++ b/src/sections/overview/analytics-website-visits.tsx
@@ -0,0 +1,61 @@
+import type { CardProps } from '@mui/material/Card';
+import type { ChartOptions } from 'src/components/chart';
+
+import Card from '@mui/material/Card';
+import CardHeader from '@mui/material/CardHeader';
+import { useTheme, alpha as hexAlpha } from '@mui/material/styles';
+
+import { Chart, useChart } from 'src/components/chart';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title?: string;
+ subheader?: string;
+ chart: {
+ colors?: string[];
+ categories?: string[];
+ series: {
+ name: string;
+ data: number[];
+ }[];
+ options?: ChartOptions;
+ };
+};
+
+export function AnalyticsWebsiteVisits({ title, subheader, chart, sx, ...other }: Props) {
+ const theme = useTheme();
+
+ const chartColors = chart.colors ?? [
+ hexAlpha(theme.palette.primary.dark, 0.8),
+ hexAlpha(theme.palette.warning.main, 0.8),
+ ];
+
+ const chartOptions = useChart({
+ colors: chartColors,
+ stroke: { width: 2, colors: ['transparent'] },
+ xaxis: { categories: chart.categories },
+ legend: { show: true },
+ tooltip: { y: { formatter: (value: number) => `${value} visits` } },
+ ...chart.options,
+ });
+
+ return (
+
+
+
+
+
+ );
+}
diff --git a/src/sections/overview/analytics-widget-summary.tsx b/src/sections/overview/analytics-widget-summary.tsx
new file mode 100644
index 0000000..efecd09
--- /dev/null
+++ b/src/sections/overview/analytics-widget-summary.tsx
@@ -0,0 +1,142 @@
+import type { CardProps } from '@mui/material/Card';
+import type { PaletteColorKey } from 'src/theme/core';
+import type { ChartOptions } from 'src/components/chart';
+
+import { varAlpha } from 'minimal-shared/utils';
+
+import Box from '@mui/material/Box';
+import Card from '@mui/material/Card';
+import { useTheme } from '@mui/material/styles';
+
+import { fNumber, fPercent, fShortenNumber } from 'src/utils/format-number';
+
+import { Iconify } from 'src/components/iconify';
+import { SvgColor } from 'src/components/svg-color';
+import { Chart, useChart } from 'src/components/chart';
+
+// ----------------------------------------------------------------------
+
+type Props = CardProps & {
+ title: string;
+ total: number;
+ percent: number;
+ color?: PaletteColorKey;
+ icon: React.ReactNode;
+ chart: {
+ series: number[];
+ categories: string[];
+ options?: ChartOptions;
+ };
+};
+
+export function AnalyticsWidgetSummary({
+ sx,
+ icon,
+ title,
+ total,
+ chart,
+ percent,
+ color = 'primary',
+ ...other
+}: Props) {
+ const theme = useTheme();
+
+ const chartColors = [theme.palette[color].dark];
+
+ const chartOptions = useChart({
+ chart: { sparkline: { enabled: true } },
+ colors: chartColors,
+ xaxis: { categories: chart.categories },
+ grid: {
+ padding: {
+ top: 6,
+ left: 6,
+ right: 6,
+ bottom: 6,
+ },
+ },
+ tooltip: {
+ y: { formatter: (value: number) => fNumber(value), title: { formatter: () => '' } },
+ },
+ markers: {
+ strokeWidth: 0,
+ },
+ ...chart.options,
+ });
+
+ const renderTrending = () => (
+
+
+
+ {percent > 0 && '+'}
+ {fPercent(percent)}
+
+
+ );
+
+ return (
+ ({
+ p: 3,
+ boxShadow: 'none',
+ position: 'relative',
+ color: `${color}.darker`,
+ backgroundColor: 'common.white',
+ backgroundImage: `linear-gradient(135deg, ${varAlpha(theme.vars.palette[color].lighterChannel, 0.48)}, ${varAlpha(theme.vars.palette[color].lightChannel, 0.48)})`,
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+ {icon}
+
+ {renderTrending()}
+
+
+
+ {title}
+
+ {fShortenNumber(total)}
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/sections/overview/view/index.ts b/src/sections/overview/view/index.ts
new file mode 100644
index 0000000..fb212b4
--- /dev/null
+++ b/src/sections/overview/view/index.ts
@@ -0,0 +1 @@
+export * from './overview-analytics-view';
diff --git a/src/sections/overview/view/overview-analytics-view.tsx b/src/sections/overview/view/overview-analytics-view.tsx
new file mode 100644
index 0000000..a98ca5b
--- /dev/null
+++ b/src/sections/overview/view/overview-analytics-view.tsx
@@ -0,0 +1,156 @@
+import Grid from '@mui/material/Grid';
+import Typography from '@mui/material/Typography';
+
+import { DashboardContent } from 'src/layouts/dashboard';
+import { _posts, _tasks, _traffic, _timeline } from 'src/_mock';
+
+import { AnalyticsNews } from '../analytics-news';
+import { AnalyticsTasks } from '../analytics-tasks';
+import { AnalyticsCurrentVisits } from '../analytics-current-visits';
+import { AnalyticsOrderTimeline } from '../analytics-order-timeline';
+import { AnalyticsWebsiteVisits } from '../analytics-website-visits';
+import { AnalyticsWidgetSummary } from '../analytics-widget-summary';
+import { AnalyticsTrafficBySite } from '../analytics-traffic-by-site';
+import { AnalyticsCurrentSubject } from '../analytics-current-subject';
+import { AnalyticsConversionRates } from '../analytics-conversion-rates';
+
+// ----------------------------------------------------------------------
+
+export function OverviewAnalyticsView() {
+ return (
+
+
+ Hi, Welcome back 👋
+
+
+
+
+ }
+ chart={{
+ categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
+ series: [22, 8, 35, 50, 82, 84, 77, 12],
+ }}
+ />
+
+
+
+ }
+ chart={{
+ categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
+ series: [56, 47, 40, 62, 73, 30, 23, 54],
+ }}
+ />
+
+
+
+ }
+ chart={{
+ categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
+ series: [40, 70, 50, 28, 70, 75, 7, 64],
+ }}
+ />
+
+
+
+ }
+ chart={{
+ categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
+ series: [56, 30, 23, 54, 47, 40, 62, 73],
+ }}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/sections/product/product-cart-widget.tsx b/src/sections/product/product-cart-widget.tsx
new file mode 100644
index 0000000..3084060
--- /dev/null
+++ b/src/sections/product/product-cart-widget.tsx
@@ -0,0 +1,47 @@
+import type { BoxProps } from '@mui/material/Box';
+
+import Box from '@mui/material/Box';
+import Badge from '@mui/material/Badge';
+
+import { RouterLink } from 'src/routes/components';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+type CartIconProps = BoxProps & {
+ totalItems: number;
+};
+
+export function CartIcon({ totalItems, sx, ...other }: CartIconProps) {
+ return (
+ ({
+ right: 0,
+ top: 112,
+ zIndex: 999,
+ display: 'flex',
+ cursor: 'pointer',
+ position: 'fixed',
+ color: 'text.primary',
+ borderTopLeftRadius: 16,
+ borderBottomLeftRadius: 16,
+ bgcolor: 'background.paper',
+ padding: theme.spacing(1, 3, 1, 2),
+ boxShadow: theme.vars.customShadows.dropdown,
+ transition: theme.transitions.create(['opacity']),
+ '&:hover': { opacity: 0.72 },
+ }),
+ ...(Array.isArray(sx) ? sx : [sx]),
+ ]}
+ {...other}
+ >
+
+
+
+
+ );
+}
diff --git a/src/sections/product/product-filters.tsx b/src/sections/product/product-filters.tsx
new file mode 100644
index 0000000..3777a98
--- /dev/null
+++ b/src/sections/product/product-filters.tsx
@@ -0,0 +1,232 @@
+import Box from '@mui/material/Box';
+import Stack from '@mui/material/Stack';
+import Radio from '@mui/material/Radio';
+import Badge from '@mui/material/Badge';
+import Button from '@mui/material/Button';
+import Drawer from '@mui/material/Drawer';
+import Rating from '@mui/material/Rating';
+import Divider from '@mui/material/Divider';
+import Checkbox from '@mui/material/Checkbox';
+import FormGroup from '@mui/material/FormGroup';
+import RadioGroup from '@mui/material/RadioGroup';
+import Typography from '@mui/material/Typography';
+import IconButton from '@mui/material/IconButton';
+import FormControlLabel from '@mui/material/FormControlLabel';
+
+import { Iconify } from 'src/components/iconify';
+import { Scrollbar } from 'src/components/scrollbar';
+import { ColorPicker } from 'src/components/color-utils';
+
+// ----------------------------------------------------------------------
+
+export type FiltersProps = {
+ price: string;
+ rating: string;
+ gender: string[];
+ colors: string[];
+ category: string;
+};
+
+type ProductFiltersProps = {
+ canReset: boolean;
+ openFilter: boolean;
+ filters: FiltersProps;
+ onOpenFilter: () => void;
+ onCloseFilter: () => void;
+ onResetFilter: () => void;
+ onSetFilters: (updateState: Partial) => void;
+ options: {
+ colors: string[];
+ ratings: string[];
+ categories: { value: string; label: string }[];
+ genders: { value: string; label: string }[];
+ price: { value: string; label: string }[];
+ };
+};
+
+export function ProductFilters({
+ filters,
+ options,
+ canReset,
+ openFilter,
+ onSetFilters,
+ onOpenFilter,
+ onCloseFilter,
+ onResetFilter,
+}: ProductFiltersProps) {
+ const renderGender = (
+
+ Gender
+
+ {options.genders.map((option) => (
+ {
+ const checked = filters.gender.includes(option.value)
+ ? filters.gender.filter((value) => value !== option.value)
+ : [...filters.gender, option.value];
+
+ onSetFilters({ gender: checked });
+ }}
+ />
+ }
+ label={option.label}
+ />
+ ))}
+
+
+ );
+
+ const renderCategory = (
+
+ Category
+
+ {options.categories.map((option) => (
+ onSetFilters({ category: option.value })}
+ />
+ }
+ label={option.label}
+ />
+ ))}
+
+
+ );
+
+ const renderColors = (
+
+ Colors
+ onSetFilters({ colors: colors as string[] })}
+ limit={6}
+ />
+
+ );
+
+ const renderPrice = (
+
+ Price
+
+ {options.price.map((option) => (
+ onSetFilters({ price: option.value })}
+ />
+ }
+ label={option.label}
+ />
+ ))}
+
+
+ );
+
+ const renderRating = (
+
+
+ Rating
+
+
+ {options.ratings.map((option, index) => (
+ onSetFilters({ rating: option })}
+ sx={{
+ mb: 1,
+ gap: 1,
+ ml: -1,
+ p: 0.5,
+ display: 'flex',
+ borderRadius: 1,
+ cursor: 'pointer',
+ typography: 'body2',
+ alignItems: 'center',
+ '&:hover': { opacity: 0.48 },
+ ...(filters.rating === option && {
+ bgcolor: 'action.selected',
+ }),
+ }}
+ >
+ & Up
+
+ ))}
+
+ );
+
+ return (
+ <>
+
+
+
+
+
+ Filters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {renderGender}
+ {renderCategory}
+ {renderColors}
+ {renderPrice}
+ {renderRating}
+
+
+
+ >
+ );
+}
diff --git a/src/sections/product/product-item.tsx b/src/sections/product/product-item.tsx
new file mode 100644
index 0000000..722d340
--- /dev/null
+++ b/src/sections/product/product-item.tsx
@@ -0,0 +1,98 @@
+import Box from '@mui/material/Box';
+import Link from '@mui/material/Link';
+import Card from '@mui/material/Card';
+import Stack from '@mui/material/Stack';
+import Typography from '@mui/material/Typography';
+
+import { fCurrency } from 'src/utils/format-number';
+
+import { Label } from 'src/components/label';
+import { ColorPreview } from 'src/components/color-utils';
+
+// ----------------------------------------------------------------------
+
+export type ProductItemProps = {
+ id: string;
+ name: string;
+ price: number;
+ status: string;
+ coverUrl: string;
+ colors: string[];
+ priceSale: number | null;
+};
+
+export function ProductItem({ product }: { product: ProductItemProps }) {
+ const renderStatus = (
+
+ );
+
+ const renderImg = (
+
+ );
+
+ const renderPrice = (
+
+
+ {product.priceSale && fCurrency(product.priceSale)}
+
+
+ {fCurrency(product.price)}
+
+ );
+
+ return (
+
+
+ {product.status && renderStatus}
+ {renderImg}
+
+
+
+
+ {product.name}
+
+
+
+
+ {renderPrice}
+
+
+
+ );
+}
diff --git a/src/sections/product/product-sort.tsx b/src/sections/product/product-sort.tsx
new file mode 100644
index 0000000..6fcade4
--- /dev/null
+++ b/src/sections/product/product-sort.tsx
@@ -0,0 +1,91 @@
+import type { ButtonProps } from '@mui/material/Button';
+
+import { useState, useCallback } from 'react';
+
+import Button from '@mui/material/Button';
+import Popover from '@mui/material/Popover';
+import MenuList from '@mui/material/MenuList';
+import Typography from '@mui/material/Typography';
+import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+type ProductSortProps = ButtonProps & {
+ sortBy: string;
+ onSort: (newSort: string) => void;
+ options: { value: string; label: string }[];
+};
+
+export function ProductSort({ options, sortBy, onSort, sx, ...other }: ProductSortProps) {
+ const [openPopover, setOpenPopover] = useState(null);
+
+ const handleOpenPopover = useCallback((event: React.MouseEvent) => {
+ setOpenPopover(event.currentTarget);
+ }, []);
+
+ const handleClosePopover = useCallback(() => {
+ setOpenPopover(null);
+ }, []);
+
+ return (
+ <>
+
+ }
+ sx={sx}
+ {...other}
+ >
+ Sort By:
+
+ {options.find((option) => option.value === sortBy)?.label}
+
+
+
+
+
+ {options.map((option) => (
+
+ ))}
+
+
+ >
+ );
+}
diff --git a/src/sections/product/view/index.ts b/src/sections/product/view/index.ts
new file mode 100644
index 0000000..6a59b36
--- /dev/null
+++ b/src/sections/product/view/index.ts
@@ -0,0 +1 @@
+export * from './products-view';
diff --git a/src/sections/product/view/products-view.tsx b/src/sections/product/view/products-view.tsx
new file mode 100644
index 0000000..8b42910
--- /dev/null
+++ b/src/sections/product/view/products-view.tsx
@@ -0,0 +1,152 @@
+import { useState, useCallback } from 'react';
+
+import Box from '@mui/material/Box';
+import Grid from '@mui/material/Grid';
+import Pagination from '@mui/material/Pagination';
+import Typography from '@mui/material/Typography';
+
+import { _products } from 'src/_mock';
+import { DashboardContent } from 'src/layouts/dashboard';
+
+import { ProductItem } from '../product-item';
+import { ProductSort } from '../product-sort';
+import { CartIcon } from '../product-cart-widget';
+import { ProductFilters } from '../product-filters';
+
+import type { FiltersProps } from '../product-filters';
+
+// ----------------------------------------------------------------------
+
+const GENDER_OPTIONS = [
+ { value: 'men', label: 'Men' },
+ { value: 'women', label: 'Women' },
+ { value: 'kids', label: 'Kids' },
+];
+
+const CATEGORY_OPTIONS = [
+ { value: 'all', label: 'All' },
+ { value: 'shose', label: 'Shose' },
+ { value: 'apparel', label: 'Apparel' },
+ { value: 'accessories', label: 'Accessories' },
+];
+
+const RATING_OPTIONS = ['up4Star', 'up3Star', 'up2Star', 'up1Star'];
+
+const PRICE_OPTIONS = [
+ { value: 'below', label: 'Below $25' },
+ { value: 'between', label: 'Between $25 - $75' },
+ { value: 'above', label: 'Above $75' },
+];
+
+const COLOR_OPTIONS = [
+ '#00AB55',
+ '#000000',
+ '#FFFFFF',
+ '#FFC0CB',
+ '#FF4842',
+ '#1890FF',
+ '#94D82D',
+ '#FFC107',
+];
+
+const defaultFilters = {
+ price: '',
+ gender: [GENDER_OPTIONS[0].value],
+ colors: [COLOR_OPTIONS[4]],
+ rating: RATING_OPTIONS[0],
+ category: CATEGORY_OPTIONS[0].value,
+};
+
+export function ProductsView() {
+ const [sortBy, setSortBy] = useState('featured');
+
+ const [openFilter, setOpenFilter] = useState(false);
+
+ const [filters, setFilters] = useState(defaultFilters);
+
+ const handleOpenFilter = useCallback(() => {
+ setOpenFilter(true);
+ }, []);
+
+ const handleCloseFilter = useCallback(() => {
+ setOpenFilter(false);
+ }, []);
+
+ const handleSort = useCallback((newSort: string) => {
+ setSortBy(newSort);
+ }, []);
+
+ const handleSetFilters = useCallback((updateState: Partial) => {
+ setFilters((prevValue) => ({ ...prevValue, ...updateState }));
+ }, []);
+
+ const canReset = Object.keys(filters).some(
+ (key) => filters[key as keyof FiltersProps] !== defaultFilters[key as keyof FiltersProps]
+ );
+
+ return (
+
+
+
+
+ Products
+
+
+
+ setFilters(defaultFilters)}
+ options={{
+ genders: GENDER_OPTIONS,
+ categories: CATEGORY_OPTIONS,
+ ratings: RATING_OPTIONS,
+ price: PRICE_OPTIONS,
+ colors: COLOR_OPTIONS,
+ }}
+ />
+
+
+
+
+
+
+ {_products.map((product) => (
+
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/src/sections/user/table-empty-rows.tsx b/src/sections/user/table-empty-rows.tsx
new file mode 100644
index 0000000..6bc9ee0
--- /dev/null
+++ b/src/sections/user/table-empty-rows.tsx
@@ -0,0 +1,26 @@
+import type { TableRowProps } from '@mui/material/TableRow';
+
+import TableRow from '@mui/material/TableRow';
+import TableCell from '@mui/material/TableCell';
+
+// ----------------------------------------------------------------------
+
+type TableEmptyRowsProps = TableRowProps & {
+ emptyRows: number;
+ height?: number;
+};
+
+export function TableEmptyRows({ emptyRows, height, sx, ...other }: TableEmptyRowsProps) {
+ if (!emptyRows) {
+ return null;
+ }
+
+ return (
+
+
+
+ );
+}
diff --git a/src/sections/user/table-no-data.tsx b/src/sections/user/table-no-data.tsx
new file mode 100644
index 0000000..914e23f
--- /dev/null
+++ b/src/sections/user/table-no-data.tsx
@@ -0,0 +1,32 @@
+import type { TableRowProps } from '@mui/material/TableRow';
+
+import Box from '@mui/material/Box';
+import TableRow from '@mui/material/TableRow';
+import TableCell from '@mui/material/TableCell';
+import Typography from '@mui/material/Typography';
+
+// ----------------------------------------------------------------------
+
+type TableNoDataProps = TableRowProps & {
+ searchQuery: string;
+};
+
+export function TableNoData({ searchQuery, ...other }: TableNoDataProps) {
+ return (
+
+
+
+
+ Not found
+
+
+
+ No results found for
+ "{searchQuery}".
+
Try checking for typos or using complete words.
+
+
+
+
+ );
+}
diff --git a/src/sections/user/user-table-head.tsx b/src/sections/user/user-table-head.tsx
new file mode 100644
index 0000000..3888ee7
--- /dev/null
+++ b/src/sections/user/user-table-head.tsx
@@ -0,0 +1,69 @@
+import Box from '@mui/material/Box';
+import TableRow from '@mui/material/TableRow';
+import Checkbox from '@mui/material/Checkbox';
+import TableHead from '@mui/material/TableHead';
+import TableCell from '@mui/material/TableCell';
+import TableSortLabel from '@mui/material/TableSortLabel';
+
+import { visuallyHidden } from './utils';
+
+// ----------------------------------------------------------------------
+
+type UserTableHeadProps = {
+ orderBy: string;
+ rowCount: number;
+ numSelected: number;
+ order: 'asc' | 'desc';
+ onSort: (id: string) => void;
+ headLabel: Record[];
+ onSelectAllRows: (checked: boolean) => void;
+};
+
+export function UserTableHead({
+ order,
+ onSort,
+ orderBy,
+ rowCount,
+ headLabel,
+ numSelected,
+ onSelectAllRows,
+}: UserTableHeadProps) {
+ return (
+
+
+
+ 0 && numSelected < rowCount}
+ checked={rowCount > 0 && numSelected === rowCount}
+ onChange={(event: React.ChangeEvent) =>
+ onSelectAllRows(event.target.checked)
+ }
+ />
+
+
+ {headLabel.map((headCell) => (
+
+ onSort(headCell.id)}
+ >
+ {headCell.label}
+ {orderBy === headCell.id ? (
+
+ {order === 'desc' ? 'sorted descending' : 'sorted ascending'}
+
+ ) : null}
+
+
+ ))}
+
+
+ );
+}
diff --git a/src/sections/user/user-table-row.tsx b/src/sections/user/user-table-row.tsx
new file mode 100644
index 0000000..5429428
--- /dev/null
+++ b/src/sections/user/user-table-row.tsx
@@ -0,0 +1,124 @@
+import { useState, useCallback } from 'react';
+
+import Box from '@mui/material/Box';
+import Avatar from '@mui/material/Avatar';
+import Popover from '@mui/material/Popover';
+import TableRow from '@mui/material/TableRow';
+import Checkbox from '@mui/material/Checkbox';
+import MenuList from '@mui/material/MenuList';
+import TableCell from '@mui/material/TableCell';
+import IconButton from '@mui/material/IconButton';
+import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
+
+import { Label } from 'src/components/label';
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+export type UserProps = {
+ id: string;
+ name: string;
+ role: string;
+ status: string;
+ company: string;
+ avatarUrl: string;
+ isVerified: boolean;
+};
+
+type UserTableRowProps = {
+ row: UserProps;
+ selected: boolean;
+ onSelectRow: () => void;
+};
+
+export function UserTableRow({ row, selected, onSelectRow }: UserTableRowProps) {
+ const [openPopover, setOpenPopover] = useState(null);
+
+ const handleOpenPopover = useCallback((event: React.MouseEvent) => {
+ setOpenPopover(event.currentTarget);
+ }, []);
+
+ const handleClosePopover = useCallback(() => {
+ setOpenPopover(null);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+ {row.name}
+
+
+
+ {row.company}
+
+ {row.role}
+
+
+ {row.isVerified ? (
+
+ ) : (
+ '-'
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/sections/user/user-table-toolbar.tsx b/src/sections/user/user-table-toolbar.tsx
new file mode 100644
index 0000000..55bee2f
--- /dev/null
+++ b/src/sections/user/user-table-toolbar.tsx
@@ -0,0 +1,66 @@
+import Tooltip from '@mui/material/Tooltip';
+import Toolbar from '@mui/material/Toolbar';
+import Typography from '@mui/material/Typography';
+import IconButton from '@mui/material/IconButton';
+import OutlinedInput from '@mui/material/OutlinedInput';
+import InputAdornment from '@mui/material/InputAdornment';
+
+import { Iconify } from 'src/components/iconify';
+
+// ----------------------------------------------------------------------
+
+type UserTableToolbarProps = {
+ numSelected: number;
+ filterName: string;
+ onFilterName: (event: React.ChangeEvent) => void;
+};
+
+export function UserTableToolbar({ numSelected, filterName, onFilterName }: UserTableToolbarProps) {
+ return (
+ theme.spacing(0, 1, 0, 3),
+ ...(numSelected > 0 && {
+ color: 'primary.main',
+ bgcolor: 'primary.lighter',
+ }),
+ }}
+ >
+ {numSelected > 0 ? (
+
+ {numSelected} selected
+
+ ) : (
+
+
+
+ }
+ sx={{ maxWidth: 320 }}
+ />
+ )}
+
+ {numSelected > 0 ? (
+
+
+
+
+
+ ) : (
+
+
+
+
+
+ )}
+
+ );
+}
diff --git a/src/sections/user/utils.ts b/src/sections/user/utils.ts
new file mode 100644
index 0000000..162e24d
--- /dev/null
+++ b/src/sections/user/utils.ts
@@ -0,0 +1,79 @@
+import type { UserProps } from './user-table-row';
+
+// ----------------------------------------------------------------------
+
+export const visuallyHidden = {
+ border: 0,
+ margin: -1,
+ padding: 0,
+ width: '1px',
+ height: '1px',
+ overflow: 'hidden',
+ position: 'absolute',
+ whiteSpace: 'nowrap',
+ clip: 'rect(0 0 0 0)',
+} as const;
+
+// ----------------------------------------------------------------------
+
+export function emptyRows(page: number, rowsPerPage: number, arrayLength: number) {
+ return page ? Math.max(0, (1 + page) * rowsPerPage - arrayLength) : 0;
+}
+
+// ----------------------------------------------------------------------
+
+function descendingComparator(a: T, b: T, orderBy: keyof T) {
+ if (b[orderBy] < a[orderBy]) {
+ return -1;
+ }
+ if (b[orderBy] > a[orderBy]) {
+ return 1;
+ }
+ return 0;
+}
+
+// ----------------------------------------------------------------------
+
+export function getComparator(
+ order: 'asc' | 'desc',
+ orderBy: Key
+): (
+ a: {
+ [key in Key]: number | string;
+ },
+ b: {
+ [key in Key]: number | string;
+ }
+) => number {
+ return order === 'desc'
+ ? (a, b) => descendingComparator(a, b, orderBy)
+ : (a, b) => -descendingComparator(a, b, orderBy);
+}
+
+// ----------------------------------------------------------------------
+
+type ApplyFilterProps = {
+ inputData: UserProps[];
+ filterName: string;
+ comparator: (a: any, b: any) => number;
+};
+
+export function applyFilter({ inputData, comparator, filterName }: ApplyFilterProps) {
+ const stabilizedThis = inputData.map((el, index) => [el, index] as const);
+
+ stabilizedThis.sort((a, b) => {
+ const order = comparator(a[0], b[0]);
+ if (order !== 0) return order;
+ return a[1] - b[1];
+ });
+
+ inputData = stabilizedThis.map((el) => el[0]);
+
+ if (filterName) {
+ inputData = inputData.filter(
+ (user) => user.name.toLowerCase().indexOf(filterName.toLowerCase()) !== -1
+ );
+ }
+
+ return inputData;
+}
diff --git a/src/sections/user/view/index.ts b/src/sections/user/view/index.ts
new file mode 100644
index 0000000..9116ca7
--- /dev/null
+++ b/src/sections/user/view/index.ts
@@ -0,0 +1 @@
+export * from './user-view';
diff --git a/src/sections/user/view/user-view.tsx b/src/sections/user/view/user-view.tsx
new file mode 100644
index 0000000..749d4a2
--- /dev/null
+++ b/src/sections/user/view/user-view.tsx
@@ -0,0 +1,203 @@
+import { useState, useCallback } from 'react';
+
+import Box from '@mui/material/Box';
+import Card from '@mui/material/Card';
+import Table from '@mui/material/Table';
+import Button from '@mui/material/Button';
+import TableBody from '@mui/material/TableBody';
+import Typography from '@mui/material/Typography';
+import TableContainer from '@mui/material/TableContainer';
+import TablePagination from '@mui/material/TablePagination';
+
+import { _users } from 'src/_mock';
+import { DashboardContent } from 'src/layouts/dashboard';
+
+import { Iconify } from 'src/components/iconify';
+import { Scrollbar } from 'src/components/scrollbar';
+
+import { TableNoData } from '../table-no-data';
+import { UserTableRow } from '../user-table-row';
+import { UserTableHead } from '../user-table-head';
+import { TableEmptyRows } from '../table-empty-rows';
+import { UserTableToolbar } from '../user-table-toolbar';
+import { emptyRows, applyFilter, getComparator } from '../utils';
+
+import type { UserProps } from '../user-table-row';
+
+// ----------------------------------------------------------------------
+
+export function UserView() {
+ const table = useTable();
+
+ const [filterName, setFilterName] = useState('');
+
+ const dataFiltered: UserProps[] = applyFilter({
+ inputData: _users,
+ comparator: getComparator(table.order, table.orderBy),
+ filterName,
+ });
+
+ const notFound = !dataFiltered.length && !!filterName;
+
+ return (
+
+
+
+ Users
+
+ }
+ >
+ New user
+
+
+
+
+ ) => {
+ setFilterName(event.target.value);
+ table.onResetPage();
+ }}
+ />
+
+
+
+
+
+ table.onSelectAllRows(
+ checked,
+ _users.map((user) => user.id)
+ )
+ }
+ headLabel={[
+ { id: 'name', label: 'Name' },
+ { id: 'company', label: 'Company' },
+ { id: 'role', label: 'Role' },
+ { id: 'isVerified', label: 'Verified', align: 'center' },
+ { id: 'status', label: 'Status' },
+ { id: '' },
+ ]}
+ />
+
+ {dataFiltered
+ .slice(
+ table.page * table.rowsPerPage,
+ table.page * table.rowsPerPage + table.rowsPerPage
+ )
+ .map((row) => (
+ table.onSelectRow(row.id)}
+ />
+ ))}
+
+
+
+ {notFound && }
+
+
+
+
+
+
+
+
+ );
+}
+
+// ----------------------------------------------------------------------
+
+export function useTable() {
+ const [page, setPage] = useState(0);
+ const [orderBy, setOrderBy] = useState('name');
+ const [rowsPerPage, setRowsPerPage] = useState(5);
+ const [selected, setSelected] = useState([]);
+ const [order, setOrder] = useState<'asc' | 'desc'>('asc');
+
+ const onSort = useCallback(
+ (id: string) => {
+ const isAsc = orderBy === id && order === 'asc';
+ setOrder(isAsc ? 'desc' : 'asc');
+ setOrderBy(id);
+ },
+ [order, orderBy]
+ );
+
+ const onSelectAllRows = useCallback((checked: boolean, newSelecteds: string[]) => {
+ if (checked) {
+ setSelected(newSelecteds);
+ return;
+ }
+ setSelected([]);
+ }, []);
+
+ const onSelectRow = useCallback(
+ (inputValue: string) => {
+ const newSelected = selected.includes(inputValue)
+ ? selected.filter((value) => value !== inputValue)
+ : [...selected, inputValue];
+
+ setSelected(newSelected);
+ },
+ [selected]
+ );
+
+ const onResetPage = useCallback(() => {
+ setPage(0);
+ }, []);
+
+ const onChangePage = useCallback((event: unknown, newPage: number) => {
+ setPage(newPage);
+ }, []);
+
+ const onChangeRowsPerPage = useCallback(
+ (event: React.ChangeEvent) => {
+ setRowsPerPage(parseInt(event.target.value, 10));
+ onResetPage();
+ },
+ [onResetPage]
+ );
+
+ return {
+ page,
+ order,
+ onSort,
+ orderBy,
+ selected,
+ rowsPerPage,
+ onSelectRow,
+ onResetPage,
+ onChangePage,
+ onSelectAllRows,
+ onChangeRowsPerPage,
+ };
+}
diff --git a/src/theme/core/components.tsx b/src/theme/core/components.tsx
new file mode 100644
index 0000000..241b16a
--- /dev/null
+++ b/src/theme/core/components.tsx
@@ -0,0 +1,171 @@
+import type { Theme, Components } from '@mui/material/styles';
+
+import { varAlpha } from 'minimal-shared/utils';
+
+import SvgIcon from '@mui/material/SvgIcon';
+
+// ----------------------------------------------------------------------
+
+const MuiBackdrop: Components['MuiBackdrop'] = {
+ styleOverrides: {
+ root: ({ theme }) => ({
+ backgroundColor: varAlpha(theme.vars.palette.grey['900Channel'], 0.8),
+ }),
+ invisible: {
+ background: 'transparent',
+ },
+ },
+};
+
+const MuiButton: Components['MuiButton'] = {
+ defaultProps: {
+ disableElevation: true,
+ },
+ styleOverrides: {
+ containedInherit: ({ theme }) => ({
+ color: theme.vars.palette.common.white,
+ backgroundColor: theme.vars.palette.grey[800],
+ '&:hover': {
+ color: theme.vars.palette.common.white,
+ backgroundColor: theme.vars.palette.grey[800],
+ },
+ }),
+ sizeLarge: {
+ minHeight: 48,
+ },
+ },
+};
+
+const MuiCard: Components['MuiCard'] = {
+ styleOverrides: {
+ root: ({ theme }) => ({
+ zIndex: 0,
+ position: 'relative',
+ boxShadow: theme.vars.customShadows.card,
+ borderRadius: theme.shape.borderRadius * 2,
+ }),
+ },
+};
+
+const MuiCardHeader: Components['MuiCardHeader'] = {
+ defaultProps: {
+ titleTypographyProps: { variant: 'h6' },
+ subheaderTypographyProps: { variant: 'body2' },
+ },
+ styleOverrides: {
+ root: ({ theme }) => ({
+ padding: theme.spacing(3, 3, 0),
+ }),
+ },
+};
+
+const MuiOutlinedInput: Components['MuiOutlinedInput'] = {
+ styleOverrides: {
+ notchedOutline: ({ theme }) => ({
+ borderColor: varAlpha(theme.vars.palette.grey['500Channel'], 0.2),
+ }),
+ },
+};
+
+const MuiPaper: Components['MuiPaper'] = {
+ defaultProps: { elevation: 0 },
+ styleOverrides: {
+ root: { backgroundImage: 'none' },
+ outlined: ({ theme }) => ({
+ borderColor: varAlpha(theme.vars.palette.grey['500Channel'], 0.16),
+ }),
+ },
+};
+
+const MuiTableCell: Components['MuiTableCell'] = {
+ styleOverrides: {
+ head: ({ theme }) => ({
+ fontSize: theme.typography.pxToRem(14),
+ color: theme.vars.palette.text.secondary,
+ fontWeight: theme.typography.fontWeightSemiBold,
+ backgroundColor: theme.vars.palette.background.neutral,
+ }),
+ },
+};
+
+const MuiMenuItem: Components['MuiMenuItem'] = {
+ styleOverrides: {
+ root: ({ theme }) => ({
+ ...theme.typography.body2,
+ }),
+ },
+};
+
+const MuiLink: Components['MuiLink'] = {
+ defaultProps: { underline: 'hover' },
+};
+
+const MuiFormControlLabel: Components['MuiFormControlLabel'] = {
+ styleOverrides: {
+ label: ({ theme }) => ({
+ ...theme.typography.body2,
+ }),
+ },
+};
+
+const MuiCheckbox: Components['MuiCheckbox'] = {
+ defaultProps: {
+ size: 'small',
+ icon: (
+
+
+
+ ),
+ checkedIcon: (
+
+
+
+ ),
+ indeterminateIcon: (
+
+
+
+ ),
+ },
+};
+
+const MuiRadio: Components['MuiRadio'] = {
+ defaultProps: {
+ size: 'small',
+ icon: (
+
+
+
+ ),
+ checkedIcon: (
+
+
+
+ ),
+ },
+};
+
+// ----------------------------------------------------------------------
+
+export const components = {
+ MuiCard,
+ MuiLink,
+ MuiPaper,
+ MuiRadio,
+ MuiButton,
+ MuiBackdrop,
+ MuiMenuItem,
+ MuiCheckbox,
+ MuiTableCell,
+ MuiCardHeader,
+ MuiOutlinedInput,
+ MuiFormControlLabel,
+};
diff --git a/src/theme/core/custom-shadows.ts b/src/theme/core/custom-shadows.ts
new file mode 100644
index 0000000..ec3c805
--- /dev/null
+++ b/src/theme/core/custom-shadows.ts
@@ -0,0 +1,64 @@
+import { varAlpha } from 'minimal-shared/utils';
+
+import { grey, info, error, common, primary, success, warning, secondary } from './palette';
+
+import type { ThemeColorScheme } from '../types';
+
+// ----------------------------------------------------------------------
+
+/**
+ * TypeScript (type definition and extension)
+ * @to {@link file://./../extend-theme-types.d.ts}
+ */
+
+export interface CustomShadows {
+ z1?: string;
+ z4?: string;
+ z8?: string;
+ z12?: string;
+ z16?: string;
+ z20?: string;
+ z24?: string;
+ primary?: string;
+ secondary?: string;
+ info?: string;
+ success?: string;
+ warning?: string;
+ error?: string;
+ card?: string;
+ dialog?: string;
+ dropdown?: string;
+}
+
+// ----------------------------------------------------------------------
+
+export function createShadowColor(colorChannel: string): string {
+ return `0 8px 16px 0 ${varAlpha(colorChannel, 0.24)}`;
+}
+
+function createCustomShadows(colorChannel: string): CustomShadows {
+ return {
+ z1: `0 1px 2px 0 ${varAlpha(colorChannel, 0.16)}`,
+ z4: `0 4px 8px 0 ${varAlpha(colorChannel, 0.16)}`,
+ z8: `0 8px 16px 0 ${varAlpha(colorChannel, 0.16)}`,
+ z12: `0 12px 24px -4px ${varAlpha(colorChannel, 0.16)}`,
+ z16: `0 16px 32px -4px ${varAlpha(colorChannel, 0.16)}`,
+ z20: `0 20px 40px -4px ${varAlpha(colorChannel, 0.16)}`,
+ z24: `0 24px 48px 0 ${varAlpha(colorChannel, 0.16)}`,
+ /********/
+ dialog: `-40px 40px 80px -8px ${varAlpha(common.blackChannel, 0.24)}`,
+ card: `0 0 2px 0 ${varAlpha(colorChannel, 0.2)}, 0 12px 24px -4px ${varAlpha(colorChannel, 0.12)}`,
+ dropdown: `0 0 2px 0 ${varAlpha(colorChannel, 0.24)}, -20px 20px 40px -4px ${varAlpha(colorChannel, 0.24)}`,
+ /********/
+ primary: createShadowColor(primary.mainChannel),
+ secondary: createShadowColor(secondary.mainChannel),
+ info: createShadowColor(info.mainChannel),
+ success: createShadowColor(success.mainChannel),
+ warning: createShadowColor(warning.mainChannel),
+ error: createShadowColor(error.mainChannel),
+ };
+}
+
+export const customShadows: Partial> = {
+ light: createCustomShadows(grey['500Channel']),
+};
diff --git a/src/theme/core/index.ts b/src/theme/core/index.ts
new file mode 100644
index 0000000..1f6edd4
--- /dev/null
+++ b/src/theme/core/index.ts
@@ -0,0 +1,9 @@
+export * from './shadows';
+
+export * from './palette';
+
+export * from './typography';
+
+export * from './components';
+
+export * from './custom-shadows';
diff --git a/src/theme/core/palette.ts b/src/theme/core/palette.ts
new file mode 100644
index 0000000..c5424f0
--- /dev/null
+++ b/src/theme/core/palette.ts
@@ -0,0 +1,146 @@
+import type { PaletteColor, ColorSystemOptions, PaletteColorChannel } from '@mui/material/styles';
+
+import { varAlpha, createPaletteChannel } from 'minimal-shared/utils';
+
+import { themeConfig } from '../theme-config';
+
+import type { ThemeColorScheme } from '../types';
+
+// ----------------------------------------------------------------------
+
+/**
+ * TypeScript (type definition and extension)
+ * @to {@link file://./../extend-theme-types.d.ts}
+ */
+
+// Keys for the palette colors
+export type PaletteColorKey = 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error';
+
+// Palette color without additional channels
+export type PaletteColorNoChannels = Omit;
+
+// Palette color with additional channels
+export type PaletteColorWithChannels = PaletteColor & PaletteColorChannel;
+
+// Extended common colors
+export type CommonColorsExtend = {
+ whiteChannel: string;
+ blackChannel: string;
+};
+
+// Extended text colors
+export type TypeTextExtend = {
+ disabledChannel: string;
+};
+
+// Extended background colors
+export type TypeBackgroundExtend = {
+ neutral: string;
+ neutralChannel: string;
+};
+
+// Extended palette colors
+export type PaletteColorExtend = {
+ lighter: string;
+ darker: string;
+ lighterChannel: string;
+ darkerChannel: string;
+};
+
+// Extended grey channels
+export type GreyExtend = {
+ '50Channel': string;
+ '100Channel': string;
+ '200Channel': string;
+ '300Channel': string;
+ '400Channel': string;
+ '500Channel': string;
+ '600Channel': string;
+ '700Channel': string;
+ '800Channel': string;
+ '900Channel': string;
+};
+
+// ----------------------------------------------------------------------
+
+// Primary color
+export const primary = createPaletteChannel(themeConfig.palette.primary);
+
+// Secondary color
+export const secondary = createPaletteChannel(themeConfig.palette.secondary);
+
+// Info color
+export const info = createPaletteChannel(themeConfig.palette.info);
+
+// Success color
+export const success = createPaletteChannel(themeConfig.palette.success);
+
+// Warning color
+export const warning = createPaletteChannel(themeConfig.palette.warning);
+
+// Error color
+export const error = createPaletteChannel(themeConfig.palette.error);
+
+// Common color
+export const common = createPaletteChannel(themeConfig.palette.common);
+
+// Grey color
+export const grey = createPaletteChannel(themeConfig.palette.grey);
+
+// Text color
+export const text = {
+ light: createPaletteChannel({
+ primary: grey[800],
+ secondary: grey[600],
+ disabled: grey[500],
+ }),
+};
+
+// Background color
+export const background = {
+ light: createPaletteChannel({
+ paper: '#FFFFFF',
+ default: grey[100],
+ neutral: grey[200],
+ }),
+};
+
+// Base action color
+export const baseAction = {
+ hover: varAlpha(grey['500Channel'], 0.08),
+ selected: varAlpha(grey['500Channel'], 0.16),
+ focus: varAlpha(grey['500Channel'], 0.24),
+ disabled: varAlpha(grey['500Channel'], 0.8),
+ disabledBackground: varAlpha(grey['500Channel'], 0.24),
+ hoverOpacity: 0.08,
+ disabledOpacity: 0.48,
+};
+
+// Action color
+export const action = {
+ light: { ...baseAction, active: grey[600] },
+};
+
+// ----------------------------------------------------------------------
+
+// Base palette
+export const basePalette = {
+ primary,
+ secondary,
+ info,
+ success,
+ warning,
+ error,
+ common,
+ grey,
+ divider: varAlpha(grey['500Channel'], 0.2),
+};
+
+export const palette: Partial> = {
+ light: {
+ ...basePalette,
+ text: text.light,
+ background: background.light,
+ action: action.light,
+ },
+};
diff --git a/src/theme/core/shadows.ts b/src/theme/core/shadows.ts
new file mode 100644
index 0000000..4d1659a
--- /dev/null
+++ b/src/theme/core/shadows.ts
@@ -0,0 +1,47 @@
+import type { Shadows } from '@mui/material/styles';
+
+import { varAlpha } from 'minimal-shared/utils';
+
+import { grey } from './palette';
+
+import type { ThemeColorScheme } from '../types';
+
+// ----------------------------------------------------------------------
+
+function createShadows(colorChannel: string): Shadows {
+ const color1 = varAlpha(colorChannel, 0.2);
+ const color2 = varAlpha(colorChannel, 0.14);
+ const color3 = varAlpha(colorChannel, 0.12);
+
+ return [
+ 'none',
+ `0px 2px 1px -1px ${color1},0px 1px 1px 0px ${color2},0px 1px 3px 0px ${color3}`,
+ `0px 3px 1px -2px ${color1},0px 2px 2px 0px ${color2},0px 1px 5px 0px ${color3}`,
+ `0px 3px 3px -2px ${color1},0px 3px 4px 0px ${color2},0px 1px 8px 0px ${color3}`,
+ `0px 2px 4px -1px ${color1},0px 4px 5px 0px ${color2},0px 1px 10px 0px ${color3}`,
+ `0px 3px 5px -1px ${color1},0px 5px 8px 0px ${color2},0px 1px 14px 0px ${color3}`,
+ `0px 3px 5px -1px ${color1},0px 6px 10px 0px ${color2},0px 1px 18px 0px ${color3}`,
+ `0px 4px 5px -2px ${color1},0px 7px 10px 1px ${color2},0px 2px 16px 1px ${color3}`,
+ `0px 5px 5px -3px ${color1},0px 8px 10px 1px ${color2},0px 3px 14px 2px ${color3}`,
+ `0px 5px 6px -3px ${color1},0px 9px 12px 1px ${color2},0px 3px 16px 2px ${color3}`,
+ `0px 6px 6px -3px ${color1},0px 10px 14px 1px ${color2},0px 4px 18px 3px ${color3}`,
+ `0px 6px 7px -4px ${color1},0px 11px 15px 1px ${color2},0px 4px 20px 3px ${color3}`,
+ `0px 7px 8px -4px ${color1},0px 12px 17px 2px ${color2},0px 5px 22px 4px ${color3}`,
+ `0px 7px 8px -4px ${color1},0px 13px 19px 2px ${color2},0px 5px 24px 4px ${color3}`,
+ `0px 7px 9px -4px ${color1},0px 14px 21px 2px ${color2},0px 5px 26px 4px ${color3}`,
+ `0px 8px 9px -5px ${color1},0px 15px 22px 2px ${color2},0px 6px 28px 5px ${color3}`,
+ `0px 8px 10px -5px ${color1},0px 16px 24px 2px ${color2},0px 6px 30px 5px ${color3}`,
+ `0px 8px 11px -5px ${color1},0px 17px 26px 2px ${color2},0px 6px 32px 5px ${color3}`,
+ `0px 9px 11px -5px ${color1},0px 18px 28px 2px ${color2},0px 7px 34px 6px ${color3}`,
+ `0px 9px 12px -6px ${color1},0px 19px 29px 2px ${color2},0px 7px 36px 6px ${color3}`,
+ `0px 10px 13px -6px ${color1},0px 20px 31px 3px ${color2},0px 8px 38px 7px ${color3}`,
+ `0px 10px 13px -6px ${color1},0px 21px 33px 3px ${color2},0px 8px 40px 7px ${color3}`,
+ `0px 10px 14px -6px ${color1},0px 22px 35px 3px ${color2},0px 8px 42px 7px ${color3}`,
+ `0px 11px 14px -7px ${color1},0px 23px 36px 3px ${color2},0px 9px 44px 8px ${color3}`,
+ `0px 11px 15px -7px ${color1},0px 24px 38px 3px ${color2},0px 9px 46px 8px ${color3}`,
+ ];
+}
+
+export const shadows: Partial> = {
+ light: createShadows(grey['500Channel']),
+};
diff --git a/src/theme/core/typography.ts b/src/theme/core/typography.ts
new file mode 100644
index 0000000..302dfc8
--- /dev/null
+++ b/src/theme/core/typography.ts
@@ -0,0 +1,127 @@
+import type { CSSObject, Breakpoint, TypographyVariantsOptions } from '@mui/material/styles';
+
+import { pxToRem, setFont } from 'minimal-shared/utils';
+
+import { createTheme as getTheme } from '@mui/material/styles';
+
+import { themeConfig } from '../theme-config';
+
+// ----------------------------------------------------------------------
+
+/**
+ * TypeScript (type definition and extension)
+ * @to {@link file://./../extend-theme-types.d.ts}
+ */
+export type FontStyleExtend = {
+ fontWeightSemiBold: CSSObject['fontWeight'];
+ fontSecondaryFamily: CSSObject['fontFamily'];
+};
+
+export type ResponsiveFontSizesInput = Partial>;
+export type ResponsiveFontSizesResult = Record;
+
+const defaultMuiTheme = getTheme();
+
+function responsiveFontSizes(obj: ResponsiveFontSizesInput): ResponsiveFontSizesResult {
+ const breakpoints: Breakpoint[] = defaultMuiTheme.breakpoints.keys;
+
+ return breakpoints.reduce((acc, breakpoint) => {
+ const value = obj[breakpoint];
+
+ if (value !== undefined && value >= 0) {
+ acc[defaultMuiTheme.breakpoints.up(breakpoint)] = {
+ fontSize: pxToRem(value),
+ };
+ }
+
+ return acc;
+ }, {} as ResponsiveFontSizesResult);
+}
+
+// ----------------------------------------------------------------------
+
+const primaryFont = setFont(themeConfig.fontFamily.primary);
+const secondaryFont = setFont(themeConfig.fontFamily.secondary);
+
+export const typography: TypographyVariantsOptions = {
+ fontFamily: primaryFont,
+ fontSecondaryFamily: secondaryFont,
+ fontWeightLight: '300',
+ fontWeightRegular: '400',
+ fontWeightMedium: '500',
+ fontWeightSemiBold: '600',
+ fontWeightBold: '700',
+ h1: {
+ fontFamily: secondaryFont,
+ fontWeight: 800,
+ lineHeight: 80 / 64,
+ fontSize: pxToRem(40),
+ ...responsiveFontSizes({ sm: 52, md: 58, lg: 64 }),
+ },
+ h2: {
+ fontFamily: secondaryFont,
+ fontWeight: 800,
+ lineHeight: 64 / 48,
+ fontSize: pxToRem(32),
+ ...responsiveFontSizes({ sm: 40, md: 44, lg: 48 }),
+ },
+ h3: {
+ fontFamily: secondaryFont,
+ fontWeight: 700,
+ lineHeight: 1.5,
+ fontSize: pxToRem(24),
+ ...responsiveFontSizes({ sm: 26, md: 30, lg: 32 }),
+ },
+ h4: {
+ fontWeight: 700,
+ lineHeight: 1.5,
+ fontSize: pxToRem(20),
+ ...responsiveFontSizes({ md: 24 }),
+ },
+ h5: {
+ fontWeight: 700,
+ lineHeight: 1.5,
+ fontSize: pxToRem(18),
+ ...responsiveFontSizes({ sm: 19 }),
+ },
+ h6: {
+ fontWeight: 600,
+ lineHeight: 28 / 18,
+ fontSize: pxToRem(17),
+ ...responsiveFontSizes({ sm: 18 }),
+ },
+ subtitle1: {
+ fontWeight: 600,
+ lineHeight: 1.5,
+ fontSize: pxToRem(16),
+ },
+ subtitle2: {
+ fontWeight: 600,
+ lineHeight: 22 / 14,
+ fontSize: pxToRem(14),
+ },
+ body1: {
+ lineHeight: 1.5,
+ fontSize: pxToRem(16),
+ },
+ body2: {
+ lineHeight: 22 / 14,
+ fontSize: pxToRem(14),
+ },
+ caption: {
+ lineHeight: 1.5,
+ fontSize: pxToRem(12),
+ },
+ overline: {
+ fontWeight: 700,
+ lineHeight: 1.5,
+ fontSize: pxToRem(12),
+ textTransform: 'uppercase',
+ },
+ button: {
+ fontWeight: 700,
+ lineHeight: 24 / 14,
+ fontSize: pxToRem(14),
+ textTransform: 'unset',
+ },
+};
diff --git a/src/theme/create-classes.ts b/src/theme/create-classes.ts
new file mode 100644
index 0000000..977771a
--- /dev/null
+++ b/src/theme/create-classes.ts
@@ -0,0 +1,7 @@
+import { themeConfig } from './theme-config';
+
+// ----------------------------------------------------------------------
+
+export function createClasses(className: string): string {
+ return `${themeConfig.classesPrefix}__${className}`;
+}
diff --git a/src/theme/create-theme.ts b/src/theme/create-theme.ts
new file mode 100644
index 0000000..70bee61
--- /dev/null
+++ b/src/theme/create-theme.ts
@@ -0,0 +1,40 @@
+import type { Theme } from '@mui/material/styles';
+
+import { createTheme as createMuiTheme } from '@mui/material/styles';
+
+import { shadows } from './core/shadows';
+import { palette } from './core/palette';
+import { themeConfig } from './theme-config';
+import { components } from './core/components';
+import { typography } from './core/typography';
+import { customShadows } from './core/custom-shadows';
+
+import type { ThemeOptions } from './types';
+
+// ----------------------------------------------------------------------
+
+export const baseTheme: ThemeOptions = {
+ colorSchemes: {
+ light: {
+ palette: palette.light,
+ shadows: shadows.light,
+ customShadows: customShadows.light,
+ },
+ },
+ components,
+ typography,
+ shape: { borderRadius: 8 },
+ cssVariables: themeConfig.cssVariables,
+};
+
+// ----------------------------------------------------------------------
+
+type CreateThemeProps = {
+ themeOverrides?: ThemeOptions;
+};
+
+export function createTheme({ themeOverrides = {} }: CreateThemeProps = {}): Theme {
+ const theme = createMuiTheme(baseTheme, themeOverrides);
+
+ return theme;
+}
diff --git a/src/theme/extend-theme-types.d.ts b/src/theme/extend-theme-types.d.ts
new file mode 100644
index 0000000..42b84e1
--- /dev/null
+++ b/src/theme/extend-theme-types.d.ts
@@ -0,0 +1,66 @@
+import type {} from '@mui/lab/themeAugmentation';
+import type {} from '@mui/material/themeCssVarsAugmentation';
+
+import type { FontStyleExtend } from './core/typography';
+import type { CustomShadows } from './core/custom-shadows';
+import type {
+ GreyExtend,
+ TypeTextExtend,
+ CommonColorsExtend,
+ PaletteColorExtend,
+ TypeBackgroundExtend,
+} from './core/palette';
+
+// ----------------------------------------------------------------------
+
+/** **************************************
+ * EXTEND CORE
+ * Palette, typography, shadows...
+ *************************************** */
+
+/**
+ * Palette
+ * https://mui.com/customization/palette/
+ * @from {@link file://./core/palette.ts}
+ */
+declare module '@mui/material/styles' {
+ // grey
+ interface Color extends GreyExtend {}
+ // text
+ interface TypeText extends TypeTextExtend {}
+ // black & white
+ interface CommonColors extends CommonColorsExtend {}
+ // background
+ interface TypeBackground extends TypeBackgroundExtend {}
+ // primary, secondary, info, success, warning, error
+ interface PaletteColor extends PaletteColorExtend {}
+ interface SimplePaletteColorOptions extends Partial {}
+}
+
+/**
+ * Typography
+ * https://mui.com/customization/typography/
+ * @from {@link file://./core/typography.ts}
+ */
+declare module '@mui/material/styles' {
+ interface TypographyVariants extends FontStyleExtend {}
+ interface TypographyVariantsOptions extends Partial {}
+}
+
+declare module '@mui/material/styles' {
+ /**
+ * Custom shadows
+ * @from {@link file://./core/custom-shadows.ts}
+ */
+ interface Theme {
+ customShadows: CustomShadows;
+ }
+ interface ThemeOptions {
+ customShadows?: CustomShadows;
+ }
+ interface ThemeVars {
+ customShadows: CustomShadows;
+ typography: Theme['typography'];
+ transitions: Theme['transitions'];
+ }
+}
diff --git a/src/theme/index.ts b/src/theme/index.ts
new file mode 100644
index 0000000..26e759f
--- /dev/null
+++ b/src/theme/index.ts
@@ -0,0 +1,7 @@
+export * from './core';
+
+export * from './types';
+
+export * from './theme-config';
+
+export * from './theme-provider';
diff --git a/src/theme/theme-config.ts b/src/theme/theme-config.ts
new file mode 100644
index 0000000..8805602
--- /dev/null
+++ b/src/theme/theme-config.ts
@@ -0,0 +1,109 @@
+import type { CommonColors } from '@mui/material/styles';
+
+import type { ThemeCssVariables } from './types';
+import type { PaletteColorNoChannels } from './core/palette';
+
+// ----------------------------------------------------------------------
+
+type ThemeConfig = {
+ classesPrefix: string;
+ cssVariables: ThemeCssVariables;
+ fontFamily: Record<'primary' | 'secondary', string>;
+ palette: Record<
+ 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error',
+ PaletteColorNoChannels
+ > & {
+ common: Pick;
+ grey: Record<
+ '50' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900',
+ string
+ >;
+ };
+};
+
+export const themeConfig: ThemeConfig = {
+ /** **************************************
+ * Base
+ *************************************** */
+ classesPrefix: 'minimal',
+ /** **************************************
+ * Typography
+ *************************************** */
+ fontFamily: {
+ primary: 'DM Sans Variable',
+ secondary: 'Barlow',
+ },
+ /** **************************************
+ * Palette
+ *************************************** */
+ palette: {
+ primary: {
+ lighter: '#D0ECFE',
+ light: '#73BAFB',
+ main: '#1877F2',
+ dark: '#0C44AE',
+ darker: '#042174',
+ contrastText: '#FFFFFF',
+ },
+ secondary: {
+ lighter: '#EFD6FF',
+ light: '#C684FF',
+ main: '#8E33FF',
+ dark: '#5119B7',
+ darker: '#27097A',
+ contrastText: '#FFFFFF',
+ },
+ info: {
+ lighter: '#CAFDF5',
+ light: '#61F3F3',
+ main: '#00B8D9',
+ dark: '#006C9C',
+ darker: '#003768',
+ contrastText: '#FFFFFF',
+ },
+ success: {
+ lighter: '#D3FCD2',
+ light: '#77ED8B',
+ main: '#22C55E',
+ dark: '#118D57',
+ darker: '#065E49',
+ contrastText: '#ffffff',
+ },
+ warning: {
+ lighter: '#FFF5CC',
+ light: '#FFD666',
+ main: '#FFAB00',
+ dark: '#B76E00',
+ darker: '#7A4100',
+ contrastText: '#1C252E',
+ },
+ error: {
+ lighter: '#FFE9D5',
+ light: '#FFAC82',
+ main: '#FF5630',
+ dark: '#B71D18',
+ darker: '#7A0916',
+ contrastText: '#FFFFFF',
+ },
+ grey: {
+ '50': '#FCFDFD',
+ '100': '#F9FAFB',
+ '200': '#F4F6F8',
+ '300': '#DFE3E8',
+ '400': '#C4CDD5',
+ '500': '#919EAB',
+ '600': '#637381',
+ '700': '#454F5B',
+ '800': '#1C252E',
+ '900': '#141A21',
+ },
+ common: { black: '#000000', white: '#FFFFFF' },
+ },
+ /** **************************************
+ * Css variables
+ *************************************** */
+ cssVariables: {
+ cssVarPrefix: '',
+ colorSchemeSelector: 'data-color-scheme',
+ },
+};
diff --git a/src/theme/theme-provider.tsx b/src/theme/theme-provider.tsx
new file mode 100644
index 0000000..8b8de27
--- /dev/null
+++ b/src/theme/theme-provider.tsx
@@ -0,0 +1,28 @@
+import type { ThemeProviderProps as MuiThemeProviderProps } from '@mui/material/styles';
+
+import CssBaseline from '@mui/material/CssBaseline';
+import { ThemeProvider as ThemeVarsProvider } from '@mui/material/styles';
+
+import { createTheme } from './create-theme';
+
+import type {} from './extend-theme-types';
+import type { ThemeOptions } from './types';
+
+// ----------------------------------------------------------------------
+
+export type ThemeProviderProps = Partial & {
+ themeOverrides?: ThemeOptions;
+};
+
+export function ThemeProvider({ themeOverrides, children, ...other }: ThemeProviderProps) {
+ const theme = createTheme({
+ themeOverrides,
+ });
+
+ return (
+
+
+ {children}
+
+ );
+}
diff --git a/src/theme/types.ts b/src/theme/types.ts
new file mode 100644
index 0000000..d3f28ad
--- /dev/null
+++ b/src/theme/types.ts
@@ -0,0 +1,35 @@
+import type {
+ Shadows,
+ ColorSystemOptions,
+ CssVarsThemeOptions,
+ SupportedColorScheme,
+ ThemeOptions as MuiThemeOptions,
+} from '@mui/material/styles';
+
+import type { CustomShadows } from './core/custom-shadows';
+
+// ----------------------------------------------------------------------
+
+/**
+ * Theme options
+ * Extended type that includes additional properties for color schemes and CSS variables.
+ *
+ * @see https://github.com/mui/material-ui/blob/master/packages/mui-material/src/styles/createTheme.ts
+ */
+
+export type ThemeColorScheme = SupportedColorScheme;
+export type ThemeCssVariables = Pick<
+ CssVarsThemeOptions,
+ 'colorSchemeSelector' | 'disableCssColorScheme' | 'cssVarPrefix' | 'shouldSkipGeneratingVar'
+>;
+
+type ColorSchemeOptionsExtended = ColorSystemOptions & {
+ shadows?: Shadows;
+ customShadows?: CustomShadows;
+};
+
+export type ThemeOptions = Omit &
+ Pick & {
+ colorSchemes?: Partial>;
+ cssVariables?: ThemeCssVariables;
+ };
diff --git a/src/utils/format-number.ts b/src/utils/format-number.ts
new file mode 100644
index 0000000..33203ac
--- /dev/null
+++ b/src/utils/format-number.ts
@@ -0,0 +1,86 @@
+/*
+ * Locales code
+ * https://gist.github.com/raushankrjha/d1c7e35cf87e69aa8b4208a8171a8416
+ */
+
+export type InputNumberValue = string | number | null | undefined;
+
+type Options = Intl.NumberFormatOptions;
+
+const DEFAULT_LOCALE = { code: 'en-US', currency: 'USD' };
+
+function processInput(inputValue: InputNumberValue): number | null {
+ if (inputValue == null || Number.isNaN(inputValue)) return null;
+ return Number(inputValue);
+}
+
+// ----------------------------------------------------------------------
+
+export function fNumber(inputValue: InputNumberValue, options?: Options) {
+ const locale = DEFAULT_LOCALE;
+
+ const number = processInput(inputValue);
+ if (number === null) return '';
+
+ const fm = new Intl.NumberFormat(locale.code, {
+ minimumFractionDigits: 0,
+ maximumFractionDigits: 2,
+ ...options,
+ }).format(number);
+
+ return fm;
+}
+
+// ----------------------------------------------------------------------
+
+export function fCurrency(inputValue: InputNumberValue, options?: Options) {
+ const locale = DEFAULT_LOCALE;
+
+ const number = processInput(inputValue);
+ if (number === null) return '';
+
+ const fm = new Intl.NumberFormat(locale.code, {
+ style: 'currency',
+ currency: locale.currency,
+ minimumFractionDigits: 0,
+ maximumFractionDigits: 2,
+ ...options,
+ }).format(number);
+
+ return fm;
+}
+
+// ----------------------------------------------------------------------
+
+export function fPercent(inputValue: InputNumberValue, options?: Options) {
+ const locale = DEFAULT_LOCALE;
+
+ const number = processInput(inputValue);
+ if (number === null) return '';
+
+ const fm = new Intl.NumberFormat(locale.code, {
+ style: 'percent',
+ minimumFractionDigits: 0,
+ maximumFractionDigits: 1,
+ ...options,
+ }).format(number / 100);
+
+ return fm;
+}
+
+// ----------------------------------------------------------------------
+
+export function fShortenNumber(inputValue: InputNumberValue, options?: Options) {
+ const locale = DEFAULT_LOCALE;
+
+ const number = processInput(inputValue);
+ if (number === null) return '';
+
+ const fm = new Intl.NumberFormat(locale.code, {
+ notation: 'compact',
+ maximumFractionDigits: 2,
+ ...options,
+ }).format(number);
+
+ return fm.replace(/[A-Z]/g, (match) => match.toLowerCase());
+}
diff --git a/src/utils/format-time.ts b/src/utils/format-time.ts
new file mode 100644
index 0000000..71f1bc0
--- /dev/null
+++ b/src/utils/format-time.ts
@@ -0,0 +1,92 @@
+import type { Dayjs } from 'dayjs';
+
+import dayjs from 'dayjs';
+import duration from 'dayjs/plugin/duration';
+import relativeTime from 'dayjs/plugin/relativeTime';
+
+// ----------------------------------------------------------------------
+
+/**
+ * @Docs
+ * https://day.js.org/docs/en/display/format
+ */
+
+/**
+ * Default timezones
+ * https://day.js.org/docs/en/timezone/set-default-timezone#docsNav
+ *
+ */
+
+/**
+ * UTC
+ * https://day.js.org/docs/en/plugin/utc
+ * @install
+ * import utc from 'dayjs/plugin/utc';
+ * dayjs.extend(utc);
+ * @usage
+ * dayjs().utc().format()
+ *
+ */
+
+dayjs.extend(duration);
+dayjs.extend(relativeTime);
+
+// ----------------------------------------------------------------------
+
+export type DatePickerFormat = Dayjs | Date | string | number | null | undefined;
+
+export const formatPatterns = {
+ dateTime: 'DD MMM YYYY h:mm a', // 17 Apr 2022 12:00 am
+ date: 'DD MMM YYYY', // 17 Apr 2022
+ time: 'h:mm a', // 12:00 am
+ split: {
+ dateTime: 'DD/MM/YYYY h:mm a', // 17/04/2022 12:00 am
+ date: 'DD/MM/YYYY', // 17/04/2022
+ },
+ paramCase: {
+ dateTime: 'DD-MM-YYYY h:mm a', // 17-04-2022 12:00 am
+ date: 'DD-MM-YYYY', // 17-04-2022
+ },
+};
+
+const isValidDate = (date: DatePickerFormat) =>
+ date !== null && date !== undefined && dayjs(date).isValid();
+
+// ----------------------------------------------------------------------
+
+/**
+ * @output 17 Apr 2022 12:00 am
+ */
+export function fDateTime(date: DatePickerFormat, template?: string): string {
+ if (!isValidDate(date)) {
+ return 'Invalid date';
+ }
+
+ return dayjs(date).format(template ?? formatPatterns.dateTime);
+}
+
+// ----------------------------------------------------------------------
+
+/**
+ * @output 17 Apr 2022
+ */
+export function fDate(date: DatePickerFormat, template?: string): string {
+ if (!isValidDate(date)) {
+ return 'Invalid date';
+ }
+
+ return dayjs(date).format(template ?? formatPatterns.date);
+}
+
+// ----------------------------------------------------------------------
+
+/**
+ * @output a few seconds, 2 years
+ */
+export function fToNow(date: DatePickerFormat): string {
+ if (!isValidDate(date)) {
+ return 'Invalid date';
+ }
+
+ return dayjs(date).toNow(true);
+}
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..019f239
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "compilerOptions": {
+ /* Bundler */
+ "baseUrl": ".",
+ "module": "ESNext",
+ "jsx": "react-jsx",
+ "allowJs": true,
+ "resolveJsonModule": true,
+
+ /* Build */
+ "target": "ES2020",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "moduleResolution": "bundler",
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "incremental": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "isolatedModules": true,
+
+ /* Linting */
+ "strict": true,
+ "noEmit": true,
+ "strictNullChecks": true
+ },
+ "include": ["src"],
+ "exclude": ["node_modules"],
+ "references": [
+ {
+ "path": "./tsconfig.node.json"
+ }
+ ]
+}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000..a535f7d
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..37026a7
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,36 @@
+import path from 'path';
+import checker from 'vite-plugin-checker';
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react-swc';
+
+// ----------------------------------------------------------------------
+
+const PORT = 3039;
+
+export default defineConfig({
+ plugins: [
+ react(),
+ checker({
+ typescript: true,
+ eslint: {
+ useFlatConfig: true,
+ lintCommand: 'eslint "./src/**/*.{js,jsx,ts,tsx}"',
+ dev: { logLevel: ['error'] },
+ },
+ overlay: {
+ position: 'tl',
+ initialIsOpen: false,
+ },
+ }),
+ ],
+ resolve: {
+ alias: [
+ {
+ find: /^src(.+)/,
+ replacement: path.resolve(process.cwd(), 'src/$1'),
+ },
+ ],
+ },
+ server: { port: PORT, host: true },
+ preview: { port: PORT, host: true },
+});
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..fb0de90
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,2969 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2":
+ version "7.26.2"
+ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz"
+ integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.25.9"
+ js-tokens "^4.0.0"
+ picocolors "^1.0.0"
+
+"@babel/generator@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz"
+ integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==
+ dependencies:
+ "@babel/parser" "^7.27.0"
+ "@babel/types" "^7.27.0"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jsesc "^3.0.2"
+
+"@babel/helper-module-imports@^7.16.7":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz"
+ integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
+"@babel/helper-string-parser@^7.25.9":
+ 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==
+
+"@babel/helper-validator-identifier@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz"
+ integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
+
+"@babel/parser@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz"
+ integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==
+ dependencies:
+ "@babel/types" "^7.27.0"
+
+"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.26.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
+ version "7.27.0"
+ resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz"
+ integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@babel/template@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz"
+ integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ "@babel/parser" "^7.27.0"
+ "@babel/types" "^7.27.0"
+
+"@babel/traverse@^7.25.9":
+ version "7.27.0"
+ resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz"
+ integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==
+ 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/types@^7.25.9", "@babel/types@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz"
+ integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
+
+"@emotion/babel-plugin@^11.13.5":
+ 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==
+ 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"
+
+"@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0":
+ 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==
+ 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"
+
+"@emotion/hash@^0.9.2":
+ version "0.9.2"
+ resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz"
+ integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==
+
+"@emotion/is-prop-valid@^1.3.0":
+ 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==
+ dependencies:
+ "@emotion/memoize" "^0.9.0"
+
+"@emotion/memoize@^0.9.0":
+ version "0.9.0"
+ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz"
+ integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==
+
+"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.14.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0":
+ version "11.14.0"
+ resolved "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz"
+ integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==
+ 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"
+
+"@emotion/serialize@^1.3.3":
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz"
+ integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==
+ 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"
+
+"@emotion/sheet@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz"
+ integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==
+
+"@emotion/styled@^11.14.0", "@emotion/styled@^11.3.0":
+ version "11.14.0"
+ resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz"
+ integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==
+ 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"
+
+"@emotion/unitless@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz"
+ integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==
+
+"@emotion/use-insertion-effect-with-fallbacks@^1.2.0":
+ 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==
+
+"@emotion/utils@^1.4.2":
+ version "1.4.2"
+ resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz"
+ integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==
+
+"@emotion/weak-memoize@^0.4.0":
+ 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==
+
+"@esbuild/win32-x64@0.25.2":
+ version "0.25.2"
+ resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz"
+ integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==
+
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.5.1"
+ resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz"
+ integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
+"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz"
+ integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
+
+"@eslint/config-array@^0.19.2":
+ version "0.19.2"
+ resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz"
+ integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==
+ dependencies:
+ "@eslint/object-schema" "^2.1.6"
+ debug "^4.3.1"
+ minimatch "^3.1.2"
+
+"@eslint/config-helpers@^0.2.0":
+ version "0.2.1"
+ resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz"
+ integrity sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==
+
+"@eslint/core@^0.12.0":
+ version "0.12.0"
+ resolved "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz"
+ integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==
+ dependencies:
+ "@types/json-schema" "^7.0.15"
+
+"@eslint/core@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz"
+ integrity sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==
+ dependencies:
+ "@types/json-schema" "^7.0.15"
+
+"@eslint/eslintrc@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz"
+ integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==
+ 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"
+
+"@eslint/js@^9.23.0", "@eslint/js@9.23.0":
+ version "9.23.0"
+ resolved "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz"
+ integrity sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==
+
+"@eslint/object-schema@^2.1.6":
+ version "2.1.6"
+ resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz"
+ integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==
+
+"@eslint/plugin-kit@^0.2.7":
+ version "0.2.8"
+ resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz"
+ integrity sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==
+ dependencies:
+ "@eslint/core" "^0.13.0"
+ levn "^0.4.1"
+
+"@fontsource-variable/dm-sans@^5.2.5":
+ version "5.2.5"
+ resolved "https://registry.npmjs.org/@fontsource-variable/dm-sans/-/dm-sans-5.2.5.tgz"
+ integrity sha512-ynWdb1Ncn5ywUOE6OkTsvgjkiZKj+xM/GS2iVE47MBvS3AlfOSyOy3xynfkQsM3ngaxdCamT/06hZGAgPmao0A==
+
+"@fontsource/barlow@^5.2.5":
+ version "5.2.5"
+ resolved "https://registry.npmjs.org/@fontsource/barlow/-/barlow-5.2.5.tgz"
+ integrity sha512-p+2XXEM7v85kbn0Dh8g0YLMjTCDiRCAi9nHik6w/2owZ9CkT1yYGGgaUMshJRqykh7efv1gE0QxAkOhZHd8tEg==
+
+"@humanfs/core@^0.19.1":
+ version "0.19.1"
+ resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz"
+ integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==
+
+"@humanfs/node@^0.16.6":
+ version "0.16.6"
+ resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz"
+ integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==
+ dependencies:
+ "@humanfs/core" "^0.19.1"
+ "@humanwhocodes/retry" "^0.3.0"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/retry@^0.3.0":
+ version "0.3.1"
+ resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz"
+ integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==
+
+"@humanwhocodes/retry@^0.4.2":
+ version "0.4.2"
+ resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz"
+ integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==
+
+"@iconify/react@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.npmjs.org/@iconify/react/-/react-5.2.1.tgz"
+ integrity sha512-37GDR3fYDZmnmUn9RagyaX+zca24jfVOMY8E1IXTqJuE8pxNtN51KWPQe3VODOWvuUurq7q9uUu3CFrpqj5Iqg==
+ dependencies:
+ "@iconify/types" "^2.0.0"
+
+"@iconify/types@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz"
+ integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
+
+"@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.8"
+ resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz"
+ integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.5.0"
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz"
+ integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+ version "0.3.25"
+ resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@mui/core-downloads-tracker@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.1.tgz"
+ integrity sha512-T5DNVnSD9pMbj4Jk/Uphz+yvj9dfpl2+EqsOuJtG12HxEihNG5pd3qzX5yM1Id4dDwKRvM3dPVcxyzavTFhJeA==
+
+"@mui/lab@^7.0.0-beta.10":
+ 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==
+ dependencies:
+ "@babel/runtime" "^7.26.10"
+ "@mui/system" "^7.0.1"
+ "@mui/types" "^7.4.0"
+ "@mui/utils" "^7.0.1"
+ clsx "^2.1.1"
+ prop-types "^15.8.1"
+
+"@mui/material@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/@mui/material/-/material-7.0.1.tgz"
+ integrity sha512-tQwjIIsn/UUSCHoCIQVkANuLua67h7Ro9M9gIHoGWaFbJFuF6cSO4Oda2olDVqIs4SWG+PaDChuu6SngxsaoyQ==
+ dependencies:
+ "@babel/runtime" "^7.26.10"
+ "@mui/core-downloads-tracker" "^7.0.1"
+ "@mui/system" "^7.0.1"
+ "@mui/types" "^7.4.0"
+ "@mui/utils" "^7.0.1"
+ "@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.0.0"
+ react-transition-group "^4.4.5"
+
+"@mui/private-theming@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.1.tgz"
+ integrity sha512-1kQ7REYjjzDukuMfTbAjm3pLEhD7gUMC2bWhg9VD6f6sHzyokKzX0XHzlr3IdzNWBjPytGkzHpPIRQrUOoPLCQ==
+ dependencies:
+ "@babel/runtime" "^7.26.10"
+ "@mui/utils" "^7.0.1"
+ prop-types "^15.8.1"
+
+"@mui/styled-engine@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.1.tgz"
+ integrity sha512-BeGe4xZmF7tESKhmctYrL54Kl25kGHPKVdZYM5qj5Xz76WM/poY+d8EmAqUesT6k2rbJWPp2gtOAXXinNCGunQ==
+ dependencies:
+ "@babel/runtime" "^7.26.10"
+ "@emotion/cache" "^11.13.5"
+ "@emotion/serialize" "^1.3.3"
+ "@emotion/sheet" "^1.4.0"
+ csstype "^3.1.3"
+ prop-types "^15.8.1"
+
+"@mui/system@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/@mui/system/-/system-7.0.1.tgz"
+ integrity sha512-pK+puz0hRPHEKGlcPd80mKYD3jpyi0uVIwWffox1WZgPTQMw2dCKLcD+9ndMDJADnrKzmKlpoH756PPFh2UvWA==
+ dependencies:
+ "@babel/runtime" "^7.26.10"
+ "@mui/private-theming" "^7.0.1"
+ "@mui/styled-engine" "^7.0.1"
+ "@mui/types" "^7.4.0"
+ "@mui/utils" "^7.0.1"
+ clsx "^2.1.1"
+ csstype "^3.1.3"
+ prop-types "^15.8.1"
+
+"@mui/types@^7.4.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@mui/types/-/types-7.4.0.tgz"
+ integrity sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ==
+ dependencies:
+ "@babel/runtime" "^7.26.10"
+
+"@mui/utils@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/@mui/utils/-/utils-7.0.1.tgz"
+ integrity sha512-SJKrrebNpmK9rJCnVL29nGPhPXQYtBZmb7Dsp0f58uIUhQfAKcBXHE4Kjs06SX4CwqeCuwEVgcHY+MgAO6XQ/g==
+ dependencies:
+ "@babel/runtime" "^7.26.10"
+ "@mui/types" "^7.4.0"
+ "@types/prop-types" "^15.7.14"
+ clsx "^2.1.1"
+ prop-types "^15.8.1"
+ react-is "^19.0.0"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@popperjs/core@^2.11.8":
+ version "2.11.8"
+ resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz"
+ integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
+
+"@rollup/rollup-win32-x64-msvc@4.39.0":
+ version "4.39.0"
+ resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz"
+ integrity sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==
+
+"@rtsao/scc@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz"
+ integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==
+
+"@svgdotjs/svg.draggable.js@^3.0.4":
+ version "3.0.6"
+ resolved "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz"
+ integrity sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==
+
+"@svgdotjs/svg.filter.js@^3.0.8":
+ version "3.0.9"
+ resolved "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz"
+ integrity sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==
+ dependencies:
+ "@svgdotjs/svg.js" "^3.2.4"
+
+"@svgdotjs/svg.js@^3.2.4":
+ version "3.2.4"
+ resolved "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz"
+ integrity sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==
+
+"@svgdotjs/svg.resize.js@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz"
+ integrity sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==
+
+"@svgdotjs/svg.select.js@^4.0.1":
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz"
+ integrity sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g==
+
+"@swc/core-win32-x64-msvc@1.11.16":
+ version "1.11.16"
+ resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.16.tgz"
+ integrity sha512-/ibq/YDc3B5AROkpOKPGxVkSyCKOg+ml8k11RxrW7FAPy6a9y5y9KPcWIqV74Ahq4RuaMNslTQqHWAGSm0xJsQ==
+
+"@swc/core@^1.11.11":
+ version "1.11.16"
+ resolved "https://registry.npmjs.org/@swc/core/-/core-1.11.16.tgz"
+ integrity sha512-wgjrJqVUss8Lxqilg0vkiE0tkEKU3mZkoybQM1Ehy+PKWwwB6lFAwKi20cAEFlSSWo8jFR8hRo19ZELAoLDowg==
+ dependencies:
+ "@swc/counter" "^0.1.3"
+ "@swc/types" "^0.1.21"
+ optionalDependencies:
+ "@swc/core-darwin-arm64" "1.11.16"
+ "@swc/core-darwin-x64" "1.11.16"
+ "@swc/core-linux-arm-gnueabihf" "1.11.16"
+ "@swc/core-linux-arm64-gnu" "1.11.16"
+ "@swc/core-linux-arm64-musl" "1.11.16"
+ "@swc/core-linux-x64-gnu" "1.11.16"
+ "@swc/core-linux-x64-musl" "1.11.16"
+ "@swc/core-win32-arm64-msvc" "1.11.16"
+ "@swc/core-win32-ia32-msvc" "1.11.16"
+ "@swc/core-win32-x64-msvc" "1.11.16"
+
+"@swc/counter@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"
+ integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
+
+"@swc/types@^0.1.21":
+ version "0.1.21"
+ resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.21.tgz"
+ integrity sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==
+ dependencies:
+ "@swc/counter" "^0.1.3"
+
+"@types/cookie@^0.6.0":
+ version "0.6.0"
+ resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz"
+ integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==
+
+"@types/estree@^1.0.6", "@types/estree@1.0.7":
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz"
+ integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==
+
+"@types/json-schema@^7.0.15":
+ version "7.0.15"
+ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+
+"@types/node@^18.0.0 || ^20.0.0 || >=22.0.0", "@types/node@^22.14.0":
+ version "22.14.0"
+ resolved "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz"
+ integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==
+ dependencies:
+ undici-types "~6.21.0"
+
+"@types/parse-json@^4.0.0":
+ 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==
+
+"@types/prop-types@^15.7.14":
+ version "15.7.14"
+ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz"
+ integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
+
+"@types/react-dom@^19.1.1":
+ version "19.1.1"
+ resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.1.tgz"
+ integrity sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==
+
+"@types/react-transition-group@^4.4.12":
+ 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==
+
+"@types/react@*", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^19.0.0", "@types/react@^19.1.0":
+ version "19.1.0"
+ resolved "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz"
+ integrity sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==
+ dependencies:
+ csstype "^3.0.2"
+
+"@typescript-eslint/eslint-plugin@^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "@typescript-eslint/eslint-plugin@8.29.0":
+ 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==
+ 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"
+ graphemer "^1.4.0"
+ ignore "^5.3.1"
+ natural-compare "^1.4.0"
+ ts-api-utils "^2.0.1"
+
+"@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0", "@typescript-eslint/parser@^8.29.0", "@typescript-eslint/parser@8.29.0":
+ version "8.29.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz"
+ integrity sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==
+ 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"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@8.29.0":
+ 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==
+ dependencies:
+ "@typescript-eslint/types" "8.29.0"
+ "@typescript-eslint/visitor-keys" "8.29.0"
+
+"@typescript-eslint/type-utils@8.29.0":
+ 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==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "8.29.0"
+ "@typescript-eslint/utils" "8.29.0"
+ debug "^4.3.4"
+ ts-api-utils "^2.0.1"
+
+"@typescript-eslint/types@^8.29.0", "@typescript-eslint/types@8.29.0":
+ 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==
+
+"@typescript-eslint/typescript-estree@8.29.0":
+ 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==
+ dependencies:
+ "@typescript-eslint/types" "8.29.0"
+ "@typescript-eslint/visitor-keys" "8.29.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"
+
+"@typescript-eslint/utils@^8.29.0", "@typescript-eslint/utils@8.29.0":
+ version "8.29.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz"
+ integrity sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==
+ 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"
+
+"@typescript-eslint/visitor-keys@8.29.0":
+ version "8.29.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz"
+ integrity sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==
+ dependencies:
+ "@typescript-eslint/types" "8.29.0"
+ eslint-visitor-keys "^4.2.0"
+
+"@unrs/resolver-binding-win32-x64-msvc@1.3.3":
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.3.3.tgz"
+ integrity sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==
+
+"@vitejs/plugin-react-swc@^3.8.1":
+ version "3.8.1"
+ resolved "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.1.tgz"
+ integrity sha512-aEUPCckHDcFyxpwFm0AIkbtv6PpUp3xTb9wYGFjtABynXjCYKkWoxX0AOK9NT9XCrdk6mBBUOeHQS+RKdcNO1A==
+ dependencies:
+ "@swc/core" "^1.11.11"
+
+"@yr/monotone-cubic-spline@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz"
+ integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.14.0:
+ version "8.14.1"
+ resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz"
+ integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ 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"
+
+ansi-regex@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz"
+ integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
+
+ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+apexcharts@^4.5.0, apexcharts@>=4.0.0:
+ version "4.5.0"
+ resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-4.5.0.tgz"
+ integrity sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ==
+ dependencies:
+ "@svgdotjs/svg.draggable.js" "^3.0.4"
+ "@svgdotjs/svg.filter.js" "^3.0.8"
+ "@svgdotjs/svg.js" "^3.2.4"
+ "@svgdotjs/svg.resize.js" "^2.0.2"
+ "@svgdotjs/svg.select.js" "^4.0.1"
+ "@yr/monotone-cubic-spline" "^1.0.3"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2:
+ 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==
+ dependencies:
+ call-bound "^1.0.3"
+ is-array-buffer "^3.0.5"
+
+array-includes@^3.1.6, array-includes@^3.1.8:
+ version "3.1.8"
+ resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz"
+ integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.4"
+ is-string "^1.0.7"
+
+array.prototype.findlast@^1.2.5:
+ 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==
+ 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"
+
+array.prototype.findlastindex@^1.2.5:
+ version "1.2.6"
+ resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz"
+ integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.9"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.1.1"
+ es-shim-unscopables "^1.1.0"
+
+array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz"
+ integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz"
+ integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.5"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.tosorted@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz"
+ integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==
+ 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"
+
+arraybuffer.prototype.slice@^1.0.4:
+ 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==
+ 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"
+
+async-function@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz"
+ integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==
+
+available-typed-arrays@^1.0.7:
+ 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==
+ dependencies:
+ possible-typed-array-names "^1.0.0"
+
+babel-plugin-macros@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz"
+ integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ cosmiconfig "^7.0.0"
+ resolve "^1.19.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+ dependencies:
+ fill-range "^7.1.1"
+
+call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+ 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==
+ dependencies:
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+
+call-bind@^1.0.7, call-bind@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz"
+ integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
+ 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"
+
+call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz"
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
+ dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ get-intrinsic "^1.3.0"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+chalk@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chokidar@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz"
+ integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
+ dependencies:
+ readdirp "^4.0.1"
+
+clsx@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz"
+ integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+convert-source-map@^1.5.0:
+ 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==
+
+cookie@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz"
+ integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==
+
+cosmiconfig@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz"
+ integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+cross-spawn@^7.0.6:
+ version "7.0.6"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+csstype@^3.0.2, csstype@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+data-view-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz"
+ integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.2"
+
+data-view-byte-length@^1.0.2:
+ 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==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.2"
+
+data-view-byte-offset@^1.0.1:
+ 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==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+dayjs@^1.11.13:
+ version "1.11.13"
+ resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz"
+ integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
+
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz"
+ integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
+ dependencies:
+ ms "^2.1.3"
+
+deep-is@^0.1.3:
+ 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==
+
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+ 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==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.0.1"
+
+define-properties@^1.1.3, define-properties@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+ dependencies:
+ define-data-property "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-helpers@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
+dunder-proto@^1.0.0, dunder-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz"
+ integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+ dependencies:
+ call-bind-apply-helpers "^1.0.1"
+ es-errors "^1.3.0"
+ gopd "^1.2.0"
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9:
+ version "1.23.9"
+ resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz"
+ integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==
+ 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.3"
+ 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-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-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-regex "^1.2.1"
+ is-shared-array-buffer "^1.0.4"
+ is-string "^1.1.1"
+ is-typed-array "^1.1.15"
+ is-weakref "^1.1.0"
+ math-intrinsics "^1.1.0"
+ object-inspect "^1.13.3"
+ object-keys "^1.1.1"
+ object.assign "^4.1.7"
+ own-keys "^1.0.1"
+ regexp.prototype.flags "^1.5.3"
+ safe-array-concat "^1.1.3"
+ safe-push-apply "^1.0.0"
+ safe-regex-test "^1.1.0"
+ set-proto "^1.0.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.18"
+
+es-define-property@^1.0.0, es-define-property@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz"
+ integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-iterator-helpers@^1.2.1:
+ 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==
+ 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"
+
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+ 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==
+ dependencies:
+ es-errors "^1.3.0"
+
+es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0:
+ 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==
+ dependencies:
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
+es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz"
+ integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==
+ dependencies:
+ hasown "^2.0.2"
+
+es-to-primitive@^1.3.0:
+ 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==
+ dependencies:
+ is-callable "^1.2.7"
+ is-date-object "^1.0.5"
+ is-symbol "^1.0.4"
+
+es-toolkit@^1.32.0, es-toolkit@^1.34.1:
+ version "1.34.1"
+ resolved "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.34.1.tgz"
+ integrity sha512-OA6cd94fJV9bm8dWhIySkWq4xV+rAQnBZUr2dnpXam0QJ8c+hurLbKA8/QooL9Mx4WCAxvIDsiEkid5KPQ5xgQ==
+
+esbuild@^0.25.0:
+ version "0.25.2"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz"
+ integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.25.2"
+ "@esbuild/android-arm" "0.25.2"
+ "@esbuild/android-arm64" "0.25.2"
+ "@esbuild/android-x64" "0.25.2"
+ "@esbuild/darwin-arm64" "0.25.2"
+ "@esbuild/darwin-x64" "0.25.2"
+ "@esbuild/freebsd-arm64" "0.25.2"
+ "@esbuild/freebsd-x64" "0.25.2"
+ "@esbuild/linux-arm" "0.25.2"
+ "@esbuild/linux-arm64" "0.25.2"
+ "@esbuild/linux-ia32" "0.25.2"
+ "@esbuild/linux-loong64" "0.25.2"
+ "@esbuild/linux-mips64el" "0.25.2"
+ "@esbuild/linux-ppc64" "0.25.2"
+ "@esbuild/linux-riscv64" "0.25.2"
+ "@esbuild/linux-s390x" "0.25.2"
+ "@esbuild/linux-x64" "0.25.2"
+ "@esbuild/netbsd-arm64" "0.25.2"
+ "@esbuild/netbsd-x64" "0.25.2"
+ "@esbuild/openbsd-arm64" "0.25.2"
+ "@esbuild/openbsd-x64" "0.25.2"
+ "@esbuild/sunos-x64" "0.25.2"
+ "@esbuild/win32-arm64" "0.25.2"
+ "@esbuild/win32-ia32" "0.25.2"
+ "@esbuild/win32-x64" "0.25.2"
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-import-resolver-node@^0.3.9:
+ version "0.3.9"
+ resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz"
+ integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==
+ dependencies:
+ debug "^3.2.7"
+ is-core-module "^2.13.0"
+ resolve "^1.22.4"
+
+eslint-import-resolver-typescript@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.1.tgz"
+ integrity sha512-/dR9YMomeBlvfuvX5q0C3Y/2PHC9OCRdT2ijFwdfq/4Bq+4m5/lqstEp9k3P6ocha1pCbhoY9fkwVYLmOqR0VQ==
+ dependencies:
+ debug "^4.4.0"
+ get-tsconfig "^4.10.0"
+ is-bun-module "^2.0.0"
+ stable-hash "^0.0.5"
+ tinyglobby "^0.2.12"
+ unrs-resolver "^1.3.3"
+
+eslint-module-utils@^2.12.0:
+ 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==
+ dependencies:
+ debug "^3.2.7"
+
+eslint-plugin-import@*, eslint-plugin-import@^2.31.0:
+ 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==
+ 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"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.9"
+ eslint-module-utils "^2.12.0"
+ hasown "^2.0.2"
+ is-core-module "^2.15.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"
+ semver "^6.3.1"
+ string.prototype.trimend "^1.0.8"
+ tsconfig-paths "^3.15.0"
+
+eslint-plugin-perfectionist@^4.11.0:
+ version "4.11.0"
+ resolved "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.11.0.tgz"
+ integrity sha512-5s+ehXydnLPQpLDj5mJ0CnYj2fQe6v6gKA3tS+FZVBLzwMOh8skH+l+1Gni08rG0SdEcNhJyjQp/mEkDYK8czw==
+ dependencies:
+ "@typescript-eslint/types" "^8.29.0"
+ "@typescript-eslint/utils" "^8.29.0"
+ natural-orderby "^5.0.0"
+
+eslint-plugin-react-hooks@^5.2.0:
+ 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==
+
+eslint-plugin-react@^7.37.4:
+ version "7.37.4"
+ resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz"
+ integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==
+ 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.8"
+ 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"
+
+eslint-plugin-unused-imports@^4.1.4:
+ version "4.1.4"
+ resolved "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz"
+ integrity sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==
+
+eslint-scope@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz"
+ integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.4.3:
+ 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==
+
+eslint-visitor-keys@^4.2.0:
+ 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==
+
+eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.57.0 || ^9.0.0", "eslint@^9.0.0 || ^8.0.0", eslint@^9.23.0, eslint@>=7, eslint@>=8.45.0:
+ version "9.23.0"
+ resolved "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz"
+ integrity sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.12.1"
+ "@eslint/config-array" "^0.19.2"
+ "@eslint/config-helpers" "^0.2.0"
+ "@eslint/core" "^0.12.0"
+ "@eslint/eslintrc" "^3.3.1"
+ "@eslint/js" "9.23.0"
+ "@eslint/plugin-kit" "^0.2.7"
+ "@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.3.0"
+ eslint-visitor-keys "^4.2.0"
+ espree "^10.3.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"
+
+espree@^10.0.1, espree@^10.3.0:
+ version "10.3.0"
+ resolved "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz"
+ integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==
+ dependencies:
+ acorn "^8.14.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^4.2.0"
+
+esquery@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz"
+ integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ 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==
+
+fast-glob@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz"
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+ 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"
+
+fast-json-stable-stringify@^2.0.0:
+ 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==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.19.1"
+ resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz"
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
+ dependencies:
+ reusify "^1.0.4"
+
+fdir@^6.4.3:
+ version "6.4.3"
+ resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz"
+ integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==
+
+file-entry-cache@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz"
+ integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
+ dependencies:
+ flat-cache "^4.0.0"
+
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-root@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz"
+ integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.4"
+
+flatted@^3.2.9:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz"
+ integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
+
+for-each@^0.3.3, for-each@^0.3.5:
+ version "0.3.5"
+ resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz"
+ integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==
+ dependencies:
+ is-callable "^1.2.7"
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+function.prototype.name@^1.1.6, function.prototype.name@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz"
+ integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==
+ 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"
+
+functions-have-names@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz"
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+ 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"
+
+get-proto@^1.0.0, get-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz"
+ integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-object-atoms "^1.0.0"
+
+get-symbol-description@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz"
+ integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+
+get-tsconfig@^4.10.0:
+ version "4.10.0"
+ resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz"
+ integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
+
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz"
+ integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
+
+globals@^16.0.0:
+ version "16.0.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz"
+ integrity sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==
+
+globalthis@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz"
+ integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
+ dependencies:
+ define-properties "^1.2.1"
+ gopd "^1.0.1"
+
+gopd@^1.0.1, gopd@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz"
+ integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-bigints@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz"
+ integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+ dependencies:
+ es-define-property "^1.0.0"
+
+has-proto@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz"
+ integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==
+ dependencies:
+ dunder-proto "^1.0.0"
+
+has-symbols@^1.0.3, has-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz"
+ integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
+has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+ dependencies:
+ has-symbols "^1.0.3"
+
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+hoist-non-react-statics@^3.3.1:
+ version "3.3.2"
+ resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+ignore@^5.2.0, ignore@^5.3.1:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
+ integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+
+import-fresh@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+internal-slot@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz"
+ integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==
+ dependencies:
+ es-errors "^1.3.0"
+ hasown "^2.0.2"
+ side-channel "^1.1.0"
+
+is-array-buffer@^3.0.4, is-array-buffer@^3.0.5:
+ 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==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ get-intrinsic "^1.2.6"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-async-function@^2.0.0:
+ 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==
+ 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"
+
+is-bigint@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz"
+ integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==
+ dependencies:
+ has-bigints "^1.0.2"
+
+is-boolean-object@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz"
+ integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-bun-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz"
+ integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==
+ dependencies:
+ semver "^7.7.1"
+
+is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0:
+ version "2.16.1"
+ resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
+ dependencies:
+ hasown "^2.0.2"
+
+is-data-view@^1.0.1, is-data-view@^1.0.2:
+ 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==
+ dependencies:
+ call-bound "^1.0.2"
+ get-intrinsic "^1.2.6"
+ is-typed-array "^1.1.13"
+
+is-date-object@^1.0.5, is-date-object@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz"
+ integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==
+ dependencies:
+ call-bound "^1.0.2"
+ has-tostringtag "^1.0.2"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-finalizationregistry@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz"
+ integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-generator-function@^1.0.10:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz"
+ integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==
+ dependencies:
+ call-bound "^1.0.3"
+ get-proto "^1.0.0"
+ has-tostringtag "^1.0.2"
+ safe-regex-test "^1.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-map@^2.0.3:
+ 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==
+
+is-number-object@^1.1.1:
+ 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==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-regex@^1.2.1:
+ 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==
+ dependencies:
+ call-bound "^1.0.2"
+ gopd "^1.2.0"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
+is-set@^2.0.3:
+ 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==
+
+is-shared-array-buffer@^1.0.4:
+ 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==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-string@^1.0.7, is-string@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz"
+ integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==
+ dependencies:
+ call-bound "^1.0.3"
+ has-tostringtag "^1.0.2"
+
+is-symbol@^1.0.4, is-symbol@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz"
+ integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==
+ dependencies:
+ call-bound "^1.0.2"
+ has-symbols "^1.1.0"
+ safe-regex-test "^1.1.0"
+
+is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15:
+ version "1.1.15"
+ resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz"
+ integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==
+ dependencies:
+ which-typed-array "^1.1.16"
+
+is-weakmap@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz"
+ integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
+
+is-weakref@^1.0.2, is-weakref@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz"
+ integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==
+ dependencies:
+ call-bound "^1.0.3"
+
+is-weakset@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz"
+ integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==
+ dependencies:
+ call-bound "^1.0.3"
+ get-intrinsic "^1.2.6"
+
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+iterator.prototype@^1.1.4:
+ version "1.1.5"
+ resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz"
+ integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==
+ 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"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsesc@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz"
+ integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-even-better-errors@^2.3.0:
+ 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==
+
+json-schema-traverse@^0.4.1:
+ 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==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ 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==
+
+json5@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0":
+ version "3.3.5"
+ resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz"
+ integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ object.assign "^4.1.4"
+ object.values "^1.1.6"
+
+keyv@^4.5.4:
+ version "4.5.4"
+ resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+math-intrinsics@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz"
+ integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
+ dependencies:
+ braces "^3.0.3"
+ picomatch "^2.3.1"
+
+minimal-shared@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/minimal-shared/-/minimal-shared-1.0.7.tgz"
+ integrity sha512-KP+8dQw43lTkE1vCqjV4dakapCP5sk5trFAo8d2kpJYBZQc3DrGoE1Q9uwKe0hDtbgSwE4zmVYdgmsatF9/JZw==
+ dependencies:
+ es-toolkit "^1.32.0"
+
+minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^9.0.4:
+ version "9.0.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimist@^1.2.0, minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+ms@^2.1.1, ms@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+nanoid@^3.3.8:
+ version "3.3.11"
+ resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+natural-orderby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz"
+ integrity sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==
+
+npm-run-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz"
+ integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==
+ dependencies:
+ path-key "^4.0.0"
+ unicorn-magic "^0.3.0"
+
+object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-inspect@^1.13.3:
+ version "1.13.4"
+ resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz"
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.4, object.assign@^4.1.7:
+ version "4.1.7"
+ resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz"
+ integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==
+ 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"
+
+object.entries@^1.1.8:
+ version "1.1.9"
+ resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz"
+ integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.4"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.1.1"
+
+object.fromentries@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz"
+ integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+
+object.groupby@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz"
+ integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+
+object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz"
+ integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.3"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+optionator@^0.9.3, optionator@^0.9.4:
+ version "0.9.4"
+ resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
+ 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"
+
+own-keys@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz"
+ integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==
+ dependencies:
+ get-intrinsic "^1.2.6"
+ object-keys "^1.1.1"
+ safe-push-apply "^1.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+ 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==
+ dependencies:
+ p-limit "^3.0.2"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-key@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz"
+ integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.0.0, picocolors@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
+picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+"picomatch@^3 || ^4", picomatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz"
+ integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
+
+possible-typed-array-names@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz"
+ integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==
+
+postcss@^8.5.3:
+ version "8.5.3"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz"
+ integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==
+ dependencies:
+ nanoid "^3.3.8"
+ picocolors "^1.1.1"
+ source-map-js "^1.2.1"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prettier@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz"
+ integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==
+
+prop-types@^15.6.2, prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+react-apexcharts@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.7.0.tgz"
+ integrity sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA==
+ dependencies:
+ prop-types "^15.8.1"
+
+"react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", react-dom@^19.1.0, react-dom@>=16.6.0, react-dom@>=18:
+ 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==
+ dependencies:
+ scheduler "^0.26.0"
+
+react-is@^16.13.1:
+ version "16.13.1"
+ resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-is@^16.7.0:
+ version "16.13.1"
+ resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-is@^19.0.0:
+ version "19.1.0"
+ resolved "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz"
+ integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==
+
+react-router-dom@^7.4.1:
+ version "7.4.1"
+ resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.1.tgz"
+ integrity sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==
+ dependencies:
+ react-router "7.4.1"
+
+react-router@7.4.1:
+ version "7.4.1"
+ resolved "https://registry.npmjs.org/react-router/-/react-router-7.4.1.tgz"
+ integrity sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==
+ dependencies:
+ "@types/cookie" "^0.6.0"
+ cookie "^1.0.1"
+ set-cookie-parser "^2.6.0"
+ turbo-stream "2.4.0"
+
+react-transition-group@^4.4.5:
+ version "4.4.5"
+ resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz"
+ integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
+"react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18.0.0 || ^19.0.0", react@^19.1.0, react@>=0.13, react@>=16, react@>=16.6.0, react@>=16.8.0, react@>=18:
+ version "19.1.0"
+ resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz"
+ integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==
+
+readdirp@^4.0.1:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz"
+ integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
+
+reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
+ 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==
+ 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"
+
+regenerator-runtime@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
+ integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
+regexp.prototype.flags@^1.5.3:
+ 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==
+ 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"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-pkg-maps@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz"
+ integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
+resolve@^1.19.0, resolve@^1.22.4:
+ version "1.22.10"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz"
+ integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
+ dependencies:
+ is-core-module "^2.16.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.5:
+ version "2.0.0-next.5"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz"
+ integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz"
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
+
+rollup@^4.30.1:
+ version "4.39.0"
+ resolved "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz"
+ integrity sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==
+ dependencies:
+ "@types/estree" "1.0.7"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.39.0"
+ "@rollup/rollup-android-arm64" "4.39.0"
+ "@rollup/rollup-darwin-arm64" "4.39.0"
+ "@rollup/rollup-darwin-x64" "4.39.0"
+ "@rollup/rollup-freebsd-arm64" "4.39.0"
+ "@rollup/rollup-freebsd-x64" "4.39.0"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.39.0"
+ "@rollup/rollup-linux-arm-musleabihf" "4.39.0"
+ "@rollup/rollup-linux-arm64-gnu" "4.39.0"
+ "@rollup/rollup-linux-arm64-musl" "4.39.0"
+ "@rollup/rollup-linux-loongarch64-gnu" "4.39.0"
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.39.0"
+ "@rollup/rollup-linux-riscv64-gnu" "4.39.0"
+ "@rollup/rollup-linux-riscv64-musl" "4.39.0"
+ "@rollup/rollup-linux-s390x-gnu" "4.39.0"
+ "@rollup/rollup-linux-x64-gnu" "4.39.0"
+ "@rollup/rollup-linux-x64-musl" "4.39.0"
+ "@rollup/rollup-win32-arm64-msvc" "4.39.0"
+ "@rollup/rollup-win32-ia32-msvc" "4.39.0"
+ "@rollup/rollup-win32-x64-msvc" "4.39.0"
+ fsevents "~2.3.2"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-array-concat@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz"
+ integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==
+ 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"
+
+safe-push-apply@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz"
+ integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==
+ dependencies:
+ es-errors "^1.3.0"
+ isarray "^2.0.5"
+
+safe-regex-test@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz"
+ integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ is-regex "^1.2.1"
+
+scheduler@^0.26.0:
+ version "0.26.0"
+ resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz"
+ integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==
+
+semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.6.0, semver@^7.7.1:
+ version "7.7.1"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz"
+ integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
+
+set-cookie-parser@^2.6.0:
+ 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==
+
+set-function-length@^1.2.2:
+ 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==
+ 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"
+
+set-function-name@^2.0.2:
+ 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==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ functions-have-names "^1.2.3"
+ has-property-descriptors "^1.0.2"
+
+set-proto@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz"
+ integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel-list@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz"
+ integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
+ dependencies:
+ es-errors "^1.3.0"
+ object-inspect "^1.13.3"
+
+side-channel-map@^1.0.1:
+ 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==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
+
+side-channel-weakmap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz"
+ integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
+ 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"
+
+side-channel@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz"
+ integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
+ 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"
+
+simplebar-core@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.0.tgz"
+ integrity sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA==
+ dependencies:
+ lodash "^4.17.21"
+
+simplebar-react@^3.3.0:
+ 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==
+ dependencies:
+ simplebar-core "^1.3.0"
+
+source-map-js@^1.2.1:
+ 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==
+
+source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
+ integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+
+stable-hash@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz"
+ integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==
+
+string.prototype.matchall@^4.0.12:
+ 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==
+ 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"
+
+string.prototype.repeat@^1.0.0:
+ 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==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
+string.prototype.trim@^1.2.10:
+ 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==
+ 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"
+
+string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz"
+ integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==
+ dependencies:
+ call-bind "^1.0.8"
+ call-bound "^1.0.2"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+string.prototype.trimstart@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz"
+ integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+strip-ansi@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-json-comments@^3.1.1:
+ 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==
+
+stylis@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz"
+ integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ 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==
+
+tiny-invariant@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz"
+ integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
+
+tinyglobby@^0.2.12:
+ version "0.2.12"
+ resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz"
+ integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==
+ dependencies:
+ fdir "^6.4.3"
+ picomatch "^4.0.2"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+ts-api-utils@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz"
+ integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
+
+tsconfig-paths@^3.15.0:
+ version "3.15.0"
+ resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz"
+ integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
+turbo-stream@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz"
+ integrity sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+typed-array-buffer@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz"
+ integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==
+ dependencies:
+ call-bound "^1.0.3"
+ es-errors "^1.3.0"
+ is-typed-array "^1.1.14"
+
+typed-array-byte-length@^1.0.3:
+ 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==
+ 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"
+
+typed-array-byte-offset@^1.0.4:
+ 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==
+ 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"
+
+typed-array-length@^1.0.7:
+ 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==
+ 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"
+
+typescript-eslint@^8.29.0:
+ version "8.29.0"
+ resolved "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz"
+ integrity sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==
+ dependencies:
+ "@typescript-eslint/eslint-plugin" "8.29.0"
+ "@typescript-eslint/parser" "8.29.0"
+ "@typescript-eslint/utils" "8.29.0"
+
+typescript@*, typescript@^5.8.2, typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0":
+ version "5.8.2"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz"
+ integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==
+
+unbox-primitive@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz"
+ integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==
+ dependencies:
+ call-bound "^1.0.3"
+ has-bigints "^1.0.2"
+ has-symbols "^1.1.0"
+ which-boxed-primitive "^1.1.1"
+
+undici-types@~6.21.0:
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz"
+ integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
+
+unicorn-magic@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz"
+ integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==
+
+unrs-resolver@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.3.3.tgz"
+ integrity sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==
+ optionalDependencies:
+ "@unrs/resolver-binding-darwin-arm64" "1.3.3"
+ "@unrs/resolver-binding-darwin-x64" "1.3.3"
+ "@unrs/resolver-binding-freebsd-x64" "1.3.3"
+ "@unrs/resolver-binding-linux-arm-gnueabihf" "1.3.3"
+ "@unrs/resolver-binding-linux-arm-musleabihf" "1.3.3"
+ "@unrs/resolver-binding-linux-arm64-gnu" "1.3.3"
+ "@unrs/resolver-binding-linux-arm64-musl" "1.3.3"
+ "@unrs/resolver-binding-linux-ppc64-gnu" "1.3.3"
+ "@unrs/resolver-binding-linux-s390x-gnu" "1.3.3"
+ "@unrs/resolver-binding-linux-x64-gnu" "1.3.3"
+ "@unrs/resolver-binding-linux-x64-musl" "1.3.3"
+ "@unrs/resolver-binding-wasm32-wasi" "1.3.3"
+ "@unrs/resolver-binding-win32-arm64-msvc" "1.3.3"
+ "@unrs/resolver-binding-win32-ia32-msvc" "1.3.3"
+ "@unrs/resolver-binding-win32-x64-msvc" "1.3.3"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+vite-plugin-checker@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.9.1.tgz"
+ integrity sha512-neH3CSNWdkZ+zi+WPt/0y5+IO2I0UAI0NX6MaXqU/KxN1Lz6np/7IooRB6VVAMBa4nigqm1GRF6qNa4+EL5jDQ==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ chokidar "^4.0.3"
+ npm-run-path "^6.0.0"
+ picocolors "^1.1.1"
+ picomatch "^4.0.2"
+ strip-ansi "^7.1.0"
+ tiny-invariant "^1.3.3"
+ tinyglobby "^0.2.12"
+ vscode-uri "^3.1.0"
+
+"vite@^4 || ^5 || ^6", vite@^6.2.5, vite@>=2.0.0:
+ version "6.2.5"
+ resolved "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz"
+ integrity sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==
+ dependencies:
+ esbuild "^0.25.0"
+ postcss "^8.5.3"
+ rollup "^4.30.1"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+vscode-uri@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz"
+ integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==
+
+which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz"
+ integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==
+ 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"
+
+which-builtin-type@^1.2.1:
+ 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==
+ 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"
+
+which-collection@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz"
+ integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==
+ dependencies:
+ is-map "^2.0.3"
+ is-set "^2.0.3"
+ is-weakmap "^2.0.2"
+ is-weakset "^2.0.3"
+
+which-typed-array@^1.1.16, which-typed-array@^1.1.18:
+ version "1.1.19"
+ resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz"
+ integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==
+ 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"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
+yaml@^1.10.0:
+ version "1.10.2"
+ resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yaml@^2.4.2:
+ version "2.7.1"
+ resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz"
+ integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==