提交 09ed5c22 authored 作者: yanyalin's avatar yanyalin

页面调整

上级 96121ad7
{
"globals": {
"Component": true,
"ComponentPublicInstance": true,
"ComputedRef": true,
"EffectScope": true,
"ExtractDefaultPropTypes": true,
"ExtractPropTypes": true,
"ExtractPublicPropTypes": true,
"InjectionKey": true,
"PropType": true,
"Ref": true,
"VNode": true,
"WritableComputedRef": true,
"acceptHMRUpdate": true,
"computed": true,
"createApp": true,
"createPinia": true,
"customRef": true,
"defineAsyncComponent": true,
"defineComponent": true,
"defineStore": true,
"effectScope": true,
"getActivePinia": true,
"getCurrentInstance": true,
"getCurrentScope": true,
"h": true,
"inject": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
"mapActions": true,
"mapGetters": true,
"mapState": true,
"mapStores": true,
"mapWritableState": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
"onBeforeMount": true,
"onBeforeRouteLeave": true,
"onBeforeRouteUpdate": true,
"onBeforeUnmount": true,
"onBeforeUpdate": true,
"onDeactivated": true,
"onErrorCaptured": true,
"onMounted": true,
"onRenderTracked": true,
"onRenderTriggered": true,
"onScopeDispose": true,
"onServerPrefetch": true,
"onUnmounted": true,
"onUpdated": true,
"provide": true,
"reactive": true,
"readonly": true,
"ref": true,
"resolveComponent": true,
"setActivePinia": true,
"setMapStoreSuffix": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
"storeToRefs": true,
"toRaw": true,
"toRef": true,
"toRefs": true,
"toValue": true,
"triggerRef": true,
"unref": true,
"useAttrs": true,
"useCssModule": true,
"useCssVars": true,
"useLink": true,
"useMouse": true,
"useMyFetch": true,
"useRoute": true,
"useRouter": true,
"useSlots": true,
"watch": true,
"watchEffect": true,
"watchPostEffect": true,
"watchSyncEffect": true
}
}
...@@ -7,7 +7,8 @@ module.exports = { ...@@ -7,7 +7,8 @@ module.exports = {
'plugin:vue/vue3-essential', 'plugin:vue/vue3-essential',
'eslint:recommended', 'eslint:recommended',
'@vue/eslint-config-typescript', '@vue/eslint-config-typescript',
'@vue/eslint-config-prettier/skip-formatting' '@vue/eslint-config-prettier/skip-formatting',
"./.eslintrc-auto-import.json",
], ],
parserOptions: { parserOptions: {
ecmaVersion: 'latest' ecmaVersion: 'latest'
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
"@logicflow/core": "~1.2.28", "@logicflow/core": "~1.2.28",
"@logicflow/extension": "~1.2.28", "@logicflow/extension": "~1.2.28",
"@vueuse/core": "^11.0.3", "@vueuse/core": "^11.0.3",
"ant-design-vue": "^4.2.3",
"axios": "^1.7.7", "axios": "^1.7.7",
"codemirror": "^6.0.1", "codemirror": "^6.0.1",
"cropperjs": "^1.6.2", "cropperjs": "^1.6.2",
...@@ -37,6 +38,7 @@ ...@@ -37,6 +38,7 @@
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.1.6", "pinia": "^2.1.6",
"pinyin-pro": "^3.18.2", "pinyin-pro": "^3.18.2",
"qs": "^6.13.0",
"screenfull": "^6.0.2", "screenfull": "^6.0.2",
"use-element-plus-theme": "^0.0.5", "use-element-plus-theme": "^0.0.5",
"vue": "^3.5.4", "vue": "^3.5.4",
...@@ -53,17 +55,24 @@ ...@@ -53,17 +55,24 @@
"@types/lodash": "^4.17.7", "@types/lodash": "^4.17.7",
"@types/node": "^18.17.5", "@types/node": "^18.17.5",
"@types/nprogress": "^0.2.0", "@types/nprogress": "^0.2.0",
"@vitejs/plugin-vue": "^4.3.1", "@types/qs": "^6.9.15",
"@vitejs/plugin-vue": "^5.1.3",
"@vitejs/plugin-vue-jsx": "^4.0.1",
"@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-prettier": "^8.0.0",
"@vue/eslint-config-typescript": "^11.0.3", "@vue/eslint-config-typescript": "^11.0.3",
"@vue/test-utils": "^2.4.1", "@vue/test-utils": "^2.4.1",
"@vue/tsconfig": "^0.4.0", "@vue/tsconfig": "^0.4.0",
"autoprefixer": "^10.4.20",
"eslint": "~8.57.0", "eslint": "~8.57.0",
"eslint-plugin-vue": "^9.16.1", "eslint-plugin-vue": "^9.16.1",
"jsdom": "^22.1.0", "jsdom": "^22.1.0",
"postcss": "^8.4.45",
"prettier": "^3.0.0", "prettier": "^3.0.0",
"sass": "^1.66.1", "sass": "^1.66.1",
"tailwindcss": "^3.4.11",
"typescript": "~5.6.2", "typescript": "~5.6.2",
"unplugin-auto-import": "^0.18.3",
"unplugin-vue-components": "^0.27.4",
"vite": "^5.4.4", "vite": "^5.4.4",
"vite-plugin-vue-devtools": "^7.4.5", "vite-plugin-vue-devtools": "^7.4.5",
"vitest": "^0.34.2", "vitest": "^0.34.2",
......
...@@ -15,14 +15,17 @@ importers: ...@@ -15,14 +15,17 @@ importers:
specifier: ^2.3.1 specifier: ^2.3.1
version: 2.3.1(vue@3.5.4(typescript@5.6.2)) version: 2.3.1(vue@3.5.4(typescript@5.6.2))
'@logicflow/core': '@logicflow/core':
specifier: ^1.2.27 specifier: ~1.2.28
version: 1.2.28 version: 1.2.28
'@logicflow/extension': '@logicflow/extension':
specifier: ^1.2.27 specifier: ~1.2.28
version: 1.2.28 version: 1.2.28
'@vueuse/core': '@vueuse/core':
specifier: ^11.0.3 specifier: ^11.0.3
version: 11.0.3(vue@3.5.4(typescript@5.6.2)) version: 11.0.3(vue@3.5.4(typescript@5.6.2))
ant-design-vue:
specifier: ^4.2.3
version: 4.2.3(vue@3.5.4(typescript@5.6.2))
axios: axios:
specifier: ^1.7.7 specifier: ^1.7.7
version: 1.7.7 version: 1.7.7
...@@ -80,6 +83,9 @@ importers: ...@@ -80,6 +83,9 @@ importers:
pinyin-pro: pinyin-pro:
specifier: ^3.18.2 specifier: ^3.18.2
version: 3.24.2 version: 3.24.2
qs:
specifier: ^6.13.0
version: 6.13.0
screenfull: screenfull:
specifier: ^6.0.2 specifier: ^6.0.2
version: 6.0.2 version: 6.0.2
...@@ -123,9 +129,15 @@ importers: ...@@ -123,9 +129,15 @@ importers:
'@types/nprogress': '@types/nprogress':
specifier: ^0.2.0 specifier: ^0.2.0
version: 0.2.3 version: 0.2.3
'@types/qs':
specifier: ^6.9.15
version: 6.9.15
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: ^4.3.1 specifier: ^5.1.3
version: 4.6.2(vite@5.4.4(@types/node@18.19.50)(sass@1.78.0))(vue@3.5.4(typescript@5.6.2)) version: 5.1.3(vite@5.4.4(@types/node@18.19.50)(sass@1.78.0))(vue@3.5.4(typescript@5.6.2))
'@vitejs/plugin-vue-jsx':
specifier: ^4.0.1
version: 4.0.1(vite@5.4.4(@types/node@18.19.50)(sass@1.78.0))(vue@3.5.4(typescript@5.6.2))
'@vue/eslint-config-prettier': '@vue/eslint-config-prettier':
specifier: ^8.0.0 specifier: ^8.0.0
version: 8.0.0(eslint@8.57.0)(prettier@3.3.3) version: 8.0.0(eslint@8.57.0)(prettier@3.3.3)
...@@ -138,6 +150,9 @@ importers: ...@@ -138,6 +150,9 @@ importers:
'@vue/tsconfig': '@vue/tsconfig':
specifier: ^0.4.0 specifier: ^0.4.0
version: 0.4.0 version: 0.4.0
autoprefixer:
specifier: ^10.4.20
version: 10.4.20(postcss@8.4.45)
eslint: eslint:
specifier: ~8.57.0 specifier: ~8.57.0
version: 8.57.0 version: 8.57.0
...@@ -147,15 +162,27 @@ importers: ...@@ -147,15 +162,27 @@ importers:
jsdom: jsdom:
specifier: ^22.1.0 specifier: ^22.1.0
version: 22.1.0 version: 22.1.0
postcss:
specifier: ^8.4.45
version: 8.4.45
prettier: prettier:
specifier: ^3.0.0 specifier: ^3.0.0
version: 3.3.3 version: 3.3.3
sass: sass:
specifier: ^1.66.1 specifier: ^1.66.1
version: 1.78.0 version: 1.78.0
tailwindcss:
specifier: ^3.4.11
version: 3.4.11
typescript: typescript:
specifier: ~5.6.2 specifier: ~5.6.2
version: 5.6.2 version: 5.6.2
unplugin-auto-import:
specifier: ^0.18.3
version: 0.18.3(@vueuse/core@11.0.3(vue@3.5.4(typescript@5.6.2)))(rollup@4.21.3)
unplugin-vue-components:
specifier: ^0.27.4
version: 0.27.4(@babel/parser@7.25.6)(rollup@4.21.3)(vue@3.5.4(typescript@5.6.2))
vite: vite:
specifier: ^5.4.4 specifier: ^5.4.4
version: 5.4.4(@types/node@18.19.50)(sass@1.78.0) version: 5.4.4(@types/node@18.19.50)(sass@1.78.0)
...@@ -171,10 +198,25 @@ importers: ...@@ -171,10 +198,25 @@ importers:
packages: packages:
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
'@ampproject/remapping@2.3.0': '@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
'@ant-design/colors@6.0.0':
resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==}
'@ant-design/icons-svg@4.4.2':
resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
'@ant-design/icons-vue@7.0.1':
resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==}
peerDependencies:
vue: '>=3.0.3'
'@antfu/utils@0.7.10': '@antfu/utils@0.7.10':
resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
...@@ -378,6 +420,10 @@ packages: ...@@ -378,6 +420,10 @@ packages:
peerDependencies: peerDependencies:
'@babel/core': ^7.0.0-0 '@babel/core': ^7.0.0-0
'@babel/runtime@7.25.6':
resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==}
engines: {node: '>=6.9.0'}
'@babel/template@7.25.0': '@babel/template@7.25.0':
resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
...@@ -501,6 +547,12 @@ packages: ...@@ -501,6 +547,12 @@ packages:
peerDependencies: peerDependencies:
vue: ^3.2.0 vue: ^3.2.0
'@emotion/hash@0.9.2':
resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
'@emotion/unitless@0.8.1':
resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
'@esbuild/aix-ppc64@0.21.5': '@esbuild/aix-ppc64@0.21.5':
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
...@@ -1130,6 +1182,9 @@ packages: ...@@ -1130,6 +1182,9 @@ packages:
'@rushstack/ts-command-line@4.19.1': '@rushstack/ts-command-line@4.19.1':
resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==}
'@simonwep/pickr@1.8.2':
resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==}
'@sinclair/typebox@0.27.8': '@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
...@@ -1243,6 +1298,9 @@ packages: ...@@ -1243,6 +1298,9 @@ packages:
'@types/prettier@2.7.3': '@types/prettier@2.7.3':
resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==}
'@types/qs@6.9.15':
resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==}
'@types/semver@7.5.8': '@types/semver@7.5.8':
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
...@@ -1331,11 +1389,18 @@ packages: ...@@ -1331,11 +1389,18 @@ packages:
'@vavt/util@2.1.0': '@vavt/util@2.1.0':
resolution: {integrity: sha512-YIfAvArSFVXmWvoF+DEGD0FhkhVNcCtVWWkfYtj76eSrwHh/wuEEFhiEubg1XLNM3tChO8FH8xJCT/hnizjgFQ==} resolution: {integrity: sha512-YIfAvArSFVXmWvoF+DEGD0FhkhVNcCtVWWkfYtj76eSrwHh/wuEEFhiEubg1XLNM3tChO8FH8xJCT/hnizjgFQ==}
'@vitejs/plugin-vue@4.6.2': '@vitejs/plugin-vue-jsx@4.0.1':
resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} resolution: {integrity: sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies: peerDependencies:
vite: ^4.0.0 || ^5.0.0 vite: ^5.0.0
vue: ^3.0.0
'@vitejs/plugin-vue@5.1.3':
resolution: {integrity: sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
vue: ^3.2.25 vue: ^3.2.25
'@vitest/expect@0.34.6': '@vitest/expect@0.34.6':
...@@ -1539,16 +1604,31 @@ packages: ...@@ -1539,16 +1604,31 @@ packages:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'} engines: {node: '>=12'}
ant-design-vue@4.2.3:
resolution: {integrity: sha512-kqGyWvZtFlSInFP93Ow6wS8LzEsxxUgpI+ZY5jQQkuX8WAcqdwXCA7IcHMpECW6JB89DZMo2Bw85jUg2SjlgQA==}
engines: {node: '>=12.22.0'}
peerDependencies:
vue: '>=3.2.0'
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
anymatch@3.1.3: anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
argparse@1.0.10: argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
argparse@2.0.1: argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
array-tree-filter@2.1.0:
resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==}
array-union@2.1.0: array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -1562,6 +1642,13 @@ packages: ...@@ -1562,6 +1642,13 @@ packages:
asynckit@0.4.0: asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
autoprefixer@10.4.20:
resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
postcss: ^8.1.0
axios@1.7.7: axios@1.7.7:
resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==}
...@@ -1635,10 +1722,18 @@ packages: ...@@ -1635,10 +1722,18 @@ packages:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
call-bind@1.0.7:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'}
callsites@3.1.0: callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
camelcase@5.3.1: camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'} engines: {node: '>=6'}
...@@ -1723,6 +1818,10 @@ packages: ...@@ -1723,6 +1818,10 @@ packages:
commander@2.20.3: commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
commander@7.2.0: commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
...@@ -1735,6 +1834,9 @@ packages: ...@@ -1735,6 +1834,9 @@ packages:
resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
engines: {node: ^12.20.0 || >=14} engines: {node: ^12.20.0 || >=14}
compute-scroll-into-view@1.0.20:
resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
computeds@0.0.1: computeds@0.0.1:
resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
...@@ -1760,6 +1862,9 @@ packages: ...@@ -1760,6 +1862,9 @@ packages:
copy-to-clipboard@3.3.3: copy-to-clipboard@3.3.3:
resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
core-js@3.38.1:
resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==}
cose-base@1.0.3: cose-base@1.0.3:
resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
...@@ -2000,6 +2105,10 @@ packages: ...@@ -2000,6 +2105,10 @@ packages:
resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
engines: {node: '>=18'} engines: {node: '>=18'}
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
define-lazy-prop@3.0.0: define-lazy-prop@3.0.0:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
engines: {node: '>=12'} engines: {node: '>=12'}
...@@ -2022,6 +2131,9 @@ packages: ...@@ -2022,6 +2131,9 @@ packages:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'} engines: {node: '>=8'}
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
diff-sequences@27.5.1: diff-sequences@27.5.1:
resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
...@@ -2038,10 +2150,19 @@ packages: ...@@ -2038,10 +2150,19 @@ packages:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'} engines: {node: '>=8'}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
doctrine@3.0.0: doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
dom-align@1.12.4:
resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==}
dom-scroll-into-view@2.0.1:
resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==}
domexception@2.0.1: domexception@2.0.1:
resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -2097,6 +2218,14 @@ packages: ...@@ -2097,6 +2218,14 @@ packages:
error-stack-parser-es@0.1.5: error-stack-parser-es@0.1.5:
resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==}
es-define-property@1.0.0:
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
engines: {node: '>= 0.4'}
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
esbuild@0.18.20: esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'} engines: {node: '>=12'}
...@@ -2126,6 +2255,10 @@ packages: ...@@ -2126,6 +2255,10 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
escodegen@2.1.0: escodegen@2.1.0:
resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
engines: {node: '>=6.0'} engines: {node: '>=6.0'}
...@@ -2202,6 +2335,9 @@ packages: ...@@ -2202,6 +2335,9 @@ packages:
estree-walker@2.0.2: estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
esutils@2.0.3: esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
...@@ -2291,6 +2427,9 @@ packages: ...@@ -2291,6 +2427,9 @@ packages:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
fs-extra@11.2.0: fs-extra@11.2.0:
resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
engines: {node: '>=14.14'} engines: {node: '>=14.14'}
...@@ -2321,6 +2460,10 @@ packages: ...@@ -2321,6 +2460,10 @@ packages:
get-func-name@2.0.2: get-func-name@2.0.2:
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
get-package-type@0.1.0: get-package-type@0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'} engines: {node: '>=8.0.0'}
...@@ -2364,6 +2507,9 @@ packages: ...@@ -2364,6 +2507,9 @@ packages:
good-listener@1.2.2: good-listener@1.2.2:
resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==}
gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
graceful-fs@4.2.11: graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
...@@ -2378,6 +2524,17 @@ packages: ...@@ -2378,6 +2524,17 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
has-proto@1.0.3:
resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
engines: {node: '>= 0.4'}
has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
hasown@2.0.2: hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
...@@ -2522,6 +2679,10 @@ packages: ...@@ -2522,6 +2679,10 @@ packages:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
is-plain-object@3.0.1:
resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==}
engines: {node: '>=0.10.0'}
is-potential-custom-element-name@1.0.1: is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
...@@ -2708,6 +2869,10 @@ packages: ...@@ -2708,6 +2869,10 @@ packages:
node-notifier: node-notifier:
optional: true optional: true
jiti@1.21.6:
resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
hasBin: true
jju@1.4.0: jju@1.4.0:
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
...@@ -2723,6 +2888,9 @@ packages: ...@@ -2723,6 +2888,9 @@ packages:
js-tokens@4.0.0: js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-tokens@9.0.0:
resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==}
js-yaml@3.14.1: js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true hasBin: true
...@@ -2809,6 +2977,14 @@ packages: ...@@ -2809,6 +2977,14 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
lilconfig@3.1.2:
resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
engines: {node: '>=14'}
lines-and-columns@1.2.4: lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
...@@ -2819,6 +2995,10 @@ packages: ...@@ -2819,6 +2995,10 @@ packages:
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'} engines: {node: '>=14'}
local-pkg@0.5.0:
resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
engines: {node: '>=14'}
locate-path@5.0.0: locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -2849,6 +3029,10 @@ packages: ...@@ -2849,6 +3029,10 @@ packages:
lodash@4.17.21: lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
loupe@2.3.7: loupe@2.3.7:
resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
...@@ -3047,11 +3231,17 @@ packages: ...@@ -3047,11 +3231,17 @@ packages:
muggle-string@0.3.1: muggle-string@0.3.1:
resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
nanoid@3.3.7: nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true hasBin: true
nanopop@2.4.2:
resolution: {integrity: sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==}
natural-compare-lite@1.4.0: natural-compare-lite@1.4.0:
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
...@@ -3076,6 +3266,10 @@ packages: ...@@ -3076,6 +3266,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
normalize-range@0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
normalize-wheel-es@1.2.0: normalize-wheel-es@1.2.0:
resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
...@@ -3096,6 +3290,18 @@ packages: ...@@ -3096,6 +3290,18 @@ packages:
nwsapi@2.2.12: nwsapi@2.2.12:
resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==}
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
object-hash@3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
object-inspect@1.13.2:
resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
engines: {node: '>= 0.4'}
once@1.4.0: once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
...@@ -3202,6 +3408,10 @@ packages: ...@@ -3202,6 +3408,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
pinia@2.2.2: pinia@2.2.2:
resolution: {integrity: sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==} resolution: {integrity: sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==}
peerDependencies: peerDependencies:
...@@ -3228,10 +3438,43 @@ packages: ...@@ -3228,10 +3438,43 @@ packages:
pkg-types@1.2.0: pkg-types@1.2.0:
resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==}
postcss-import@15.1.0:
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
postcss-js@4.0.1:
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.4.21
postcss-load-config@4.0.2:
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
postcss-nested@6.2.0:
resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
postcss-selector-parser@6.1.2: postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'} engines: {node: '>=4'}
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.4.45: postcss@8.4.45:
resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
...@@ -3281,6 +3524,10 @@ packages: ...@@ -3281,6 +3524,10 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'} engines: {node: '>=6'}
qs@6.13.0:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
querystringify@2.2.0: querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
...@@ -3293,10 +3540,16 @@ packages: ...@@ -3293,10 +3540,16 @@ packages:
react-is@18.3.1: react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
readdirp@3.6.0: readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'} engines: {node: '>=8.10.0'}
regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
require-directory@2.1.1: require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
...@@ -3304,6 +3557,9 @@ packages: ...@@ -3304,6 +3557,9 @@ packages:
requires-port@1.0.0: requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
resize-observer-polyfill@1.5.1:
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
resolve-cwd@3.0.0: resolve-cwd@3.0.0:
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -3389,6 +3645,12 @@ packages: ...@@ -3389,6 +3645,12 @@ packages:
resolution: {integrity: sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==} resolution: {integrity: sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==}
engines: {node: ^14.13.1 || >=16.0.0} engines: {node: ^14.13.1 || >=16.0.0}
scroll-into-view-if-needed@2.2.31:
resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
select@1.1.2: select@1.1.2:
resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==}
...@@ -3406,6 +3668,13 @@ packages: ...@@ -3406,6 +3668,13 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
shallow-equal@1.2.1:
resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
shebang-command@2.0.0: shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -3414,6 +3683,10 @@ packages: ...@@ -3414,6 +3683,10 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'} engines: {node: '>=8'}
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
siginfo@2.0.0: siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
...@@ -3510,12 +3783,20 @@ packages: ...@@ -3510,12 +3783,20 @@ packages:
strip-literal@1.3.0: strip-literal@1.3.0:
resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
strip-literal@2.1.0:
resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==}
style-mod@4.1.2: style-mod@4.1.2:
resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
stylis@4.3.4: stylis@4.3.4:
resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==}
sucrase@3.35.0:
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
superjson@2.2.1: superjson@2.2.1:
resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==}
engines: {node: '>=16'} engines: {node: '>=16'}
...@@ -3550,6 +3831,11 @@ packages: ...@@ -3550,6 +3831,11 @@ packages:
resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
tailwindcss@3.4.11:
resolution: {integrity: sha512-qhEuBcLemjSJk5ajccN9xJFtM/h0AVCPaA6C92jNP+M2J8kX+eMJHI7R2HFKUvvAsMpcfLILMCFYSeDwpMmlUg==}
engines: {node: '>=14.0.0'}
hasBin: true
terminal-link@2.1.1: terminal-link@2.1.1:
resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -3561,9 +3847,20 @@ packages: ...@@ -3561,9 +3847,20 @@ packages:
text-table@0.2.0: text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
throat@6.0.2: throat@6.0.2:
resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==}
throttle-debounce@5.0.2:
resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
engines: {node: '>=12.22'}
tiny-emitter@2.1.0: tiny-emitter@2.1.0:
resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
...@@ -3612,6 +3909,9 @@ packages: ...@@ -3612,6 +3909,9 @@ packages:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
engines: {node: '>=6.10'} engines: {node: '>=6.10'}
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
tslib@1.14.1: tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
...@@ -3669,6 +3969,9 @@ packages: ...@@ -3669,6 +3969,9 @@ packages:
undici-types@5.26.5: undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
unimport@3.12.0:
resolution: {integrity: sha512-5y8dSvNvyevsnw4TBQkIQR1Rjdbb+XjVSwQwxltpnVZrStBvvPkMPcZrh1kg5kY77kpx6+D4Ztd3W6FOBH/y2Q==}
unist-util-stringify-position@3.0.3: unist-util-stringify-position@3.0.3:
resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
...@@ -3684,6 +3987,40 @@ packages: ...@@ -3684,6 +3987,40 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
unplugin-auto-import@0.18.3:
resolution: {integrity: sha512-q3FUtGQjYA2e+kb1WumyiQMjHM27MrTQ05QfVwtLRVhyYe+KF6TblBYaEX9L6Z0EibsqaXAiW+RFfkcQpfaXzg==}
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': ^3.2.2
'@vueuse/core': '*'
peerDependenciesMeta:
'@nuxt/kit':
optional: true
'@vueuse/core':
optional: true
unplugin-vue-components@0.27.4:
resolution: {integrity: sha512-1XVl5iXG7P1UrOMnaj2ogYa5YTq8aoh5jwDPQhemwO/OrXW+lPQKDXd1hMz15qxQPxgb/XXlbgo3HQ2rLEbmXQ==}
engines: {node: '>=14'}
peerDependencies:
'@babel/parser': ^7.15.8
'@nuxt/kit': ^3.2.2
vue: 2 || 3
peerDependenciesMeta:
'@babel/parser':
optional: true
'@nuxt/kit':
optional: true
unplugin@1.14.1:
resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==}
engines: {node: '>=14.0.0'}
peerDependencies:
webpack-sources: ^3
peerDependenciesMeta:
webpack-sources:
optional: true
update-browserslist-db@1.1.0: update-browserslist-db@1.1.0:
resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
hasBin: true hasBin: true
...@@ -3899,6 +4236,12 @@ packages: ...@@ -3899,6 +4236,12 @@ packages:
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
vue-types@3.0.2:
resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==}
engines: {node: '>=10.15.0'}
peerDependencies:
vue: ^3.0.0
vue@3.5.4: vue@3.5.4:
resolution: {integrity: sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==} resolution: {integrity: sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==}
peerDependencies: peerDependencies:
...@@ -3925,6 +4268,9 @@ packages: ...@@ -3925,6 +4268,9 @@ packages:
walker@1.0.8: walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
warning@4.0.3:
resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
web-worker@1.3.0: web-worker@1.3.0:
resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==}
...@@ -3940,6 +4286,9 @@ packages: ...@@ -3940,6 +4286,9 @@ packages:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'} engines: {node: '>=12'}
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
whatwg-encoding@1.0.5: whatwg-encoding@1.0.5:
resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==}
...@@ -4039,6 +4388,11 @@ packages: ...@@ -4039,6 +4388,11 @@ packages:
yallist@4.0.0: yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
yaml@2.5.1:
resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==}
engines: {node: '>= 14'}
hasBin: true
yargs-parser@20.2.9: yargs-parser@20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
engines: {node: '>=10'} engines: {node: '>=10'}
...@@ -4065,11 +4419,25 @@ packages: ...@@ -4065,11 +4419,25 @@ packages:
snapshots: snapshots:
'@alloc/quick-lru@5.2.0': {}
'@ampproject/remapping@2.3.0': '@ampproject/remapping@2.3.0':
dependencies: dependencies:
'@jridgewell/gen-mapping': 0.3.5 '@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
'@ant-design/colors@6.0.0':
dependencies:
'@ctrl/tinycolor': 3.6.1
'@ant-design/icons-svg@4.4.2': {}
'@ant-design/icons-vue@7.0.1(vue@3.5.4(typescript@5.6.2))':
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-svg': 4.4.2
vue: 3.5.4(typescript@5.6.2)
'@antfu/utils@0.7.10': {} '@antfu/utils@0.7.10': {}
'@babel/code-frame@7.24.7': '@babel/code-frame@7.24.7':
...@@ -4316,6 +4684,10 @@ snapshots: ...@@ -4316,6 +4684,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@babel/runtime@7.25.6':
dependencies:
regenerator-runtime: 0.14.1
'@babel/template@7.25.0': '@babel/template@7.25.0':
dependencies: dependencies:
'@babel/code-frame': 7.24.7 '@babel/code-frame': 7.24.7
...@@ -4603,6 +4975,10 @@ snapshots: ...@@ -4603,6 +4975,10 @@ snapshots:
dependencies: dependencies:
vue: 3.5.4(typescript@5.6.2) vue: 3.5.4(typescript@5.6.2)
'@emotion/hash@0.9.2': {}
'@emotion/unitless@0.8.1': {}
'@esbuild/aix-ppc64@0.21.5': '@esbuild/aix-ppc64@0.21.5':
optional: true optional: true
...@@ -5243,6 +5619,11 @@ snapshots: ...@@ -5243,6 +5619,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
'@simonwep/pickr@1.8.2':
dependencies:
core-js: 3.38.1
nanopop: 2.4.2
'@sinclair/typebox@0.27.8': {} '@sinclair/typebox@0.27.8': {}
'@sinonjs/commons@1.8.6': '@sinonjs/commons@1.8.6':
...@@ -5359,6 +5740,8 @@ snapshots: ...@@ -5359,6 +5740,8 @@ snapshots:
'@types/prettier@2.7.3': {} '@types/prettier@2.7.3': {}
'@types/qs@6.9.15': {}
'@types/semver@7.5.8': {} '@types/semver@7.5.8': {}
'@types/stack-utils@2.0.3': {} '@types/stack-utils@2.0.3': {}
...@@ -5465,7 +5848,17 @@ snapshots: ...@@ -5465,7 +5848,17 @@ snapshots:
'@vavt/util@2.1.0': {} '@vavt/util@2.1.0': {}
'@vitejs/plugin-vue@4.6.2(vite@5.4.4(@types/node@18.19.50)(sass@1.78.0))(vue@3.5.4(typescript@5.6.2))': '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.4(@types/node@18.19.50)(sass@1.78.0))(vue@3.5.4(typescript@5.6.2))':
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2)
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2)
vite: 5.4.4(@types/node@18.19.50)(sass@1.78.0)
vue: 3.5.4(typescript@5.6.2)
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue@5.1.3(vite@5.4.4(@types/node@18.19.50)(sass@1.78.0))(vue@3.5.4(typescript@5.6.2))':
dependencies: dependencies:
vite: 5.4.4(@types/node@18.19.50)(sass@1.78.0) vite: 5.4.4(@types/node@18.19.50)(sass@1.78.0)
vue: 3.5.4(typescript@5.6.2) vue: 3.5.4(typescript@5.6.2)
...@@ -5759,17 +6152,49 @@ snapshots: ...@@ -5759,17 +6152,49 @@ snapshots:
ansi-styles@6.2.1: {} ansi-styles@6.2.1: {}
ant-design-vue@4.2.3(vue@3.5.4(typescript@5.6.2)):
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-vue': 7.0.1(vue@3.5.4(typescript@5.6.2))
'@babel/runtime': 7.25.6
'@ctrl/tinycolor': 3.6.1
'@emotion/hash': 0.9.2
'@emotion/unitless': 0.8.1
'@simonwep/pickr': 1.8.2
array-tree-filter: 2.1.0
async-validator: 4.2.5
csstype: 3.1.3
dayjs: 1.11.13
dom-align: 1.12.4
dom-scroll-into-view: 2.0.1
lodash: 4.17.21
lodash-es: 4.17.21
resize-observer-polyfill: 1.5.1
scroll-into-view-if-needed: 2.2.31
shallow-equal: 1.2.1
stylis: 4.3.4
throttle-debounce: 5.0.2
vue: 3.5.4(typescript@5.6.2)
vue-types: 3.0.2(vue@3.5.4(typescript@5.6.2))
warning: 4.0.3
any-promise@1.3.0: {}
anymatch@3.1.3: anymatch@3.1.3:
dependencies: dependencies:
normalize-path: 3.0.0 normalize-path: 3.0.0
picomatch: 2.3.1 picomatch: 2.3.1
arg@5.0.2: {}
argparse@1.0.10: argparse@1.0.10:
dependencies: dependencies:
sprintf-js: 1.0.3 sprintf-js: 1.0.3
argparse@2.0.1: {} argparse@2.0.1: {}
array-tree-filter@2.1.0: {}
array-union@2.1.0: {} array-union@2.1.0: {}
assertion-error@1.1.0: {} assertion-error@1.1.0: {}
...@@ -5778,6 +6203,16 @@ snapshots: ...@@ -5778,6 +6203,16 @@ snapshots:
asynckit@0.4.0: {} asynckit@0.4.0: {}
autoprefixer@10.4.20(postcss@8.4.45):
dependencies:
browserslist: 4.23.3
caniuse-lite: 1.0.30001660
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.0
postcss: 8.4.45
postcss-value-parser: 4.2.0
axios@1.7.7: axios@1.7.7:
dependencies: dependencies:
follow-redirects: 1.15.9 follow-redirects: 1.15.9
...@@ -5884,8 +6319,18 @@ snapshots: ...@@ -5884,8 +6319,18 @@ snapshots:
cac@6.7.14: {} cac@6.7.14: {}
call-bind@1.0.7:
dependencies:
es-define-property: 1.0.0
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
set-function-length: 1.2.2
callsites@3.1.0: {} callsites@3.1.0: {}
camelcase-css@2.0.1: {}
camelcase@5.3.1: {} camelcase@5.3.1: {}
camelcase@6.3.0: {} camelcase@6.3.0: {}
...@@ -5985,6 +6430,8 @@ snapshots: ...@@ -5985,6 +6430,8 @@ snapshots:
commander@2.20.3: {} commander@2.20.3: {}
commander@4.1.1: {}
commander@7.2.0: {} commander@7.2.0: {}
commander@8.3.0: {} commander@8.3.0: {}
...@@ -5992,6 +6439,8 @@ snapshots: ...@@ -5992,6 +6439,8 @@ snapshots:
commander@9.5.0: commander@9.5.0:
optional: true optional: true
compute-scroll-into-view@1.0.20: {}
computeds@0.0.1: {} computeds@0.0.1: {}
concat-map@0.0.1: {} concat-map@0.0.1: {}
...@@ -6015,6 +6464,8 @@ snapshots: ...@@ -6015,6 +6464,8 @@ snapshots:
dependencies: dependencies:
toggle-selection: 1.0.6 toggle-selection: 1.0.6
core-js@3.38.1: {}
cose-base@1.0.3: cose-base@1.0.3:
dependencies: dependencies:
layout-base: 1.0.2 layout-base: 1.0.2
...@@ -6269,6 +6720,12 @@ snapshots: ...@@ -6269,6 +6720,12 @@ snapshots:
bundle-name: 4.1.0 bundle-name: 4.1.0
default-browser-id: 5.0.0 default-browser-id: 5.0.0
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.0
es-errors: 1.3.0
gopd: 1.0.1
define-lazy-prop@3.0.0: {} define-lazy-prop@3.0.0: {}
delaunator@5.0.1: delaunator@5.0.1:
...@@ -6283,6 +6740,8 @@ snapshots: ...@@ -6283,6 +6740,8 @@ snapshots:
detect-newline@3.1.0: {} detect-newline@3.1.0: {}
didyoumean@1.2.2: {}
diff-sequences@27.5.1: {} diff-sequences@27.5.1: {}
diff-sequences@29.6.3: {} diff-sequences@29.6.3: {}
...@@ -6293,10 +6752,16 @@ snapshots: ...@@ -6293,10 +6752,16 @@ snapshots:
dependencies: dependencies:
path-type: 4.0.0 path-type: 4.0.0
dlv@1.1.3: {}
doctrine@3.0.0: doctrine@3.0.0:
dependencies: dependencies:
esutils: 2.0.3 esutils: 2.0.3
dom-align@1.12.4: {}
dom-scroll-into-view@2.0.1: {}
domexception@2.0.1: domexception@2.0.1:
dependencies: dependencies:
webidl-conversions: 5.0.0 webidl-conversions: 5.0.0
...@@ -6360,6 +6825,12 @@ snapshots: ...@@ -6360,6 +6825,12 @@ snapshots:
error-stack-parser-es@0.1.5: {} error-stack-parser-es@0.1.5: {}
es-define-property@1.0.0:
dependencies:
get-intrinsic: 1.2.4
es-errors@1.3.0: {}
esbuild@0.18.20: esbuild@0.18.20:
optionalDependencies: optionalDependencies:
'@esbuild/android-arm': 0.18.20 '@esbuild/android-arm': 0.18.20
...@@ -6421,6 +6892,8 @@ snapshots: ...@@ -6421,6 +6892,8 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
escape-string-regexp@5.0.0: {}
escodegen@2.1.0: escodegen@2.1.0:
dependencies: dependencies:
esprima: 4.0.1 esprima: 4.0.1
...@@ -6533,6 +7006,10 @@ snapshots: ...@@ -6533,6 +7006,10 @@ snapshots:
estree-walker@2.0.2: {} estree-walker@2.0.2: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.5
esutils@2.0.3: {} esutils@2.0.3: {}
execa@5.1.1: execa@5.1.1:
...@@ -6639,6 +7116,8 @@ snapshots: ...@@ -6639,6 +7116,8 @@ snapshots:
combined-stream: 1.0.8 combined-stream: 1.0.8
mime-types: 2.1.35 mime-types: 2.1.35
fraction.js@4.3.7: {}
fs-extra@11.2.0: fs-extra@11.2.0:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
...@@ -6664,6 +7143,14 @@ snapshots: ...@@ -6664,6 +7143,14 @@ snapshots:
get-func-name@2.0.2: {} get-func-name@2.0.2: {}
get-intrinsic@1.2.4:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
has-proto: 1.0.3
has-symbols: 1.0.3
hasown: 2.0.2
get-package-type@0.1.0: {} get-package-type@0.1.0: {}
get-stream@6.0.1: {} get-stream@6.0.1: {}
...@@ -6715,6 +7202,10 @@ snapshots: ...@@ -6715,6 +7202,10 @@ snapshots:
dependencies: dependencies:
delegate: 3.2.0 delegate: 3.2.0
gopd@1.0.1:
dependencies:
get-intrinsic: 1.2.4
graceful-fs@4.2.11: {} graceful-fs@4.2.11: {}
graphemer@1.4.0: {} graphemer@1.4.0: {}
...@@ -6723,6 +7214,14 @@ snapshots: ...@@ -6723,6 +7214,14 @@ snapshots:
has-flag@4.0.0: {} has-flag@4.0.0: {}
has-property-descriptors@1.0.2:
dependencies:
es-define-property: 1.0.0
has-proto@1.0.3: {}
has-symbols@1.0.3: {}
hasown@2.0.2: hasown@2.0.2:
dependencies: dependencies:
function-bind: 1.1.2 function-bind: 1.1.2
...@@ -6841,6 +7340,8 @@ snapshots: ...@@ -6841,6 +7340,8 @@ snapshots:
is-path-inside@3.0.3: {} is-path-inside@3.0.3: {}
is-plain-object@3.0.1: {}
is-potential-custom-element-name@1.0.1: {} is-potential-custom-element-name@1.0.1: {}
is-stream@2.0.1: {} is-stream@2.0.1: {}
...@@ -7251,6 +7752,8 @@ snapshots: ...@@ -7251,6 +7752,8 @@ snapshots:
- ts-node - ts-node
- utf-8-validate - utf-8-validate
jiti@1.21.6: {}
jju@1.4.0: {} jju@1.4.0: {}
js-beautify@1.15.1: js-beautify@1.15.1:
...@@ -7265,6 +7768,8 @@ snapshots: ...@@ -7265,6 +7768,8 @@ snapshots:
js-tokens@4.0.0: {} js-tokens@4.0.0: {}
js-tokens@9.0.0: {}
js-yaml@3.14.1: js-yaml@3.14.1:
dependencies: dependencies:
argparse: 1.0.10 argparse: 1.0.10
...@@ -7385,6 +7890,10 @@ snapshots: ...@@ -7385,6 +7890,10 @@ snapshots:
prelude-ls: 1.2.1 prelude-ls: 1.2.1
type-check: 0.4.0 type-check: 0.4.0
lilconfig@2.1.0: {}
lilconfig@3.1.2: {}
lines-and-columns@1.2.4: {} lines-and-columns@1.2.4: {}
linkify-it@5.0.0: linkify-it@5.0.0:
...@@ -7393,6 +7902,11 @@ snapshots: ...@@ -7393,6 +7902,11 @@ snapshots:
local-pkg@0.4.3: {} local-pkg@0.4.3: {}
local-pkg@0.5.0:
dependencies:
mlly: 1.7.1
pkg-types: 1.2.0
locate-path@5.0.0: locate-path@5.0.0:
dependencies: dependencies:
p-locate: 4.1.0 p-locate: 4.1.0
...@@ -7417,6 +7931,10 @@ snapshots: ...@@ -7417,6 +7931,10 @@ snapshots:
lodash@4.17.21: {} lodash@4.17.21: {}
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
loupe@2.3.7: loupe@2.3.7:
dependencies: dependencies:
get-func-name: 2.0.2 get-func-name: 2.0.2
...@@ -7723,8 +8241,16 @@ snapshots: ...@@ -7723,8 +8241,16 @@ snapshots:
muggle-string@0.3.1: {} muggle-string@0.3.1: {}
mz@2.7.0:
dependencies:
any-promise: 1.3.0
object-assign: 4.1.1
thenify-all: 1.6.0
nanoid@3.3.7: {} nanoid@3.3.7: {}
nanopop@2.4.2: {}
natural-compare-lite@1.4.0: {} natural-compare-lite@1.4.0: {}
natural-compare@1.4.0: {} natural-compare@1.4.0: {}
...@@ -7741,6 +8267,8 @@ snapshots: ...@@ -7741,6 +8267,8 @@ snapshots:
normalize-path@3.0.0: {} normalize-path@3.0.0: {}
normalize-range@0.1.2: {}
normalize-wheel-es@1.2.0: {} normalize-wheel-es@1.2.0: {}
npm-run-path@4.0.1: npm-run-path@4.0.1:
...@@ -7759,6 +8287,12 @@ snapshots: ...@@ -7759,6 +8287,12 @@ snapshots:
nwsapi@2.2.12: {} nwsapi@2.2.12: {}
object-assign@4.1.1: {}
object-hash@3.0.0: {}
object-inspect@1.13.2: {}
once@1.4.0: once@1.4.0:
dependencies: dependencies:
wrappy: 1.0.2 wrappy: 1.0.2
...@@ -7857,6 +8391,8 @@ snapshots: ...@@ -7857,6 +8391,8 @@ snapshots:
picomatch@2.3.1: {} picomatch@2.3.1: {}
pify@2.3.0: {}
pinia@2.2.2(typescript@5.6.2)(vue@3.5.4(typescript@5.6.2)): pinia@2.2.2(typescript@5.6.2)(vue@3.5.4(typescript@5.6.2)):
dependencies: dependencies:
'@vue/devtools-api': 6.6.4 '@vue/devtools-api': 6.6.4
...@@ -7879,11 +8415,37 @@ snapshots: ...@@ -7879,11 +8415,37 @@ snapshots:
mlly: 1.7.1 mlly: 1.7.1
pathe: 1.1.2 pathe: 1.1.2
postcss-import@15.1.0(postcss@8.4.45):
dependencies:
postcss: 8.4.45
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
postcss-js@4.0.1(postcss@8.4.45):
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.45
postcss-load-config@4.0.2(postcss@8.4.45):
dependencies:
lilconfig: 3.1.2
yaml: 2.5.1
optionalDependencies:
postcss: 8.4.45
postcss-nested@6.2.0(postcss@8.4.45):
dependencies:
postcss: 8.4.45
postcss-selector-parser: 6.1.2
postcss-selector-parser@6.1.2: postcss-selector-parser@6.1.2:
dependencies: dependencies:
cssesc: 3.0.0 cssesc: 3.0.0
util-deprecate: 1.0.2 util-deprecate: 1.0.2
postcss-value-parser@4.2.0: {}
postcss@8.4.45: postcss@8.4.45:
dependencies: dependencies:
nanoid: 3.3.7 nanoid: 3.3.7
...@@ -7927,6 +8489,10 @@ snapshots: ...@@ -7927,6 +8489,10 @@ snapshots:
punycode@2.3.1: {} punycode@2.3.1: {}
qs@6.13.0:
dependencies:
side-channel: 1.0.6
querystringify@2.2.0: {} querystringify@2.2.0: {}
queue-microtask@1.2.3: {} queue-microtask@1.2.3: {}
...@@ -7935,14 +8501,22 @@ snapshots: ...@@ -7935,14 +8501,22 @@ snapshots:
react-is@18.3.1: {} react-is@18.3.1: {}
read-cache@1.0.0:
dependencies:
pify: 2.3.0
readdirp@3.6.0: readdirp@3.6.0:
dependencies: dependencies:
picomatch: 2.3.1 picomatch: 2.3.1
regenerator-runtime@0.14.1: {}
require-directory@2.1.1: {} require-directory@2.1.1: {}
requires-port@1.0.0: {} requires-port@1.0.0: {}
resize-observer-polyfill@1.5.1: {}
resolve-cwd@3.0.0: resolve-cwd@3.0.0:
dependencies: dependencies:
resolve-from: 5.0.0 resolve-from: 5.0.0
...@@ -8032,6 +8606,12 @@ snapshots: ...@@ -8032,6 +8606,12 @@ snapshots:
screenfull@6.0.2: {} screenfull@6.0.2: {}
scroll-into-view-if-needed@2.2.31:
dependencies:
compute-scroll-into-view: 1.0.20
scule@1.3.0: {}
select@1.1.2: {} select@1.1.2: {}
semver@6.3.1: {} semver@6.3.1: {}
...@@ -8042,12 +8622,30 @@ snapshots: ...@@ -8042,12 +8622,30 @@ snapshots:
semver@7.6.3: {} semver@7.6.3: {}
set-function-length@1.2.2:
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
shallow-equal@1.2.1: {}
shebang-command@2.0.0: shebang-command@2.0.0:
dependencies: dependencies:
shebang-regex: 3.0.0 shebang-regex: 3.0.0
shebang-regex@3.0.0: {} shebang-regex@3.0.0: {}
side-channel@1.0.6:
dependencies:
call-bind: 1.0.7
es-errors: 1.3.0
get-intrinsic: 1.2.4
object-inspect: 1.13.2
siginfo@2.0.0: {} siginfo@2.0.0: {}
signal-exit@3.0.7: {} signal-exit@3.0.7: {}
...@@ -8126,10 +8724,24 @@ snapshots: ...@@ -8126,10 +8724,24 @@ snapshots:
dependencies: dependencies:
acorn: 8.12.1 acorn: 8.12.1
strip-literal@2.1.0:
dependencies:
js-tokens: 9.0.0
style-mod@4.1.2: {} style-mod@4.1.2: {}
stylis@4.3.4: {} stylis@4.3.4: {}
sucrase@3.35.0:
dependencies:
'@jridgewell/gen-mapping': 0.3.5
commander: 4.1.1
glob: 10.4.5
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.6
ts-interface-checker: 0.1.13
superjson@2.2.1: superjson@2.2.1:
dependencies: dependencies:
copy-anything: 3.0.5 copy-anything: 3.0.5
...@@ -8162,6 +8774,33 @@ snapshots: ...@@ -8162,6 +8774,33 @@ snapshots:
'@pkgr/core': 0.1.1 '@pkgr/core': 0.1.1
tslib: 2.7.0 tslib: 2.7.0
tailwindcss@3.4.11:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.6.0
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.2
glob-parent: 6.0.2
is-glob: 4.0.3
jiti: 1.21.6
lilconfig: 2.1.0
micromatch: 4.0.8
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.1.0
postcss: 8.4.45
postcss-import: 15.1.0(postcss@8.4.45)
postcss-js: 4.0.1(postcss@8.4.45)
postcss-load-config: 4.0.2(postcss@8.4.45)
postcss-nested: 6.2.0(postcss@8.4.45)
postcss-selector-parser: 6.1.2
resolve: 1.22.8
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
terminal-link@2.1.1: terminal-link@2.1.1:
dependencies: dependencies:
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
...@@ -8175,8 +8814,18 @@ snapshots: ...@@ -8175,8 +8814,18 @@ snapshots:
text-table@0.2.0: {} text-table@0.2.0: {}
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
thenify@3.3.1:
dependencies:
any-promise: 1.3.0
throat@6.0.2: {} throat@6.0.2: {}
throttle-debounce@5.0.2: {}
tiny-emitter@2.1.0: {} tiny-emitter@2.1.0: {}
tinybench@2.9.0: {} tinybench@2.9.0: {}
...@@ -8214,6 +8863,8 @@ snapshots: ...@@ -8214,6 +8863,8 @@ snapshots:
ts-dedent@2.2.0: {} ts-dedent@2.2.0: {}
ts-interface-checker@0.1.13: {}
tslib@1.14.1: {} tslib@1.14.1: {}
tslib@2.3.0: {} tslib@2.3.0: {}
...@@ -8251,6 +8902,25 @@ snapshots: ...@@ -8251,6 +8902,25 @@ snapshots:
undici-types@5.26.5: {} undici-types@5.26.5: {}
unimport@3.12.0(rollup@4.21.3):
dependencies:
'@rollup/pluginutils': 5.1.0(rollup@4.21.3)
acorn: 8.12.1
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
fast-glob: 3.3.2
local-pkg: 0.5.0
magic-string: 0.30.11
mlly: 1.7.1
pathe: 1.1.2
pkg-types: 1.2.0
scule: 1.3.0
strip-literal: 2.1.0
unplugin: 1.14.1
transitivePeerDependencies:
- rollup
- webpack-sources
unist-util-stringify-position@3.0.3: unist-util-stringify-position@3.0.3:
dependencies: dependencies:
'@types/unist': 2.0.11 '@types/unist': 2.0.11
...@@ -8261,6 +8931,47 @@ snapshots: ...@@ -8261,6 +8931,47 @@ snapshots:
universalify@2.0.1: {} universalify@2.0.1: {}
unplugin-auto-import@0.18.3(@vueuse/core@11.0.3(vue@3.5.4(typescript@5.6.2)))(rollup@4.21.3):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0(rollup@4.21.3)
fast-glob: 3.3.2
local-pkg: 0.5.0
magic-string: 0.30.11
minimatch: 9.0.5
unimport: 3.12.0(rollup@4.21.3)
unplugin: 1.14.1
optionalDependencies:
'@vueuse/core': 11.0.3(vue@3.5.4(typescript@5.6.2))
transitivePeerDependencies:
- rollup
- webpack-sources
unplugin-vue-components@0.27.4(@babel/parser@7.25.6)(rollup@4.21.3)(vue@3.5.4(typescript@5.6.2)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0(rollup@4.21.3)
chokidar: 3.6.0
debug: 4.3.7
fast-glob: 3.3.2
local-pkg: 0.5.0
magic-string: 0.30.11
minimatch: 9.0.5
mlly: 1.7.1
unplugin: 1.14.1
vue: 3.5.4(typescript@5.6.2)
optionalDependencies:
'@babel/parser': 7.25.6
transitivePeerDependencies:
- rollup
- supports-color
- webpack-sources
unplugin@1.14.1:
dependencies:
acorn: 8.12.1
webpack-virtual-modules: 0.6.2
update-browserslist-db@1.1.0(browserslist@4.23.3): update-browserslist-db@1.1.0(browserslist@4.23.3):
dependencies: dependencies:
browserslist: 4.23.3 browserslist: 4.23.3
...@@ -8507,6 +9218,11 @@ snapshots: ...@@ -8507,6 +9218,11 @@ snapshots:
semver: 7.6.3 semver: 7.6.3
typescript: 5.6.2 typescript: 5.6.2
vue-types@3.0.2(vue@3.5.4(typescript@5.6.2)):
dependencies:
is-plain-object: 3.0.1
vue: 3.5.4(typescript@5.6.2)
vue@3.5.4(typescript@5.6.2): vue@3.5.4(typescript@5.6.2):
dependencies: dependencies:
'@vue/compiler-dom': 3.5.4 '@vue/compiler-dom': 3.5.4
...@@ -8535,6 +9251,10 @@ snapshots: ...@@ -8535,6 +9251,10 @@ snapshots:
dependencies: dependencies:
makeerror: 1.0.12 makeerror: 1.0.12
warning@4.0.3:
dependencies:
loose-envify: 1.4.0
web-worker@1.3.0: {} web-worker@1.3.0: {}
webidl-conversions@5.0.0: {} webidl-conversions@5.0.0: {}
...@@ -8543,6 +9263,8 @@ snapshots: ...@@ -8543,6 +9263,8 @@ snapshots:
webidl-conversions@7.0.0: {} webidl-conversions@7.0.0: {}
webpack-virtual-modules@0.6.2: {}
whatwg-encoding@1.0.5: whatwg-encoding@1.0.5:
dependencies: dependencies:
iconv-lite: 0.4.24 iconv-lite: 0.4.24
...@@ -8619,6 +9341,8 @@ snapshots: ...@@ -8619,6 +9341,8 @@ snapshots:
yallist@4.0.0: {} yallist@4.0.0: {}
yaml@2.5.1: {}
yargs-parser@20.2.9: {} yargs-parser@20.2.9: {}
yargs@16.2.0: yargs@16.2.0:
......
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
<template> <template>
<router-view /> <router-view />
</template> </template>
<script setup lang="ts">
import { useFavicon, useTitle } from "@vueuse/core";
import { getConfigInfo } from '@/utils/api'
const title = useTitle();
getConfigInfo("PRODUCT-NAME").then(res => {
title.value = res;
});
const icon = useFavicon();
getConfigInfo("ICON").then(res => {
icon.value = "data:image/x-icon;base64," + res;
});
const logoImage = ref<string>("");
getConfigInfo("LOGO").then(res => {
logoImage.value = "data:image/jpg;base64," + res;
});
provide("logoImage", logoImage);
</script>
<style>
@tailwind base;
@tailwind components;
@tailwind utilities;
</style>
\ No newline at end of file
...@@ -80,15 +80,15 @@ interface ResetCurrentUserPasswordRequest { ...@@ -80,15 +80,15 @@ interface ResetCurrentUserPasswordRequest {
/** /**
* 验证码 * 验证码
*/ */
code: string password: string
/** /**
*密码 *密码
*/ */
password: string new_password: string
/** /**
* 确认密码 * 确认密码
*/ */
re_password: string repeat_new_password: string
} }
interface ResetPasswordRequest { interface ResetPasswordRequest {
......
<template> <template>
<div class="login-form-container"> <div class="login-form-container">
<div class="login-title"> <div class="text-[28px] text-center mb-8">
<div class="logo text-center"> {{ subTitle }}
<LogoFull height="45px" />
</div>
<div class="sub-title text-center" v-if="subTitle">
<el-text type="info">{{ subTitle }}</el-text>
</div>
</div> </div>
<el-card class="login-card"> <el-card class="login-card">
<slot></slot> <slot></slot>
...@@ -18,18 +13,11 @@ defineOptions({ name: 'LoginContainer' }) ...@@ -18,18 +13,11 @@ defineOptions({ name: 'LoginContainer' })
defineProps({ defineProps({
title: String, title: String,
subTitle: String subTitle: String
}) });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.login-form-container { .login-form-container {
width: 480px; width: 480px;
.login-title {
margin-bottom: 32px;
.sub-title {
font-size: 16px;
}
}
.login-card { .login-card {
border-radius: 8px; border-radius: 8px;
padding: 18px; padding: 18px;
......
<template> <template>
<div class="login-warp flex-center"> <div class="login-warp flex-center">
<div class="login-container w-full h-full"> <div class="login-container w-full h-full">
<el-row class="container w-full h-full"> <el-row class="w-full h-full">
<el-col :xs="0" :sm="0" :md="10" :lg="10" :xl="10" class="left-container"> <el-col :xs="0" :sm="0" :md="10" :lg="10" :xl="14" class="left-container">
<div class="login-image" :style="{ backgroundImage: `url(${loginImage})` }"></div> <div class="login-image"><img class="w-full h-full block" src="@/assets/login.png" alt="" /></div>
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="14" :lg="14" :xl="14" class="right-container flex-center"> <el-col :xs="24" :sm="24" :md="14" :lg="14" :xl="10" class="right-container flex-center">
<slot></slot> <slot></slot>
</el-col> </el-col>
</el-row> </el-row>
...@@ -13,42 +13,13 @@ ...@@ -13,42 +13,13 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue'
import { getThemeImg } from '@/utils/theme'
import useStore from '@/stores'
import { request } from '@/request'
defineOptions({ name: 'LoginLayout' }) defineOptions({ name: 'LoginLayout' })
const { user } = useStore()
const fileURL = computed(() => {
if (user.themeInfo?.loginImage) {
if (typeof user.themeInfo?.loginImage === 'string') {
return user.themeInfo?.loginImage
} else {
return URL.createObjectURL(user.themeInfo?.loginImage)
}
} else {
return ''
}
})
const loginImage = computed(() => {
if (user.themeInfo?.loginImage) {
return `${fileURL.value}`
} else {
return new URL(`../../assets/theme/${getThemeImg(user.themeInfo?.theme)}.jpg`, import.meta.url)
.href
}
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.login-warp { .login-warp {
height: 100vh; height: 100vh;
.login-image { .login-image {
background-repeat: no-repeat;
background-position: center;
background-size: cover;
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
......
<template> <template>
<el-dialog v-model="resetPasswordDialog" :title="$t('layout.topbar.avatar.resetPassword')"> <el-dialog v-model="resetPasswordDialog" title="修改密码">
<el-form <el-form ref="resetPasswordFormRef" :model="resetPasswordForm" :rules="rules">
class="reset-password-form mb-24" <el-form-item prop="password">
ref="resetPasswordFormRef"
:model="resetPasswordForm"
:rules="rules"
>
<p class="mb-8 lighter">{{ $t("layout.topbar.avatar.dialog.newPassword") }}</p>
<el-form-item prop="password" style="margin-bottom: 8px">
<el-input <el-input
type="password" type="password"
class="input-item" class="input-item"
v-model="resetPasswordForm.password" v-model="resetPasswordForm.password"
:placeholder="$t('layout.topbar.avatar.dialog.enterPassword')" placeholder="请输入密码"
show-password show-password
> />
</el-input>
</el-form-item> </el-form-item>
<el-form-item prop="re_password"> <el-form-item prop="new_password">
<el-input <el-input
type="password" type="password"
class="input-item" class="input-item"
v-model="resetPasswordForm.re_password" v-model="resetPasswordForm.new_password"
:placeholder="$t('layout.topbar.avatar.dialog.confirmPassword')" placeholder="请输入密码"
show-password show-password
> >
</el-input> </el-input>
</el-form-item> </el-form-item>
<p class="mb-8 lighter">{{ $t("layout.topbar.avatar.dialog.useEmail") }}</p> <el-form-item prop="repeat_new_password">
<el-form-item style="margin-bottom: 8px">
<el-input <el-input
type="password"
class="input-item" class="input-item"
:disabled="true" v-model="resetPasswordForm.repeat_new_password"
v-bind:modelValue="user.userInfo?.email" placeholder="请输入确认密码"
:placeholder="$t('layout.topbar.avatar.dialog.enterEmail')" show-password
> >
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="code">
<div class="flex-between w-full">
<el-input class="code-input" v-model="resetPasswordForm.code" :placeholder="$t('layout.topbar.avatar.dialog.enterVerificationCode')">
</el-input>
<el-button
:disabled="isDisabled"
class="send-email-button ml-8"
@click="sendEmail"
:loading="loading"
>
{{ isDisabled ? $t('layout.topbar.avatar.dialog.resend', { time }) : $t('layout.topbar.avatar.dialog.getVerificationCode') }}
</el-button>
</div>
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="resetPasswordDialog = false">{{ $t('layout.topbar.avatar.dialog.cancel') }}</el-button> <el-button @click="resetPasswordDialog = false">取消</el-button>
<el-button type="primary" @click="resetPassword"> {{ $t('layout.topbar.avatar.dialog.save') }} </el-button> <el-button type="primary" @click="resetPassword">保存</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'
import type { ResetCurrentUserPasswordRequest } from '@/api/type/user' import type { ResetCurrentUserPasswordRequest } from '@/api/type/user'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import { MsgSuccess } from '@/utils/message' import { editPassword } from "@/utils/api";
import UserApi from '@/api/user'
import useStore from '@/stores'
import { useRouter } from 'vue-router'
import { t } from '@/locales'
const router = useRouter() const router = useRouter()
const { user } = useStore()
const resetPasswordDialog = ref<boolean>(false) const resetPasswordDialog = ref<boolean>(false)
const resetPasswordForm = ref<ResetCurrentUserPasswordRequest>({ const resetPasswordForm = ref<ResetCurrentUserPasswordRequest>({
code: '',
password: '', password: '',
re_password: '' new_password: '',
repeat_new_password: ''
}) })
const resetPasswordFormRef = ref<FormInstance>() const resetPasswordFormRef = ref<FormInstance>()
const loading = ref<boolean>(false)
const isDisabled = ref<boolean>(false)
const time = ref<number>(60)
const rules = ref<FormRules<ResetCurrentUserPasswordRequest>>({ const rules = ref<FormRules<ResetCurrentUserPasswordRequest>>({
// @ts-ignore password: [{ required: true, message: "请输入旧密码", trigger: 'blur' }],
code: [{ required: true, message: t('layout.topbar.avatar.dialog.enterVerificationCode'), trigger: 'blur' }], new_password: [
password: [
{ {
required: true, required: true,
message: t('layout.topbar.avatar.dialog.enterPassword'), message: '请输入新密码',
trigger: 'blur' trigger: 'blur'
}, },
{ {
min: 6, min: 6,
max: 20, max: 20,
message: t('layout.topbar.avatar.dialog.passwordLength'), message: '长度在6~20',
trigger: 'blur' trigger: 'blur'
} }
], ],
re_password: [ repeat_new_password: [
{ {
required: true, required: true,
message: t('layout.topbar.avatar.dialog.confirmPassword'), message: '请确认新密码',
trigger: 'blur' trigger: 'blur'
}, },
{ {
min: 6, min: 6,
max: 20, max: 20,
message: t('layout.topbar.avatar.dialog.passwordLength'), message: '长度在6~20',
trigger: 'blur' trigger: 'blur'
}, },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (resetPasswordForm.value.password != resetPasswordForm.value.re_password) { if (resetPasswordForm.value.new_password != resetPasswordForm.value.repeat_new_password) {
callback(new Error(t('layout.topbar.avatar.dialog.passwordMismatch'))) callback(new Error('两次密码不一致'))
} else { } else {
callback() callback()
} }
...@@ -126,49 +95,24 @@ const rules = ref<FormRules<ResetCurrentUserPasswordRequest>>({ ...@@ -126,49 +95,24 @@ const rules = ref<FormRules<ResetCurrentUserPasswordRequest>>({
} }
] ]
}) })
/**
* 发送验证码
*/
const sendEmail = () => {
UserApi.sendEmailToCurrent(loading).then(() => {
MsgSuccess(t('verificationCodeSentSuccess'))
isDisabled.value = true
handleTimeChange()
})
}
const handleTimeChange = () => {
if (time.value <= 0) {
isDisabled.value = false
time.value = 60
} else {
setTimeout(() => {
time.value--
handleTimeChange()
}, 1000)
}
}
const open = () => { const open = () => {
resetPasswordForm.value = { resetPasswordForm.value = {
code: '',
password: '', password: '',
re_password: '' new_password: '',
repeat_new_password: ''
} }
resetPasswordDialog.value = true resetPasswordDialog.value = true
resetPasswordFormRef.value?.resetFields() resetPasswordFormRef.value?.resetFields()
} }
const resetPassword = () => { const resetPassword = () => {
resetPasswordFormRef.value resetPasswordFormRef.value?.validate().then(() => {
?.validate() editPassword(resetPasswordForm.value).then(res => {
.then(() => { if (res) {
return UserApi.resetCurrentUserPassword(resetPasswordForm.value) sessionStorage.clear();
}) router.push("/login")
.then(() => { }
return user.logout()
}) })
.then(() => {
router.push({ name: 'login' })
}) })
} }
const close = () => { const close = () => {
...@@ -176,7 +120,4 @@ const close = () => { ...@@ -176,7 +120,4 @@ const close = () => {
} }
defineExpose({ open, close }) defineExpose({ open, close })
</script> </script>
<style lang="scss" scoped></style>
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<AppAvatar> <AppAvatar>
<img src="@/assets/user-icon.svg" style="width: 54%" alt=""/> <img src="@/assets/user-icon.svg" style="width: 54%" alt=""/>
</AppAvatar> </AppAvatar>
<span class="ml-8">{{ user.userInfo?.username }}</span> <span class="ml-4">{{ user.name }}</span>
<el-icon class="el-icon--right"> <el-icon class="el-icon--right">
<CaretBottom/> <CaretBottom/>
</el-icon> </el-icon>
...@@ -12,88 +12,32 @@ ...@@ -12,88 +12,32 @@
<template #dropdown> <template #dropdown>
<el-dropdown-menu class="avatar-dropdown"> <el-dropdown-menu class="avatar-dropdown">
<div class="userInfo"> <el-dropdown-item @click="openResetPassword">
<p class="bold mb-4" style="font-size: 14px">{{ user.userInfo?.username }}</p> 重置密码
<p>
<el-text type="info">
{{ user.userInfo?.email }}
</el-text>
</p>
</div>
<el-dropdown-item class="border-t p-8" @click="openResetPassword">
{{ $t('layout.topbar.avatar.resetPassword') }}
</el-dropdown-item>
<div v-hasPermission="new ComplexPermission([], ['x-pack'], 'OR')">
<el-dropdown-item class="border-t p-8" @click="openAPIKeyDialog">
{{ $t('layout.topbar.avatar.apiKey') }}
</el-dropdown-item>
</div>
<el-dropdown-item class="border-t" @click="openAbout">
{{ $t('layout.topbar.avatar.about') }}
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item class="border-t" @click="logout"> <el-dropdown-item class="border-t" @click="logout">
{{ $t('layout.topbar.avatar.logout') }} 退出
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
<ResetPassword ref="resetPasswordRef"></ResetPassword> <ResetPassword ref="resetPasswordRef"></ResetPassword>
<AboutDialog ref="AboutDialogRef"></AboutDialog>
<APIKeyDialog :user-id="user.userInfo?.id" ref="APIKeyDialogRef"/>
<UserPwdDialog ref="UserPwdDialogRef"/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {ref, onMounted} from 'vue'
import useStore from '@/stores'
import {useRouter} from 'vue-router'
import ResetPassword from './ResetPassword.vue' import ResetPassword from './ResetPassword.vue'
import AboutDialog from './AboutDialog.vue' import { layout } from "@/utils/api";
import UserPwdDialog from '@/views/user-manage/component/UserPwdDialog.vue'
import APIKeyDialog from './APIKeyDialog.vue'
import {ComplexPermission} from '@/utils/permission/type'
const {user} = useStore()
const router = useRouter() const router = useRouter()
const UserPwdDialogRef = ref()
const AboutDialogRef = ref()
const APIKeyDialogRef = ref()
const resetPasswordRef = ref<InstanceType<typeof ResetPassword>>() const resetPasswordRef = ref<InstanceType<typeof ResetPassword>>()
const openAbout = () => {
AboutDialogRef.value?.open()
}
function openAPIKeyDialog() {
APIKeyDialogRef.value.open()
}
const openResetPassword = () => { const openResetPassword = () => {
resetPasswordRef.value?.open() resetPasswordRef.value?.open()
} }
const logout = () => { const logout = () => {
user.logout().then(() => { layout().then(() => {
router.push({name: 'login'}) router.push({name: 'login'})
}) })
} }
const user = JSON.parse(sessionStorage.getItem("userInfo"));
onMounted(() => {
if (user.userInfo?.is_edit_password) {
UserPwdDialogRef.value.open(user.userInfo)
}
})
</script> </script>
<style lang="scss" scoped>
.avatar-dropdown {
min-width: 210px;
.userInfo {
padding: 12px 11px;
}
:deep(.el-dropdown-menu__item) {
padding: 12px 11px;
}
}
</style>
...@@ -3,47 +3,11 @@ ...@@ -3,47 +3,11 @@
<div class="top-bar-container border-b flex-between"> <div class="top-bar-container border-b flex-between">
<div class="flex-center h-full"> <div class="flex-center h-full">
<div class="app-title-container cursor" @click="router.push('/')"> <div class="app-title-container cursor" @click="router.push('/')">
<div class="logo flex-center"> <img :src="logo" class="w-[180px] mt-[8px]" alt="" />
<LogoFull />
</div>
</div> </div>
<TopMenu></TopMenu> <TopMenu></TopMenu>
</div> </div>
<div class="flex-center avatar"> <div class="flex-center avatar">
<el-button
v-if="!user.isEnterprise()"
link
type="primary"
@click="toUrl('https://maxkb.cn/pricing.html')"
class="mr-8"
>
<AppIcon iconName="app-pricing" class="mr-8" style="font-size: 20px"></AppIcon>
购买专业版
</el-button>
<el-tooltip effect="dark" :content="$t('layout.topbar.github')" placement="top">
<AppIcon
iconName="app-github"
class="cursor color-secondary mr-8 ml-8"
style="font-size: 20px"
@click="toUrl('https://github.com/1Panel-dev/MaxKB')"
></AppIcon>
</el-tooltip>
<el-tooltip effect="dark" :content="$t('layout.topbar.wiki')" placement="top">
<AppIcon
iconName="app-reading"
class="cursor color-secondary mr-8 ml-8"
style="font-size: 20px"
@click="toUrl('https://maxkb.cn/docs/')"
></AppIcon>
</el-tooltip>
<el-tooltip effect="dark" :content="$t('layout.topbar.forum')" placement="top">
<AppIcon
iconName="app-help"
class="cursor color-secondary mr-16 ml-8"
style="font-size: 20px"
@click="toUrl('https://bbs.fit2cloud.com/c/mk/11')"
></AppIcon>
</el-tooltip>
<el-dropdown v-if="false" trigger="click" type="primary"> <el-dropdown v-if="false" trigger="click" type="primary">
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
...@@ -71,22 +35,19 @@ ...@@ -71,22 +35,19 @@
import TopMenu from './top-menu/index.vue' import TopMenu from './top-menu/index.vue'
import Avatar from './avatar/index.vue' import Avatar from './avatar/index.vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { langList } from '@/locales/index' import { langList } from '@/locales'
import { useLocale } from '@/locales/useLocale' import { useLocale } from '@/locales/useLocale'
import useStore from '@/stores'
const { user } = useStore()
const router = useRouter() const router = useRouter()
const { changeLocale } = useLocale() const { changeLocale } = useLocale()
const changeLang = (lang: string) => { const changeLang = (lang: string) => {
changeLocale(lang) changeLocale(lang)
} }
function toUrl(url: string) {
window.open(url, '_blank') const logo: string = inject("logoImage");
}
</script> </script>
<style lang="scss"> <style scoped lang="scss">
.top-bar-container { .top-bar-container {
height: var(--app-header-height); height: var(--app-header-height);
box-sizing: border-box; box-sizing: border-box;
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
<div class="top-menu-container flex align-center h-full"> <div class="top-menu-container flex align-center h-full">
<MenuItem <MenuItem
:menu="menu" :menu="menu"
v-hasPermission="menu.meta?.permission"
v-for="(menu, index) in topMenuList" v-for="(menu, index) in topMenuList"
:key="index" :key="index"
> >
...@@ -10,14 +9,10 @@ ...@@ -10,14 +9,10 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue' import { getChildRouteListByPathAndName } from '@/router'
import { getChildRouteListByPathAndName } from '@/router/index'
import MenuItem from './MenuItem.vue' import MenuItem from './MenuItem.vue'
const topMenuList = computed(() => { const topMenuList = computed(() => {
return getChildRouteListByPathAndName('/', 'home') return getChildRouteListByPathAndName('/', 'home')
}) });
</script> </script>
\ No newline at end of file
<style lang="scss" scoped>
</style>
...@@ -58,5 +58,4 @@ app.use(ElementPlus, { ...@@ -58,5 +58,4 @@ app.use(ElementPlus, {
app.use(router) app.use(router)
app.use(i18n) app.use(i18n)
app.use(Components) app.use(Components)
app.mount('#app') app.mount('#app');
export { app } \ No newline at end of file
...@@ -14,6 +14,7 @@ const router = createRouter({ ...@@ -14,6 +14,7 @@ const router = createRouter({
}) })
// 路由前置拦截器 // 路由前置拦截器
/*
router.beforeEach( router.beforeEach(
async (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { async (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
if (to.name === '404') { if (to.name === '404') {
...@@ -41,6 +42,7 @@ router.beforeEach( ...@@ -41,6 +42,7 @@ router.beforeEach(
next() next()
} }
) )
*/
export const getChildRouteListByPathAndName = (path: any, name?: RouteRecordName | any) => { export const getChildRouteListByPathAndName = (path: any, name?: RouteRecordName | any) => {
return getChildRouteList(routes, path, name) return getChildRouteList(routes, path, name)
......
import Layout from '@/layout/layout-template/DetailLayout.vue' import Layout from '@/layout/layout-template/DetailLayout.vue'
const applicationRouter = { const applicationRouter = {
path: '/application', path: '/',
name: 'application', name: 'app',
meta: { title: '应用', permission: 'APPLICATION:READ' }, meta: { title: '应用' },
redirect: '/application', redirect: '/application',
component: () => import('@/layout/layout-template/AppLayout.vue'), component: () => import('@/layout/layout-template/AppLayout.vue'),
children: [ children: [
......
import type { RouteRecordRaw } from 'vue-router' import type { RouteRecordRaw } from 'vue-router';
import { Role } from '@/utils/permission/type'
const modules: any = import.meta.glob('./modules/*.ts', { eager: true }) const modules: any = import.meta.glob('./modules/*.ts', { eager: true })
const rolesRoutes: RouteRecordRaw[] = [...Object.keys(modules).map((key) => modules[key].default)] const rolesRoutes: RouteRecordRaw[] = [...Object.keys(modules).map((key) => modules[key].default)];
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/', path: '/',
name: 'home', name: 'home',
redirect: '/application', redirect: '/application',
children: [...rolesRoutes] children: [rolesRoutes[0]]
}, },
// 高级编排 // 高级编排
{ {
path: '/application/:id/workflow', path: '/application/:id/workflow',
...@@ -32,16 +29,6 @@ export const routes: Array<RouteRecordRaw> = [ ...@@ -32,16 +29,6 @@ export const routes: Array<RouteRecordRaw> = [
component: () => import('@/views/login/index.vue') component: () => import('@/views/login/index.vue')
}, },
{ {
path: '/register',
name: 'register',
component: () => import('@/views/login/register/index.vue')
},
{
path: '/forgot_password',
name: 'forgot_password',
component: () => import('@/views/login/forgot-password/index.vue')
},
{
path: '/reset_password/:code/:email', path: '/reset_password/:code/:email',
name: 'reset_password', name: 'reset_password',
component: () => import('@/views/login/reset-password/index.vue') component: () => import('@/views/login/reset-password/index.vue')
......
...@@ -117,8 +117,8 @@ const useUserStore = defineStore({ ...@@ -117,8 +117,8 @@ const useUserStore = defineStore({
}) })
}, },
async login(username: string, password: string) { async login(email: string, password: string) {
return UserApi.login({ username, password }).then((ok) => { return UserApi.login({ email, password }).then((ok) => {
this.token = ok.data this.token = ok.data
localStorage.setItem('token', ok.data) localStorage.setItem('token', ok.data)
return this.profile() return this.profile()
......
import {request, api} from "@/utils/request";
import {message, Modal} from "ant-design-vue";
import qs from "qs";
import {useRoute} from "vue-router";
//登录
export const loginPort = function (data) {
return new Promise((resolve) => {
request.post("/login/", data).then((res) => {
if (res.data) {
sessionStorage.setItem("token", res.data);
message.success("登录成功");
resolve(true);
} else {
message.error(res.message);
resolve(false);
}
})
})
}
//退出
export const layout = function () {
return request.get("/logout/")
}
//TODO 标签管理相关
export const getLabelList = function (params) {
return request.get("/tags/", params)
}
//TODO 知识库列表相关
//1.知识库列表查询接口
export const getDataSetList = function (search, pagination) {
const json = qs.stringify({
page: pagination.current,
limit: pagination.pageSize,
keyword: search.keyword,
tag_ids: search.tag_ids
}, {arrayFormat: 'repeat'})
return new Promise((resolve) => {
request.get("/datasets/?" + json).then((res) => {
resolve(res)
})
})
}
//知识库删除
export const delDatasets = function (id) {
return new Promise((resolve) => {
Modal.confirm({
title: '提示',
content: '确认删除当前知识库',
onOk() {
request.delete("/datasets/" + id).then((res) => {
if (res.status_code === 200) {
message.success(res.message);
} else {
message.error(res.message);
}
resolve(res.data)
}).catch(() => {
resolve(false)
})
},
onCancel() {
resolve(false);
}
});
})
}
//5.知识库创建文档上传接口
export const upload = function (file, type = "datasets") {
return request.postForm("/files/upload", {file}, {source: type})
}
//知识库新建
export const addDatasets = function (data) {
return request.post("/datasets/init", data)
}
//空白知识库创建
export const addEmptyDatasets = function (name) {
return request.post("/datasets/", {name})
}
//文档分页接口查询
export const getDocumentList = function (id, param) {
return request.get("/datasets/" + id + "/documents", param)
}
//文档分段接口
export const getSegments = function (id, docId, params) {
if (!docId) {
return Promise.reject()
}
return request.get(`/datasets/${id}/documents/${docId}/segments`, params)
}
//文档详情查看接口
export const getDocumentInfo = function (id, docId) {
return request.get(`/datasets/${id}/documents/${docId}?metadata=without`)
}
//文档切换状态
export const switchStatus = function (id, docId, action) {
return new Promise(resolve => {
request.patch(`/datasets/${id}/documents/${docId}/status/${action}`).then(res => {
if (res.status_code === 200) {
message.success(res.message);
} else {
message.error(res.message);
}
resolve(res.data)
})
})
}
//修改文件名称
export const editFileName = function (id, docId, name) {
return new Promise(resolve => {
request.post(`/datasets/${id}/documents/${docId}/rename`, {name}).then(res => {
if (res.name) {
message.success("重命名成功")
}
resolve(res)
})
})
}
//删除知识库文件
export const delDocument = function (id, docId) {
return new Promise((resolve) => {
Modal.confirm({
title: '提示',
content: '确认删除当前文档',
onOk() {
request.delete("/datasets/" + id + "/documents/" + docId).then(() => {
resolve(true)
})
},
onCancel() {
resolve(false);
}
});
})
}
//知识库内上传文档接口
export const docUpload = function (id, data) {
return request.post(`/datasets/${id}/documents`, data)
}
//3.知识库编辑接口
export const editDataSets = function (id, data) {
return new Promise(resolve => {
request.patch("/datasets/" + id, data).then(res => {
if (res.message) {
message.error(res.message);
resolve(false);
} else {
message.success("成功")
resolve(true);
}
})
})
}
//文本分段与清洗自定义策略查询接口
export const getCreateDocumentInfo = function (id) {
return request.get("/datasets/process-rule", {document_id: id})
}
//查询文档状态接口
export const getFileStatus = function (id, batch) {
return request.get(`/datasets/${id}/batch/${batch}/indexing-status`)
}
//应用列表查询
export const getAppList = function (params) {
const json = qs.stringify(params, {arrayFormat: 'repeat'});
return request.get("/apps/?" + json)
}
//应用删除
export const delApp = function (id) {
return new Promise((resolve) => {
Modal.confirm({
title: '提示',
content: '确认删除当前应用',
onOk() {
request.delete("/apps/" + id).then((res) => {
message.success("删除成功")
resolve(true)
}).catch(() => {
resolve(false)
})
},
onCancel() {
resolve(false);
}
});
})
}
//创建应用
export const addApp = function (data) {
return new Promise((resolve) => {
request.post("/apps/", data).then((res) => {
if (res.status_code !== '200') {
message.error(res.message);
resolve(false);
} else {
message.success(res.message)
resolve({
bool: true,
id: res.data.id
});
}
})
})
}
//应用编辑
export const editApp = function (id, data) {
return new Promise((resolve) => {
request.put("/apps/" + id, data).then((res) => {
if (res.status_code !== '200') {
message.error(res.message);
resolve(false);
} else {
message.success(res.message)
resolve(true);
}
})
})
}
//应用详情
export const getAppsInfo = function (id) {
return request.get("/apps/" + id)
}
//查询知识库列表
export const getDatasetsAll = function () {
return request.get("/datasets/", {page: 1, limit: 9999})
}
//查询知识库详情
export const getDatasetsInfo = function (id) {
return request.get("/datasets/" + id)
}
//修改知识库设置
export const editDatasets = function (id, data) {
return new Promise(resolve => {
request.patch("/datasets/" + id, data).then(res => {
message.success("修改成功");
resolve(true)
}).catch((error) => {
message.error(error.message)
resolve(false)
})
})
}
//修改文档状态
export const switchSegments = function (id, docId, status) {
return request.patch(`/datasets/${id}/segments/${docId}/${status}`)
}
//发送消息
export const sendMessage = function (id, data) {
return fetch(`/console/api/apps/${id}/chat-messages`,
{
method: "post",
responseType: "stream",
headers: {
Authorization: "Bearer " + sessionStorage.getItem("token"),
"Content-Type": "application/json",
},
body: JSON.stringify(data),
}
);
}
//应用发布
export const appRelease = function (id, data) {
return request.post(`/apps/${id}/model-config`, data)
}
// 获取聊天应用的接口
export const getChatPort = function () {
const route = useRoute();
return new Promise((resolve) => {
api.requestConfig({
url: "/passport",
headers: {
"X-App-Code": route.params.id,
}
}).then(res => {
sessionStorage.setItem("console-token", res.access_token);
setTimeout(() => {
resolve(undefined);
}, 1000);
})
})
}
//获取聊天信息
export const getSite = function () {
return api.get("/site")
}
//获取聊天配置
export const getParameters = function () {
return api.get("/parameters")
}
//获取聊天列表
export const getConversations = function (pageSize = 100) {
return api.get("/conversations", {pinned: false, limit: pageSize})
}
//聊天接口
export const chatMessage = function (data) {
return fetch(`/api/chat-messages`,
{
method: "post",
responseType: "stream",
headers: {
Authorization: "Bearer " + sessionStorage.getItem("console-token"),
"Content-Type": "application/json",
},
body: JSON.stringify(data),
}
);
}
//文本聊天接口
export const completionMessage = function (data) {
return fetch(`/api/completion-messages`,
{
method: "post",
responseType: "stream",
headers: {
Authorization: "Bearer " + sessionStorage.getItem("console-token"),
"Content-Type": "application/json",
},
body: JSON.stringify(data),
}
);
}
//获取消息
export const getMessages = function (id) {
return api.get("/messages", {conversation_id: id, limit: 100})
}
//发送消息停止
export const stepMessages = function (id) {
return api.post(`/chat-messages/${id}/stop`)
}
//修改名称
export const editName = function (id, name) {
return api.post(`/conversations/${id}/name`, {name})
}
//删除会话
export const delConversations = function (id) {
return api.delete("/conversations/" + id)
}
//系统默认配置信息
export const getDefaultMode = function () {
const url = [
"/workspaces/current/default-model?model_type=text-embedding",
"/workspaces/current/default-model?model_type=rerank",
"/workspaces/current/default-model?model_type=llm",
]
const requestAll = url.map((item) => {
return request.get(item)
})
return new Promise(resolve => {
Promise.all(requestAll).then(res => {
const arr = [];
res.forEach(item => {
arr.push(item.data.model)
})
resolve(arr);
})
})
}
//模型设置-模型列表信息查询
export const getModelType = function () {
const url = [
"/workspaces/current/models/model-types/text-embedding",
"/workspaces/current/models/model-types/rerank",
"/workspaces/current/models/model-types/llm",
];
const requestAll = url.map((item) => {
return request.get(item)
})
return new Promise(resolve => {
Promise.all(requestAll).then(res => {
const arr = [];
res.forEach(item => {
if (item.data[0]?.models) {
arr.push(item.data[0]?.models)
}
})
resolve(arr);
})
})
}
//查询模型列表信息
export const getModelList = function () {
const url = [
"/workspaces/current/model-providers/ollama/models",
"/workspaces/current/model-providers/xinference/models"
];
const requestAll = url.map((item) => {
return request.get(item)
})
return Promise.all(requestAll)
}
//设置系统模型
export const setModel = function (data) {
return new Promise(resolve => {
request.post("/workspaces/current/default-model", data).then(res => {
if (res.message) {
message.error(res.message);
resolve(false);
} else {
message.success("设置成功")
resolve(true);
}
})
})
}
//新增,修改模型
export const addModel = function (type, data) {
return new Promise(resolve => {
request.post(`/workspaces/current/model-providers/${type}/models`, data).then(res => {
if (res.message) {
message.error(res.message);
resolve(false);
} else {
message.success("成功")
resolve(true);
}
})
})
}
//删除模型
export const delModel = function (type, data) {
return new Promise((resolve) => {
Modal.confirm({
title: '提示',
content: '确认删除当前模型?',
onOk() {
request.requestConfig({
url: `/workspaces/current/model-providers/${type}/models`,
data,
method: "delete",
}).then(res => {
console.log(res.result)
resolve(res.result === "success");
}).catch(() => {
resolve(false);
})
},
onCancel() {
resolve(false);
}
});
})
}
//模型查询详情
export const getModelInfo = function (type, param) {
return request.get(`/workspaces/current/model-providers/${type}/models/credentials`, param)
}
//召回测试最近查询
export const getQueries = function (id) {
return request.get(`/datasets/${id}/queries?limit=999&page=1`)
}
//召回测试
export const testing = function (id, data) {
return request.post(`/datasets/${id}/hit-testing`, data)
}
//用户列表
export const getUserList = function (params) {
return request.get("/user/page", params)
}
//新增用户
export const addUser = function (data) {
return new Promise(resolve => {
request.post("/user/", data).then(res => {
if (!res.data) {
message.error(res.message);
resolve(false);
} else {
message.success(res.message);
resolve(true);
}
})
})
}
//删除用户
export const delUser = function (id) {
return new Promise((resolve) => {
Modal.confirm({
title: '提示',
content: '确认删除当前用户',
onOk() {
request.delete("/user/" + id).then((res) => {
console.log(res)
if (res.status_code !== 200) {
message.success(res.message);
resolve(true)
} else {
message.error(res.message);
resolve(false);
}
})
},
onCancel() {
resolve(false);
}
});
})
}
//启用/禁用用户
export const disabledUser = function (id, status) {
return new Promise(resolve => {
request.get(`/user/${id}/${status}`).then(res => {
if (res.status_code === 200) {
message.success(res.message);
resolve(true)
} else {
message.error(res.message);
resolve(false);
}
})
})
}
//修改用户
export const editUser = function (id, data) {
console.log(id)
return new Promise(resolve => {
request.patch(`/user/`, {...data, id}).then(res => {
if (res.status_code === "200") {
message.success(res.message);
resolve(true)
} else {
message.error(res.message);
resolve(false);
}
})
})
}
//获取系统配置
export const getConfig = function () {
return request.get("/system-config/")
}
//添加系统配置
export const setConfig = function (data) {
return new Promise(resolve => {
request.postForm("/system-config/", data).then(res => {
if (res === 200) {
message.success("配置成功")
} else {
message.error("配置失败")
}
resolve(res);
})
})
}
//获取系统配置
export const getConfigInfo = function (type: "LOGO" | "ICON" | "PRODUCT-NAME") {
return new Promise<string>(resolve => {
request.get("/system-config/" + type).then((res) => {
if (type !== "PRODUCT-NAME") {
resolve(res.file_binary);
} else {
resolve(res.name);
}
})
})
}
//获取应用api key
export const getAppKeys = function (id) {
return request.get(`/apps/${id}/api-keys`)
}
//添加api keys
export const addAppkeys = function (id) {
return request.post(`/apps/${id}/api-keys`)
}
//删除api keys
export const delAppkeys = function (id, key) {
return request.delete(`/apps/${id}/api-keys/${key}`)
}
//应用日志查询
export const getChatConversations = function (id, params) {
return request.get(`/apps/${id}/chat-conversations`, params)
}
//应用日志插查询,文本生成
export const getCompletionConversations = function (id, params) {
return request.get(`/apps/${id}/completion-conversations`, params)
}
//标注查询
export const getAnnotations = function (id, params) {
return request.get(`/apps/${id}/annotations`, params)
}
//标注添加
export const addAnnotations = function (id, data) {
return request.post(`/apps/${id}/annotations`, data)
}
//标注删除
export const delAnnotations = function (id, dataId) {
return new Promise(resolve => {
Modal.confirm({
title: '提示',
content: '确认删除当前段落',
onOk() {
request.delete(`/apps/${id}/annotations/${dataId}`).then((res) => {
if (res.status_code === 200) {
message.success(res.message);
} else {
message.error(res.message);
}
resolve(res.data);
}).catch((e) => {
resolve(false)
})
},
onCancel() {
resolve(false);
}
});
})
}
//标注修改
export const editAnnotations = function (id, dataId, data) {
return request.post(`/apps/${id}/annotations/${dataId}`, data)
}
//获取标注设置
export const getAnnotationSetting = function (id) {
return request.get(`/apps/${id}/annotation-setting`)
}
//标注回复初始设置
export const settingAnnotation = function (id, status, data) {
return request.post(`/apps/${id}/annotation-reply/${status}`, data)
}
//查询标注状态是否完成
export const searchAnnotationStatus = function (id, status, jobId) {
return request.get(`/apps/${id}/annotation-reply/${status}/status/${jobId}`)
}
//获取用户信息
export const userInfo = function () {
return request.get("/account/profile")
}
//文档段落删除
export const delDocumentSegments = function (dataSetid, id, segmentsId) {
return new Promise(resolve => {
Modal.confirm({
title: '提示',
content: '确认删除当前段落',
onOk() {
request.delete(`/datasets/${dataSetid}/documents/${id}/segments/${segmentsId}`).then((res) => {
if (res.status_code === 200) {
message.success(res.message);
} else {
message.error(res.message);
}
resolve(res.data);
}).catch((e) => {
resolve(false)
})
},
onCancel() {
resolve(false);
}
});
})
}
//文档段落编辑
export const editDocumentSegments = function (dataSetid, id, segmentsId, data) {
return request.patch(`/datasets/${dataSetid}/documents/${id}/segments/${segmentsId}`, data)
}
//文档段落添加
export const addDocumentSegments = function (dataSetid, id, data) {
return request.post(`/datasets/${dataSetid}/documents/${id}/segment`, data)
}
//文本生成聊天
export const completionMessages = function (id, json) {
return fetch(`/console/api/apps/${id}/completion-messages`, {
method: "post",
responseType: "stream",
headers: {
Authorization: "Bearer " + sessionStorage.getItem("token"),
"Content-Type": "application/json",
},
body: JSON.stringify(json),
})
}
//获取索引文档
export const messagesConversation = function (id, conversation_id) {
return request.get(`/apps/${id}/chat-messages`, {conversation_id})
}
//应用概览汇总
export const getInteractions = function () {
return request.get("/apps/statistics/basic-quantitative-analysis")
}
//应用数量变化
export const appCount = function () {
return request.get("/apps/statistics/app-count")
}
//应用活跃用户数
export const dailyUsers = function () {
return request.get("/apps/statistics/daily-end-users")
}
//全部消息数
export const dailyConversations = function () {
return request.get("/apps/statistics/daily-conversations")
}
//应用平均会花数
export const averageInteractions = function () {
return request.get("/apps/statistics/average-session-interactions")
}
//知识库,统计
export const tableCounts = function () {
return request.get("/apps/statistics/table-counts")
}
//文档解析top5
export const topLongest = function () {
return request.get("/apps/statistics/top-5-longest")
}
//知识库数量
export const datasetsDailyCount = function () {
return request.get("/apps/statistics/datasets-daily-count")
}
//文档数量
export const documentsDailyCount = function () {
return request.get("/apps/statistics/documents-daily-count")
}
//pdf解析时长分布
export const timeStatistics = function () {
return request.get("/apps/statistics//time-statistics")
}
//历史会话
export const messagesList = function (id, conversation_id) {
return request.get(`/apps/${id}/chat-messages?conversation_id=${conversation_id}&limit=30`)
}
//历史会话
export const completionConversationsHistory = function (id, conversation_id) {
return request.get(`/apps/${id}/completion-conversations/${conversation_id}`)
}
//导入文件
export const batchImport = function (id, file) {
return request.postForm(`/apps/${id}/annotations/batch-import`, { file })
}
//聊天,添加对话记录
export const addName = function (id) {
return api.post(`/conversations/${id}/name`, { auto_generate: true })
}
//修改密码
export const editPassword = function (data) {
return request.post("/account/password", data)
}
//文件大小接口
export const fileSize = function () {
return request.get("/files/upload")
}
//文件类型接口
export const fileType = function () {
return request.get("/files/support-type")
}
//文本记录保存
export const saveMessage = function (message_id) {
return new Promise(resolve => {
api.post("/saved-messages/", {message_id}).then(res => {
if (res.status_code === 200) {
message.success(res.message);
} else {
message.error(res.message);
}
resolve(res.data);
})
})
}
//文本记录查询
export const getMessage = function () {
return api.get("/saved-messages/")
}
//文本记录删除
export const removeMessage = function (id) {
return new Promise(resolve => {
Modal.confirm({
title: '提示',
content: '确认删除当前结果',
onOk() {
api.delete(`/saved-messages/` + id).then((res) => {
if (res.status_code === 200) {
message.success(res.message);
} else {
message.error(res.message);
}
resolve(res.data);
}).catch((e) => {
resolve(false)
})
},
onCancel() {
resolve(false);
}
});
});
}
//获取知识库关联应用
export const relatedApps = function (id) {
return request.get(`/datasets/${id}/related-apps`);
}
//文档重试
export const retry = function (id, document_ids) {
return new Promise(resolve => {
Modal.confirm({
title: '提示',
content: '确认重试该文档',
onOk() {
request.post(`/datasets/${id}/retry`, {document_ids}).then((res) => {
if (res.status_code === 200) {
message.success(res.message || "成功");
} else {
message.error(res.message || "失败");
}
resolve(res.data);
})
},
onCancel() {
resolve(false);
}
});
});
}
//下一步建议
export const suggestedQuestions = function (id, messageId) {
return request.get(`/apps/${id}/chat-messages/${messageId}/suggested-questions`)
}
//聊天。下一步开启
export const chatSuggestedQuestions = function (id) {
return api.get(`/messages/${id}/suggested-questions`)
}
//工具类型查询接口
export const toolLabels = function () {
return request.get("/workspaces/current/tool-labels")
}
//工具详细信息集合接口
export const builtin = function (name, labels) {
return request.get("/workspaces/current/tools/builtin", { name, labels })
}
//自定义工具
export const toolsApi = function (name, labels) {
return request.get("/workspaces/current/tools/api", { name, labels })
}
//发布的工作流
export const toolsWorkflow = function (name, labels) {
return request.get("/workspaces/current/tools/workflow", { name, labels })
}
//获取工具图片
export const toolProviders = function () {
return request.get("/workspaces/current/tool-providers")
}
//获取工具类型
export const getTools = function (type, id) {
return request.get(`/workspaces/current/tool-provider/${type}/${id}/tools`)
}
import axios from "axios";
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from "axios";
import { ElNotification } from 'element-plus';
import router from "@/router";
let bool = false;
function layout(text?: string) {
!bool && ElNotification.error({
title: "通知",
message: text || "登录超时",
});
!bool && router.push("/login");
bool = true
const timout = setTimeout(() => {
bool = false
clearTimeout(timout);
}, 4500)
}
const regex = /^2([0-9]{2})$/; //判断数字大于等于200,小于300
interface ISettings {
prompt?: boolean; //报错是否全局提示
}
type jsonData = Record<string, any>;
class Config {
private instance: AxiosInstance;
private settings: ISettings;
constructor(
requeseConfig,
settings = { prompt: true },
) {
this.instance = axios.create(requeseConfig);
this.settings = settings;
// 全局请求拦截
this.instance.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
if (config.baseURL === "/console/api") {
config.headers["Authorization"] = "Bearer " + sessionStorage.getItem("token");
} else if (config.baseURL === "/api") {
config.headers["Authorization"] = "Bearer " + sessionStorage.getItem("console-token");
}
return config;
},
(error) => {
return error;
},
);
// 全局响应拦截
this.instance.interceptors.response.use(
(res) => {
if (res.data.status === 401) {
layout();
return;
}
return res;
},
(error) => {
if (error?.response) {
switch (error.response.status) {
case 400:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: error.response.data.message,
});
break;
case 401:
layout(error.response.data.message);
break;
case 403:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: error.response.data.message,
});
break;
case 404:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: error.response.data.message,
});
break;
case 405:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message:
"请求方法未允许 " + error.response.data.message,
});
break;
case 408:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: error.response.data.message,
});
break;
case 413:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: error.response.data.message,
});
break;
case 409:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: error.response.data.message,
});
break;
case 500:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: error.response.data.message || error.response.data.statusText,
});
break;
case 501:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: "网络未实现",
});
break;
case 502:
this.settings?.prompt &&
ElNotification.error({
title: "服务异常",
message: "服务重启中...",
});
break;
case 503:
this.settings?.prompt &&
ElNotification.error({
title: "服务异常",
message: "服务重启中...",
});
break;
case 504:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: "网络超时",
});
break;
case 505:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: "http版本不支持该请求",
});
break;
default:
this.settings?.prompt &&
ElNotification.error({
title: "通知",
message: `连接错误`,
});
}
}
return error?.response?.data || error;
},
);
}
get(url: string, params?: jsonData, headers?: jsonData) {
return new Promise<any>((resolve, reject) => {
this.instance
.get(url, { params, headers })
.then((res) => {
if (regex.test(res.status as any as string)) {
resolve(res.data);
} else {
reject(res)
}
})
.catch((err) => {
reject(err);
});
});
}
post(url: string, data?: any, params?: jsonData, headers?: jsonData) {
return new Promise<any>((resolve, reject) => {
this.instance
.post(url, data, { params, headers })
.then((res) => {
if (regex.test(res.status as any as string)) {
resolve(res.data);
} else {
reject(res)
}
})
.catch((err) => {
reject(err);
});
});
}
delete(url: string, config?: AxiosRequestConfig) {
return new Promise<any>((resolve, reject) => {
this.instance
.delete(url, config)
.then((res) => {
if (regex.test(res.status as any as string)) {
resolve(res.data);
} else {
reject(res)
}
})
.catch((err) => {
reject(err);
});
});
}
put(url: string, data: any, params?: jsonData, headers?: jsonData) {
return new Promise<any>((resolve, reject) => {
this.instance
.put(url, data, { params, headers })
.then((res) => {
if (regex.test(res.status as any as string)) {
resolve(res.data);
} else {
reject(res)
}
})
.catch((err) => {
reject(err);
});
});
}
patch(url: string, data?: any, params?: jsonData, headers?: jsonData) {
return new Promise<any>((resolve, reject) => {
this.instance
.patch(url, data, { params, headers })
.then((res) => {
if (regex.test(res.status as any as string)) {
resolve(res.data);
} else {
reject(res)
}
})
.catch((err) => {
reject(err);
});
});
}
requestConfig(config: AxiosRequestConfig) {
return new Promise<any>((resolve, reject) => {
this.instance
.request(config)
.then((res) => {
if (regex.test(res.status as any as string)) {
resolve(res.data);
} else {
reject(res)
}
})
.catch((err) => {
reject(err);
});
});
}
postForm(url: string, data: jsonData, params?: jsonData, headers?: jsonData) {
return new Promise<any>((resolve, reject) => {
this.instance
.postForm(url, data, { params, headers })
.then((res) => {
if (regex.test(res.status as any as string)) {
resolve(res.data);
} else {
reject(res)
}
})
.catch((err) => {
reject(err);
});
});
}
}
export default Config;
import Config from "./config";
export const request = new Config({baseURL: "/console/api"});
export const api = new Config({baseURL: "/api"});
export const noPrompt = new Config({baseURL: "/console/api"}, { prompt: false });
<template>
<login-layout>
<LoginContainer subTitle="欢迎使用 MaxKB 智能知识库">
<h2 class="mb-24">忘记密码</h2>
<el-form
class="register-form"
ref="resetPasswordFormRef"
:model="CheckEmailForm"
:rules="rules"
>
<div class="mb-24">
<el-form-item prop="email">
<el-input
size="large"
class="input-item"
v-model="CheckEmailForm.email"
placeholder="请输入邮箱"
>
</el-input>
</el-form-item>
</div>
<div class="mb-24">
<el-form-item prop="code">
<div class="flex-between w-full">
<el-input
size="large"
class="code-input"
v-model="CheckEmailForm.code"
placeholder="请输入验证码"
>
</el-input>
<el-button
:disabled="isDisabled"
size="large"
class="send-email-button ml-12"
@click="sendEmail"
:loading="loading"
>
{{ isDisabled ? `重新发送(${time}s)` : '获取验证码' }}</el-button
>
</div>
</el-form-item>
</div>
</el-form>
<el-button size="large" type="primary" class="w-full" @click="checkCode">立即验证</el-button>
<div class="operate-container mt-12">
<el-button
class="register"
@click="router.push('/login')"
link
type="primary"
icon="ArrowLeft"
>
返回登录
</el-button>
</div>
</LoginContainer>
</login-layout>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import type { CheckCodeRequest } from '@/api/type/user'
import { useRouter } from 'vue-router'
import type { FormInstance, FormRules } from 'element-plus'
import UserApi from '@/api/user'
import { MsgSuccess } from '@/utils/message'
const router = useRouter()
const CheckEmailForm = ref<CheckCodeRequest>({
email: '',
code: '',
type: 'reset_password'
})
const resetPasswordFormRef = ref<FormInstance>()
const rules = ref<FormRules<CheckCodeRequest>>({
email: [
{ required: true, message: '请输入邮箱', trigger: 'blur' },
{
validator: (rule, value, callback) => {
const emailRegExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
if (!emailRegExp.test(value) && value != '') {
callback(new Error('请输入有效邮箱格式!'))
} else {
callback()
}
},
trigger: 'blur'
}
],
code: [{ required: true, message: '请输入验证码' }]
})
const loading = ref<boolean>(false)
const isDisabled = ref<boolean>(false)
const time = ref<number>(60)
const checkCode = () => {
resetPasswordFormRef.value
?.validate()
.then(() => UserApi.checkCode(CheckEmailForm.value, loading))
.then(() => router.push({ name: 'reset_password', params: CheckEmailForm.value }))
}
/**
* 发送验证码
*/
const sendEmail = () => {
resetPasswordFormRef.value?.validateField('email', (v: boolean) => {
if (v) {
UserApi.sendEmit(CheckEmailForm.value.email, 'reset_password', loading).then(() => {
MsgSuccess('发送验证码成功')
isDisabled.value = true
handleTimeChange()
})
}
})
}
const handleTimeChange = () => {
if (time.value <= 0) {
isDisabled.value = false
time.value = 60
} else {
setTimeout(() => {
time.value--
handleTimeChange()
}, 1000)
}
}
</script>
<style lang="scss" scoped></style>
<template> <template>
<login-layout v-if="user.isEnterprise() ? user.themeInfo : true" v-loading="loading"> <login-layout v-if="user.isEnterprise() ? user.themeInfo : true" v-loading="loading">
<LoginContainer :subTitle="user.themeInfo?.slogan || '欢迎使用 MaxKB 智能知识库'"> <LoginContainer subTitle="欢迎使用 快际新云 智能知识库">
<el-form <el-form
class="login-form" class="login-form"
:rules="rules" :rules="rules"
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
ref="loginFormRef" ref="loginFormRef"
@keyup.enter="login" @keyup.enter="login"
> >
<div class="mb-24"> <el-form-item prop="username" class="mb-[30px]">
<el-form-item prop="username">
<el-input <el-input
size="large" size="large"
class="input-item" class="input-item"
...@@ -18,9 +17,7 @@ ...@@ -18,9 +17,7 @@
> >
</el-input> </el-input>
</el-form-item> </el-form-item>
</div> <el-form-item prop="password" class="mb-[30px]">
<div class="mb-24">
<el-form-item prop="password">
<el-input <el-input
type="password" type="password"
size="large" size="large"
...@@ -31,22 +28,8 @@ ...@@ -31,22 +28,8 @@
> >
</el-input> </el-input>
</el-form-item> </el-form-item>
</div>
</el-form> </el-form>
<el-button size="large" type="primary" class="w-full" @click="login">登录</el-button> <el-button size="large" type="primary" class="w-full" @click="login">登录</el-button>
<div class="operate-container flex-between mt-12">
<!-- <el-button class="register" @click="router.push('/register')" link type="primary">
注册
</el-button> -->
<el-button
class="forgot-password"
@click="router.push('/forgot_password')"
link
type="primary"
>
忘记密码?
</el-button>
</div>
</LoginContainer> </LoginContainer>
</login-layout> </login-layout>
</template> </template>
...@@ -56,6 +39,7 @@ import type {LoginRequest} from '@/api/type/user' ...@@ -56,6 +39,7 @@ import type {LoginRequest} from '@/api/type/user'
import {useRouter} from 'vue-router' import {useRouter} from 'vue-router'
import type {FormInstance, FormRules} from 'element-plus' import type {FormInstance, FormRules} from 'element-plus'
import useStore from '@/stores' import useStore from '@/stores'
import { loginPort, userInfo } from '@/utils/api'
const loading = ref<boolean>(false) const loading = ref<boolean>(false)
const {user} = useStore() const {user} = useStore()
...@@ -86,12 +70,18 @@ const loginFormRef = ref<FormInstance>() ...@@ -86,12 +70,18 @@ const loginFormRef = ref<FormInstance>()
const login = () => { const login = () => {
loginFormRef.value?.validate().then(() => { loginFormRef.value?.validate().then(() => {
loading.value = true loading.value = true
user loginPort(loginForm.value).then((res) => {
.login(loginForm.value.email, loginForm.value.password) res && userInfo().then(res => {
.then(() => { sessionStorage.setItem("userInfo", JSON.stringify(res));
router.push({name: 'home'}) const timer = setTimeout(() => {
router.push({name: 'home'});
loading.value = false;
clearTimeout(timer);
}, 300)
})
}).catch(() => {
loading.value = false;
}) })
.finally(() => (loading.value = false))
}) })
} }
......
<template>
<login-layout>
<LoginContainer subTitle="欢迎使用 MaxKB 智能知识库">
<h2 class="mb-24">用户注册</h2>
<el-form class="register-form" :model="registerForm" :rules="rules" ref="registerFormRef">
<div class="mb-24">
<el-form-item prop="username">
<el-input
size="large"
class="input-item"
v-model="registerForm.username"
placeholder="请输入用户名"
>
</el-input>
</el-form-item>
</div>
<div class="mb-24">
<el-form-item prop="password">
<el-input
type="password"
size="large"
class="input-item"
v-model="registerForm.password"
placeholder="请输入密码"
show-password
>
</el-input>
</el-form-item>
</div>
<div class="mb-24">
<el-form-item prop="re_password">
<el-input
type="password"
size="large"
class="input-item"
v-model="registerForm.re_password"
placeholder="请输入确认密码"
show-password
>
</el-input>
</el-form-item>
</div>
<div class="mb-24">
<el-form-item prop="email">
<el-input
size="large"
class="input-item"
v-model="registerForm.email"
placeholder="请输入邮箱"
>
</el-input>
</el-form-item>
</div>
<div class="mb-24">
<el-form-item prop="code">
<div class="flex-between w-full">
<el-input
size="large"
class="code-input"
v-model="registerForm.code"
placeholder="请输入验证码"
>
</el-input>
<el-button
:disabled="isDisabled"
size="large"
class="send-email-button ml-12"
@click="sendEmail"
:loading="sendEmailLoading"
>
{{ isDisabled ? `重新发送(${time}s)` : '获取验证码' }}</el-button
>
</div>
</el-form-item>
</div>
</el-form>
<el-button size="large" type="primary" class="w-full" @click="register">注册</el-button>
<div class="operate-container mt-12">
<el-button
class="register"
@click="router.push('/login')"
link
type="primary"
icon="ArrowLeft"
>
返回登录
</el-button>
</div>
</LoginContainer>
</login-layout>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import type { RegisterRequest } from '@/api/type/user'
import { useRouter } from 'vue-router'
import UserApi from '@/api/user'
import { MsgSuccess } from '@/utils/message'
import type { FormInstance, FormRules } from 'element-plus'
const router = useRouter()
const registerForm = ref<RegisterRequest>({
username: '',
password: '',
re_password: '',
email: '',
code: ''
})
const rules = ref<FormRules<RegisterRequest>>({
username: [
{
required: true,
message: '请输入用户名',
trigger: 'blur'
},
{
min: 6,
max: 20,
message: '长度在 6 到 20 个字符',
trigger: 'blur'
}
],
password: [
{
required: true,
message: '请输入密码',
trigger: 'blur'
},
{
min: 6,
max: 20,
message: '长度在 6 到 20 个字符',
trigger: 'blur'
}
],
re_password: [
{
required: true,
message: '请输入确认密码',
trigger: 'blur'
},
{
min: 6,
max: 20,
message: '长度在 6 到 20 个字符',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (registerForm.value.password != registerForm.value.re_password) {
callback(new Error('密码不一致'))
} else {
callback()
}
},
trigger: 'blur'
}
],
email: [
{ required: true, message: '请输入邮箱', trigger: 'blur' },
{
validator: (rule, value, callback) => {
const emailRegExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
if (!emailRegExp.test(value) && value != '') {
callback(new Error('请输入有效邮箱格式!'))
} else {
callback()
}
},
trigger: 'blur'
}
],
code: [{ required: true, message: '请输入验证码' }]
})
const registerFormRef = ref<FormInstance>()
const register = () => {
registerFormRef.value
?.validate()
.then(() => {
return UserApi.register(registerForm.value)
})
.then(() => {
router.push('login')
})
}
const sendEmailLoading = ref<boolean>(false)
const isDisabled = ref<boolean>(false)
const time = ref<number>(60)
/**
* 发送验证码
*/
const sendEmail = () => {
registerFormRef.value?.validateField('email', (v: boolean) => {
if (v) {
UserApi.sendEmit(registerForm.value.email, 'register', sendEmailLoading).then(() => {
MsgSuccess('发送验证码成功')
isDisabled.value = true
handleTimeChange()
})
}
})
}
const handleTimeChange = () => {
if (time.value <= 0) {
isDisabled.value = false
time.value = 60
} else {
setTimeout(() => {
time.value--
handleTimeChange()
}, 1000)
}
}
</script>
<style lang="scss" scoped></style>
/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{vue,js,jsx,tsx}"],
corePlugins: {
preflight: false,
},
theme: {
screens: {
sm: "640px",
md: "768px",
lg: "1024px",
xl: "1280px",
"2xl": "1536px",
},
colors: {
primary: "#0c599d",
danger: "#ff0000",
white: "#ffffff",
success: "#67C23A",
warning: "#E6A23C",
info: "#909399",
blue: "#409EFF"
},
extend: {},
},
plugins: [],
}
{ {
"extends": "@vue/tsconfig/tsconfig.dom.json", "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "./auto-imports.d.ts"],
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"], "exclude": ["src/**/__tests__/*", "node_modules", "public"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": { "compilerOptions": {
"composite": true, "composite": true,
"moduleResolution": "node", "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": false,
"jsx": "preserve",
"importHelpers": true,
"experimentalDecorators": true,
"strictFunctionTypes": false,
"skipLibCheck": true,
"esModuleInterop": true,
"isolatedModules": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"sourceMap": true,
"allowJs": false,
"resolveJsonModule": true,
"lib": [
"ESNext",
"DOM"
],
"baseUrl": ".", "baseUrl": ".",
"target": "esnext", // 使用ES最新语法
"module": "esnext", // 使用ES模块语法
"paths": { "paths": {
"@/*": ["./src/*"] "@/*": ["./src/*"],
} }
} }
} }
...@@ -2,27 +2,77 @@ import { fileURLToPath, URL } from 'node:url' ...@@ -2,27 +2,77 @@ import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import vueJsx from "@vitejs/plugin-vue-jsx";
import vueDevTools from "vite-plugin-vue-devtools"; import vueDevTools from "vite-plugin-vue-devtools";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig(({ mode }) => { export default defineConfig(({ mode }) => {
return { return {
plugins: [vue(), vueDevTools()], plugins: [
vue(),
vueDevTools(),
vueJsx(),
AutoImport({
include: [
/\.[j]sx?$/, // .ts, .tsx, .js, .jsx
/\.vue$/,
/\.vue\?vue/, // .vue
/\.md$/, // .md
],
// 全局引入插件
imports: [
// presets
"vue",
"vue-router",
"pinia",
// custom
{
"@vueuse/core": [
// named imports
"useMouse", // import { useMouse } from '@vueuse/core',
// alias
["useFetch", "useMyFetch"], // import { useFetch as useMyFetch } from '@vueuse/core',
],
},
],
eslintrc: {
enabled: false,
filepath: './.eslintrc-auto-import.json',
globalsPropValue: true,
},
resolvers: [],
}),
Components({
resolvers: [],
}),
],
server: { server: {
port: 8917, port: 8917,
cors: true, cors: true,
proxy: { proxy: {
"/console": {
target: "https://klm-service-dev.apps.iytcloud.com/",
changeOrigin: true,
secure: false,
},
"/api": { "/api": {
target: "http://192.168.121.203:18080", target: "https://klm-service-dev.apps.iytcloud.com/",
changeOrigin: true, changeOrigin: true,
secure: false, secure: false,
}, },
"/workspaces": {
target: "https://klm-service-dev.apps.iytcloud.com/",
changeOrigin: true,
secure: false,
}
}, },
}, },
resolve: { resolve: {
extensions: ['.vue', '.ts', '.js', '.json', '.tsx', '.jsx'], extensions: ['.vue', '.ts', '.js', '.json', '.tsx', '.jsx'],
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) "@": fileURLToPath(new URL("./src", import.meta.url)),
} }
}, },
esbuild: { esbuild: {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论