From cc3eeb001f4adf71ce248ad553ce9885292cb80a Mon Sep 17 00:00:00 2001 From: WangLeo <690854599@qq.com> Date: Mon, 9 Mar 2026 01:43:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 23 + .env.production | 23 + .gitignore | 24 + .vscode/extensions.json | 3 + auto-imports.d.ts | 92 + components.d.ts | 75 + config/plugins.js | 19 + eslint.config.js | 55 + index.html | 13 + out.txt | 140 + package.json | 27 + pnpm-lock.yaml | 4673 +++++++++++++++++ public/vite.svg | 1 + src/App.vue | 54 + src/apis/auth/auth.js | 51 + src/apis/auth/captcha.js | 32 + src/apis/auth/index.js | 2 + src/apis/collection/index.js | 18 + src/apis/createRoot/index.js | 18 + src/apis/history/index.js | 13 + src/apis/library/index.js | 18 + src/apis/pay/aliPay.js | 28 + src/apis/pay/index.js | 11 + src/apis/pay/orderInfo.js | 27 + src/apis/pay/product.js | 13 + src/apis/pay/wxPay.js | 36 + src/apis/workflows.json | 107 + src/assets/dialog/darkArrow.svg | 3 + src/assets/dialog/image4-1-1-BZWQeEAk.png | Bin 0 -> 69845 bytes src/assets/dialog/originalImage.svg | 5 + src/assets/dialog/referenceDiagram.svg | 4 + src/assets/dialog/writerArrow.svg | 3 + src/assets/display/arrow.svg | 3 + src/assets/display/back.svg | 3 + src/assets/display/brush.svg | 4 + src/assets/display/collection.svg | 3 + src/assets/display/download.svg | 3 + src/components/Img/index.vue | 178 + src/components/Select/index.vue | 274 + src/components/UploadPicture.vue | 150 + src/components/dialogBox/index.vue | 335 ++ src/components/dialogBox/model/index.vue | 159 + src/components/dialogBox/proportion/index.vue | 362 ++ src/components/dialogBox/quantity/index.vue | 78 + src/main.js | 15 + src/router/index.js | 73 + src/stores/display.js | 9 + src/stores/index.js | 3 + src/stores/param.js | 8 + src/stores/user.js | 142 + src/style.css | 52 + src/utils/auth.ts | 19 + src/utils/createTask.js | 78 + src/utils/downloadImage.js | 76 + src/utils/encrypt.ts | 39 + src/utils/request.js | 86 + src/utils/tokenError.js | 15 + src/utils/uploadImage.js | 0 src/utils/websocket.js | 402 ++ src/views/home/display/components/set.vue | 363 ++ src/views/home/display/index.vue | 274 + src/views/home/index.vue | 28 + src/views/login/index.vue | 328 ++ vite.config.js | 54 + 64 files changed, 9227 insertions(+) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 auto-imports.d.ts create mode 100644 components.d.ts create mode 100644 config/plugins.js create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 out.txt create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/vite.svg create mode 100644 src/App.vue create mode 100644 src/apis/auth/auth.js create mode 100644 src/apis/auth/captcha.js create mode 100644 src/apis/auth/index.js create mode 100644 src/apis/collection/index.js create mode 100644 src/apis/createRoot/index.js create mode 100644 src/apis/history/index.js create mode 100644 src/apis/library/index.js create mode 100644 src/apis/pay/aliPay.js create mode 100644 src/apis/pay/index.js create mode 100644 src/apis/pay/orderInfo.js create mode 100644 src/apis/pay/product.js create mode 100644 src/apis/pay/wxPay.js create mode 100644 src/apis/workflows.json create mode 100644 src/assets/dialog/darkArrow.svg create mode 100644 src/assets/dialog/image4-1-1-BZWQeEAk.png create mode 100644 src/assets/dialog/originalImage.svg create mode 100644 src/assets/dialog/referenceDiagram.svg create mode 100644 src/assets/dialog/writerArrow.svg create mode 100644 src/assets/display/arrow.svg create mode 100644 src/assets/display/back.svg create mode 100644 src/assets/display/brush.svg create mode 100644 src/assets/display/collection.svg create mode 100644 src/assets/display/download.svg create mode 100644 src/components/Img/index.vue create mode 100644 src/components/Select/index.vue create mode 100644 src/components/UploadPicture.vue create mode 100644 src/components/dialogBox/index.vue create mode 100644 src/components/dialogBox/model/index.vue create mode 100644 src/components/dialogBox/proportion/index.vue create mode 100644 src/components/dialogBox/quantity/index.vue create mode 100644 src/main.js create mode 100644 src/router/index.js create mode 100644 src/stores/display.js create mode 100644 src/stores/index.js create mode 100644 src/stores/param.js create mode 100644 src/stores/user.js create mode 100644 src/style.css create mode 100644 src/utils/auth.ts create mode 100644 src/utils/createTask.js create mode 100644 src/utils/downloadImage.js create mode 100644 src/utils/encrypt.ts create mode 100644 src/utils/request.js create mode 100644 src/utils/tokenError.js create mode 100644 src/utils/uploadImage.js create mode 100644 src/utils/websocket.js create mode 100644 src/views/home/display/components/set.vue create mode 100644 src/views/home/display/index.vue create mode 100644 src/views/home/index.vue create mode 100644 src/views/login/index.vue create mode 100644 vite.config.js diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..ab6bc5b --- /dev/null +++ b/.env.development @@ -0,0 +1,23 @@ +# 地址前缀 +VITE_BASE = '/' + +# 主服务 +VITE_API_PREFIX = '/api' +VITE_API_BASE_URL = 'http://43.248.131.153:8001' # http://huanda.xueai.art http://106.54.11.219/api 43.248.131.153:8003 +VITE_API_WS_URL = 'ws://huanda.xueai.art/api' + +# 支付服务 +VITE_API_PAY_PREFIX = '/pay' +VITE_API_PAY_TARGET = 'http://43.248.131.153:8091' # http://43.248.133.202 test.xueai.art + +# AI Music后端服务 +VITE_API_WORKFLOW_UPLOAD = 'http://43.248.131.153:8060/workflow/file/upload' # https://sxwz.xueai.art/workflow https://designtools.xueai.art/workflow +VITE_API_WORKFLOW_WS = 'ws://43.248.97.19:4000/huanda' # 43.248.131.153 43.248.131.153:8084 + +# 是否开启开发者工具 +VITE_OPEN_DEVTOOLS = false + +# 是否开启KKFileView +FILE_OPEN_PREVIEW = true +# KKFileView服务器地址 +# FILE_VIEW_SERVER_URL = 'http://192.168.122.209:8012' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..f9569a2 --- /dev/null +++ b/.env.production @@ -0,0 +1,23 @@ +# 地址前缀 +VITE_BASE = '/' + +# 是否在打包时启用 Mock +VITE_BUILD_MOCK = false + +# 主服务 +VITE_API_PREFIX = '/api' +VITE_API_BASE_URL = 'https://huanda.xueai.art/api' +VITE_API_WS_URL = 'wss://huanda.xueai.art/api' + +# 支付服务 +VITE_API_PAY_PREFIX = '/pay' +VITE_API_PAY_TARGET = 'https://huanda.xueai.art' # http://43.248.133.202 + +# 任务处理模块 +VITE_API_WORKFLOW_UPLOAD = 'https://huanda.xueai.art/huandaCallback/workflow/file/upload' # https://sxwz.xueai.art/workflow https://designtools.xueai.art/workflow +VITE_API_WORKFLOW_WS = 'wss://huanda.xueai.art/task' + +# 是否开启KKFileView +FILE_OPEN_PREVIEW = false +# KKFileView服务器地址 +# FILE_VIEW_SERVER_URL = 'http://192.168.122.209:8012' \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/auto-imports.d.ts b/auto-imports.d.ts new file mode 100644 index 0000000..3815df9 --- /dev/null +++ b/auto-imports.d.ts @@ -0,0 +1,92 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + const EffectScope: typeof import('vue').EffectScope + const ElMessage: typeof import('element-plus/es').ElMessage + const ElNotification: typeof import('element-plus/es').ElNotification + const acceptHMRUpdate: typeof import('pinia').acceptHMRUpdate + const computed: typeof import('vue').computed + const createApp: typeof import('vue').createApp + const createPinia: typeof import('pinia').createPinia + const customRef: typeof import('vue').customRef + const defineAsyncComponent: typeof import('vue').defineAsyncComponent + const defineComponent: typeof import('vue').defineComponent + const defineStore: typeof import('pinia').defineStore + const effectScope: typeof import('vue').effectScope + const getActivePinia: typeof import('pinia').getActivePinia + const getCurrentInstance: typeof import('vue').getCurrentInstance + const getCurrentScope: typeof import('vue').getCurrentScope + const getCurrentWatcher: typeof import('vue').getCurrentWatcher + const h: typeof import('vue').h + const inject: typeof import('vue').inject + const isProxy: typeof import('vue').isProxy + const isReactive: typeof import('vue').isReactive + const isReadonly: typeof import('vue').isReadonly + const isRef: typeof import('vue').isRef + const isShallow: typeof import('vue').isShallow + const mapActions: typeof import('pinia').mapActions + const mapGetters: typeof import('pinia').mapGetters + const mapState: typeof import('pinia').mapState + const mapStores: typeof import('pinia').mapStores + const mapWritableState: typeof import('pinia').mapWritableState + const markRaw: typeof import('vue').markRaw + const nextTick: typeof import('vue').nextTick + const onActivated: typeof import('vue').onActivated + const onBeforeMount: typeof import('vue').onBeforeMount + const onBeforeRouteLeave: typeof import('vue-router').onBeforeRouteLeave + const onBeforeRouteUpdate: typeof import('vue-router').onBeforeRouteUpdate + const onBeforeUnmount: typeof import('vue').onBeforeUnmount + const onBeforeUpdate: typeof import('vue').onBeforeUpdate + const onDeactivated: typeof import('vue').onDeactivated + const onErrorCaptured: typeof import('vue').onErrorCaptured + const onMounted: typeof import('vue').onMounted + const onRenderTracked: typeof import('vue').onRenderTracked + const onRenderTriggered: typeof import('vue').onRenderTriggered + const onScopeDispose: typeof import('vue').onScopeDispose + const onServerPrefetch: typeof import('vue').onServerPrefetch + const onUnmounted: typeof import('vue').onUnmounted + const onUpdated: typeof import('vue').onUpdated + const onWatcherCleanup: typeof import('vue').onWatcherCleanup + const provide: typeof import('vue').provide + const reactive: typeof import('vue').reactive + const readonly: typeof import('vue').readonly + const ref: typeof import('vue').ref + const resolveComponent: typeof import('vue').resolveComponent + const setActivePinia: typeof import('pinia').setActivePinia + const setMapStoreSuffix: typeof import('pinia').setMapStoreSuffix + const shallowReactive: typeof import('vue').shallowReactive + const shallowReadonly: typeof import('vue').shallowReadonly + const shallowRef: typeof import('vue').shallowRef + const storeToRefs: typeof import('pinia').storeToRefs + const toRaw: typeof import('vue').toRaw + const toRef: typeof import('vue').toRef + const toRefs: typeof import('vue').toRefs + const toValue: typeof import('vue').toValue + const triggerRef: typeof import('vue').triggerRef + const unref: typeof import('vue').unref + const useAttrs: typeof import('vue').useAttrs + const useCssModule: typeof import('vue').useCssModule + const useCssVars: typeof import('vue').useCssVars + const useId: typeof import('vue').useId + const useLink: typeof import('vue-router').useLink + const useModel: typeof import('vue').useModel + const useRoute: typeof import('vue-router').useRoute + const useRouter: typeof import('vue-router').useRouter + const useSlots: typeof import('vue').useSlots + const useTemplateRef: typeof import('vue').useTemplateRef + const watch: typeof import('vue').watch + const watchEffect: typeof import('vue').watchEffect + const watchPostEffect: typeof import('vue').watchPostEffect + const watchSyncEffect: typeof import('vue').watchSyncEffect +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, ShallowRef, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/components.d.ts b/components.d.ts new file mode 100644 index 0000000..aca1359 --- /dev/null +++ b/components.d.ts @@ -0,0 +1,75 @@ +/* eslint-disable */ +// @ts-nocheck +// biome-ignore lint: disable +// oxlint-disable +// ------ +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 + +export {} + +/* prettier-ignore */ +declare module 'vue' { + export interface GlobalComponents { + AIgenerate: typeof import('./src/components/AIgenerate/AIgenerate.vue')['default'] + Collection: typeof import('./src/components/collection/index.vue')['default'] + copy: typeof import('./src/components/ModelDescription copy.vue')['default'] + DeepseekPopover: typeof import('./src/components/AIgenerate/DeepseekPopover.vue')['default'] + DialogBox: typeof import('./src/components/dialogBox/index.vue')['default'] + ElAlert: typeof import('element-plus/es')['ElAlert'] + ElAside: typeof import('element-plus/es')['ElAside'] + ElButton: typeof import('element-plus/es')['ElButton'] + ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] + ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] + ElContainer: typeof import('element-plus/es')['ElContainer'] + ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] + ElDialog: typeof import('element-plus/es')['ElDialog'] + ElForm: typeof import('element-plus/es')['ElForm'] + ElFormItem: typeof import('element-plus/es')['ElFormItem'] + ElHeader: typeof import('element-plus/es')['ElHeader'] + ElIcon: typeof import('element-plus/es')['ElIcon'] + ElInput: typeof import('element-plus/es')['ElInput'] + ElMain: typeof import('element-plus/es')['ElMain'] + ElPagination: typeof import('element-plus/es')['ElPagination'] + ElPopover: typeof import('element-plus/es')['ElPopover'] + ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] + ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] + ElTable: typeof import('element-plus/es')['ElTable'] + ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] + ElTabPane: typeof import('element-plus/es')['ElTabPane'] + ElTabs: typeof import('element-plus/es')['ElTabs'] + ElTooltip: typeof import('element-plus/es')['ElTooltip'] + ElUpload: typeof import('element-plus/es')['ElUpload'] + IEpArrow: typeof import('~icons/ep/arrow')['default'] + IEpArrowDown: typeof import('~icons/ep/arrow-down')['default'] + IEpBack: typeof import('~icons/ep/back')['default'] + IEpCirclePlusFilled: typeof import('~icons/ep/circle-plus-filled')['default'] + IEpClose: typeof import('~icons/ep/close')['default'] + IEpDelete: typeof import('~icons/ep/delete')['default'] + IEpDownload: typeof import('~icons/ep/download')['default'] + IEpEdit: typeof import('~icons/ep/edit')['default'] + IEpHouse: typeof import('~icons/ep/house')['default'] + IEpLoading: typeof import('~icons/ep/loading')['default'] + IEpPlus: typeof import('~icons/ep/plus')['default'] + IEpRefresh: typeof import('~icons/ep/refresh')['default'] + IEpRefreshRight: typeof import('~icons/ep/refresh-right')['default'] + IEpRight: typeof import('~icons/ep/right')['default'] + IEpStarFilled: typeof import('~icons/ep/star-filled')['default'] + IEpTop: typeof import('~icons/ep/top')['default'] + IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default'] + Img: typeof import('./src/components/Img/index.vue')['default'] + Library: typeof import('./src/components/Library/index.vue')['default'] + Model: typeof import('./src/components/dialogBox/model/index.vue')['default'] + ModelParam: typeof import('./src/components/AIgenerate/components/modelParam.vue')['default'] + Official: typeof import('./src/components/Library/official.vue')['default'] + Private: typeof import('./src/components/Library/private.vue')['default'] + Proportion: typeof import('./src/components/dialogBox/proportion/index.vue')['default'] + Quantity: typeof import('./src/components/dialogBox/quantity/index.vue')['default'] + Recommend: typeof import('./src/components/AIgenerate/components/recommend.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + Select: typeof import('./src/components/Select/index.vue')['default'] + Subpage: typeof import('./src/components/subpage.vue')['default'] + UploadPicture: typeof import('./src/components/UploadPicture.vue')['default'] + } +} diff --git a/config/plugins.js b/config/plugins.js new file mode 100644 index 0000000..bd369c5 --- /dev/null +++ b/config/plugins.js @@ -0,0 +1,19 @@ +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' + +export const autoImportConfig = AutoImport({ + imports: [ + 'vue', + 'vue-router', + 'pinia' + ], + dts: './auto-imports.d.ts', + resolvers: [ElementPlusResolver()] +}) + +export const componentsConfig = Components({ + dts: './components.d.ts', + dirs: ['src/components'], + resolvers: [ElementPlusResolver()] +}) diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..0a1fb43 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,55 @@ +import antfu from '@antfu/eslint-config' + +// https://github.com/antfu/eslint-config +export default antfu( + { + vue: true, + typescript: false, + ignores: [ + 'README.md', + 'src/types/shims-vue.d.ts' + ] + }, + { + // Remember to specify the file glob here, otherwise it might cause the vue plugin to handle non-vue files + files: ['**/*.vue'], + rules: { + 'vue/block-order': [2, { + order: [['script', 'template'], 'style'] + }], // 强制组件顶级元素的顺序 + 'vue/html-self-closing': [0, { + html: { + void: 'never', + normal: 'always', + component: 'never' + } + }], // 强制自结束样式 + 'vue/custom-event-name-casing': [2, 'kebab-case'], // 对自定义事件名称强制使用特定大小写 + 'vue/singleline-html-element-content-newline': 0, // 要求在单行元素的内容前后换行 + 'vue/first-attribute-linebreak': 0, // 强制第一个属性的位置 + 'vue/define-macros-order': [2, { + order: ['defineOptions', 'defineModel', 'defineProps', 'defineEmits', 'defineSlots'], + defineExposeLast: false + }], // 强制执行定义限制和定义弹出编译器宏的顺序 + 'vue/html-indent': 0, // 在《模板》中强制一致的缩进 + 'vue/html-closing-bracket-newline': 0 // 要求或不允许在标记的右括号前换行 + } + }, + { + // Without `files`, they are general rules for all files + rules: { + 'curly': [0, 'all'], // 对所有控制语句强制使用一致的大括号样式 + 'dot-notation': 0, // 尽可能强制使用点表示法。 在 JavaScript 中,可以使用点表示法 (foo.bar) 或方括号表示法 (foo["bar"]) 访问属性 + 'no-new': 0, // 不允许在赋值或比较之外使用 new 运算符 + 'no-console': 'off', // 禁止使用 console + 'no-process-env': 0, + 'style/arrow-parens': [2, 'always'], // 箭头函数参数需要括号 + 'style/brace-style': [2, '1tbs', { allowSingleLine: true }], // 对块执行一致的大括号样式 + 'style/comma-dangle': [2, 'never'], // 要求或不允许尾随逗号 + 'node/prefer-global/process': 0, + 'quotes': [2, 'single', { avoidEscape: true }], + 'antfu/top-level-function': 0, + 'antfu/if-newline': 0 + } + } +) diff --git a/index.html b/index.html new file mode 100644 index 0000000..660898f --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + AI Painting + + +
+ + + diff --git a/out.txt b/out.txt new file mode 100644 index 0000000..f01303b --- /dev/null +++ b/out.txt @@ -0,0 +1,140 @@ +2026-02-04 11:48:53 INFO [XNIO-1 task-2] t.c.starter.log.interceptor.handler.LogInterceptor - [0][1171053593383952384] [POST] /business/collect +2026-02-04 11:48:53 ERROR [XNIO-1 task-2] t.c.s.w.a.r.DefaultBeforeControllerAdviceProcessImpl - [0][1171053593383952384] [POST] /business/collect +org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: java.sql.SQLException: Field 'create_user' doesn't have a default value +### The error may exist in top/continew/admin/business/mapper/CollectMapper.java (best guess) +### The error may involve top.continew.admin.business.mapper.CollectMapper.insert-Inline +### The error occurred while setting parameters +### SQL: INSERT INTO t_collect ( user_id, url, clothes_id ) VALUES ( ?, ?, ? ) +### Cause: java.sql.SQLException: Field 'create_user' doesn't have a default value +; Field 'create_user' doesn't have a default value + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107) + at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) + at jdk.proxy2/jdk.proxy2.$Proxy153.insert(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy191.insert(Unknown Source) + at top.continew.starter.extension.crud.service.impl.BaseServiceImpl.add(BaseServiceImpl.java:156) + at jdk.internal.reflect.GeneratedMethodAccessor528.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) + at top.continew.admin.business.service.impl.CollectServiceImpl$$SpringCGLIB$$0.add() + at top.continew.admin.controller.business.CollectController.addCollect(CollectController.java:52) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:547) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614) + at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) + at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) + at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) + at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) + at top.continew.starter.log.interceptor.handler.LogFilter.doFilterInternal(LogFilter.java:82) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) + at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) + at cn.dev33.satoken.filter.SaPathCheckFilterForJakartaServlet.doFilter(SaPathCheckFilterForJakartaServlet.java:55) + at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) + at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) + at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:107) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) + at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) + at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) + at top.continew.starter.web.autoconfigure.trace.TLogServletFilter.doFilter(TLogServletFilter.java:59) + at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) + at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) + at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) + at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) + at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) + at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) + at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) + at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) + at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) + at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) + at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) + at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) + at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) + at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) + at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) + at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) + at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) + at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) + at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:276) + at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) + at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:132) + at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) + at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) + at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:256) + at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:101) + at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393) + at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859) + at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18) + at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513) + at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538) + at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) + at java.base/java.lang.Thread.run(Thread.java:840) +Caused by: java.sql.SQLException: Field 'create_user' doesn't have a default value + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) + at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) + at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) + at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362) + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) + at jdk.internal.reflect.GeneratedMethodAccessor215.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) + at jdk.proxy2/jdk.proxy2.$Proxy260.update(Unknown Source) + at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) + at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) + at jdk.internal.reflect.GeneratedMethodAccessor214.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) + at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy258.update(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) + at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) + at jdk.internal.reflect.GeneratedMethodAccessor221.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + ... 93 common frames omitted +2026-02-04 11:48:53 INFO [XNIO-1 task-2] t.c.starter.log.interceptor.handler.LogInterceptor - [0][1171053593383952384] [POST] /business/collect 200 3ms diff --git a/package.json b/package.json new file mode 100644 index 0000000..d24f105 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "ai-painting-v2.0", + "version": "1.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.4", + "eslint": "^10.0.3", + "less": "^4.5.1", + "unplugin-auto-import": "^21.0.0", + "unplugin-icons": "^23.0.1", + "unplugin-vue-components": "^31.0.0", + "vite": "^7.3.1" + }, + "dependencies": { + "axios": "^1.13.6", + "element-plus": "^2.13.5", + "pinia": "^3.0.4", + "vue": "^3.5.29", + "vue-element-plus-x": "^1.3.98", + "vue-router": "^5.0.3", + "vue-virtual-scroller": "2.0.0-beta.8" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..4c6d5e6 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4673 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + axios: + specifier: ^1.13.6 + version: 1.13.6 + element-plus: + specifier: ^2.13.5 + version: 2.13.5(vue@3.5.29) + pinia: + specifier: ^3.0.4 + version: 3.0.4(vue@3.5.29) + vue: + specifier: ^3.5.29 + version: 3.5.29 + vue-element-plus-x: + specifier: ^1.3.98 + version: 1.3.98(rollup@4.59.0)(vue@3.5.29) + vue-router: + specifier: ^5.0.3 + version: 5.0.3(@vue/compiler-sfc@3.5.29)(pinia@3.0.4(vue@3.5.29))(vue@3.5.29) + vue-virtual-scroller: + specifier: 2.0.0-beta.8 + version: 2.0.0-beta.8(vue@3.5.29) + devDependencies: + '@vitejs/plugin-vue': + specifier: ^6.0.4 + version: 6.0.4(vite@7.3.1(less@4.5.1)(yaml@2.8.2))(vue@3.5.29) + eslint: + specifier: ^10.0.3 + version: 10.0.3 + less: + specifier: ^4.5.1 + version: 4.5.1 + unplugin-auto-import: + specifier: ^21.0.0 + version: 21.0.0(@vueuse/core@13.9.0(vue@3.5.29)) + unplugin-icons: + specifier: ^23.0.1 + version: 23.0.1(@vue/compiler-sfc@3.5.29) + unplugin-vue-components: + specifier: ^31.0.0 + version: 31.0.0(vue@3.5.29) + vite: + specifier: ^7.3.1 + version: 7.3.1(less@4.5.1)(yaml@2.8.2) + +packages: + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + + '@chevrotain/cst-dts-gen@11.0.3': + resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} + + '@chevrotain/gast@11.0.3': + resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} + + '@chevrotain/regexp-to-ast@11.0.3': + resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} + + '@chevrotain/types@11.0.3': + resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} + + '@chevrotain/utils@11.0.3': + resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + + '@element-plus/icons-vue@2.3.2': + resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.3': + resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.5.3': + resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.1.1': + resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.3': + resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.0': + resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@mermaid-js/parser@0.6.3': + resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==} + + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} + cpu: [x64] + os: [win32] + + '@shikijs/core@3.23.0': + resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + + '@shikijs/engine-javascript@3.23.0': + resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} + + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/transformers@3.23.0': + resolution: {integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==} + + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@sxzz/popperjs-es@2.11.8': + resolution: {integrity: sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==} + + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/katex@0.16.8': + resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitejs/plugin-vue@6.0.4': + resolution: {integrity: sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vue: ^3.2.25 + + '@vue-macros/common@3.1.2': + resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} + engines: {node: '>=20.19.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + + '@vue/compiler-core@3.5.29': + resolution: {integrity: sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==} + + '@vue/compiler-dom@3.5.29': + resolution: {integrity: sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==} + + '@vue/compiler-sfc@3.5.29': + resolution: {integrity: sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==} + + '@vue/compiler-ssr@3.5.29': + resolution: {integrity: sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-api@8.0.7': + resolution: {integrity: sha512-tc1TXAxclsn55JblLkFVcIRG7MeSJC4fWsPjfM7qu/IcmPUYnQ5Q8vzWwBpyDY24ZjmZTUCCwjRSNbx58IhlAA==} + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-kit@8.0.7': + resolution: {integrity: sha512-H6esJGHGl5q0E9iV3m2EoBQHJ+V83WMW83A0/+Fn95eZ2iIvdsq4+UCS6yT/Fdd4cGZSchx/MdWDreM3WqMsDw==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/devtools-shared@8.0.7': + resolution: {integrity: sha512-CgAb9oJH5NUmbQRdYDj/1zMiaICYSLtm+B1kxcP72LBrifGAjUmt8bx52dDH1gWRPlQgxGPqpAMKavzVirAEhA==} + + '@vue/reactivity@3.5.29': + resolution: {integrity: sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==} + + '@vue/runtime-core@3.5.29': + resolution: {integrity: sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==} + + '@vue/runtime-dom@3.5.29': + resolution: {integrity: sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==} + + '@vue/server-renderer@3.5.29': + resolution: {integrity: sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==} + peerDependencies: + vue: 3.5.29 + + '@vue/shared@3.5.29': + resolution: {integrity: sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==} + + '@vueuse/core@12.0.0': + resolution: {integrity: sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==} + + '@vueuse/core@13.9.0': + resolution: {integrity: sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/metadata@12.0.0': + resolution: {integrity: sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==} + + '@vueuse/metadata@13.9.0': + resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==} + + '@vueuse/shared@12.0.0': + resolution: {integrity: sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==} + + '@vueuse/shared@13.9.0': + resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==} + peerDependencies: + vue: ^3.5.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + + ast-walker-scope@0.8.3: + resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} + engines: {node: '>=20.19.0'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.13.6: + resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + engines: {node: 18 || 20 || >=22} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + chatarea@6.0.7: + resolution: {integrity: sha512-D3YKElVEv1OkraHgbzP/w4ITjQHgfPuH9sapjYyZ6mG6GFHpaP1h+lMWb9OFNpss/ILv2c/3Yg8FuUiE5+1fdw==} + + chevrotain-allstar@0.3.1: + resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} + peerDependencies: + chevrotain: ^11.0.0 + + chevrotain@11.0.3: + resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.33.1: + resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.11: + resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} + + dayjs@1.11.19: + resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + delaunator@5.0.1: + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dompurify@3.3.2: + resolution: {integrity: sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ==} + engines: {node: '>=20'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + element-plus@2.13.5: + resolution: {integrity: sha512-dmY24fhSREfZN/PuUt0YZigMso7wWzl+B5o+YKNN15kQIn/0hzamsPU+ebj9SES0IbUqsLX1wkrzYmzU8VrVOQ==} + peerDependencies: + vue: ^3.3.0 + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.0.3: + resolution: {integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.4: + resolution: {integrity: sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + github-markdown-css@5.9.0: + resolution: {integrity: sha512-tmT5sY+zvg2302XLYEfH2mtkViIM1SWf2nvYoF5N1ZsO0V6B2qZTiw3GOzw4vpjLygK/KG35qRlPFweHqfzz5w==} + engines: {node: '>=10'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-sanitize@5.0.2: + resolution: {integrity: sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + katex@0.16.37: + resolution: {integrity: sha512-TIGjO2cCGYono+uUzgkE7RFF329mLLWGuHUlSr6cwIVj9O8f0VQZ783rsanmJpFUo32vvtj7XT04NGRPh+SZFg==} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + + langium@3.3.1: + resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} + engines: {node: '>=16.0.0'} + + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + + less@4.5.1: + resolution: {integrity: sha512-UKgI3/KON4u6ngSsnDADsUERqhZknsVZbnuzlRZXLQCmfC/MDld42fTydUE9B+Mla1AL6SJ/Pp6SlEFi/AVGfw==} + engines: {node: '>=14'} + hasBin: true + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-es@4.17.23: + resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + magic-string-ast@1.0.3: + resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==} + engines: {node: '>=20.19.0'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + + mdast-util-newline-to-break@2.0.0: + resolution: {integrity: sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + mermaid@11.12.0: + resolution: {integrity: sha512-ZudVx73BwrMJfCFmSSJT84y6u5brEoV8DOItdHomNLz32uBjNrelm7mg95X7g+C6UoQH/W6mBLGDEDv73JdxBg==} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + + mitt@2.1.0: + resolution: {integrity: sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.8.1: + resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + + parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pinia@3.0.4: + resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==} + peerDependencies: + typescript: '>=4.5.0' + vue: ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + radash@12.1.1: + resolution: {integrity: sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==} + engines: {node: '>=14.18.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-sanitize@6.0.0: + resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} + + remark-breaks@4.0.0: + resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + + rollup-plugin-visualizer@6.0.11: + resolution: {integrity: sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + rolldown: 1.x || ^1.0.0-beta + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.5.0: + resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} + engines: {node: '>=11.0.0'} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@3.23.0: + resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + ts-md5@2.0.1: + resolution: {integrity: sha512-yF35FCoEOFBzOclSkMNEUbFQZuv89KEQ+5Xz03HrMSGUGB1+r+El+JiGOFwsP4p9RFNzwlrydYoTLvPOuICl9w==} + engines: {node: '>=18'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-api-pro@0.0.6: + resolution: {integrity: sha512-wRA64AFESZkwyqukGgQJAbzF1E77CCYbydy74TwtQ5QopcXql6DsY00E1aCsCSkdH+NyEwOJsb8L5UoaRvndgg==} + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unimport@5.7.0: + resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==} + engines: {node: '>=18.12.0'} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + unplugin-auto-import@21.0.0: + resolution: {integrity: sha512-vWuC8SwqJmxZFYwPojhOhOXDb5xFhNNcEVb9K/RFkyk/3VnfaOjzitWN7v+8DEKpMjSsY2AEGXNgt6I0yQrhRQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@nuxt/kit': ^4.0.0 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-icons@23.0.1: + resolution: {integrity: sha512-rv0XEJepajKzDLvRUWASM8K+8+/CCfZn2jtogXqg6RIp7kpatRc/aFrVJn8ANQA09e++lPEEv9yX8cC9enc+QQ==} + peerDependencies: + '@svgr/core': '>=7.0.0' + '@svgx/core': ^1.0.1 + '@vue/compiler-sfc': ^3.0.2 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@svgx/core': + optional: true + '@vue/compiler-sfc': + optional: true + svelte: + optional: true + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin-vue-components@31.0.0: + resolution: {integrity: sha512-4ULwfTZTLuWJ7+S9P7TrcStYLsSRkk6vy2jt/WTfgUEUb0nW9//xxmrfhyHUEVpZ2UKRRwfRb8Yy15PDbVZf+Q==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@nuxt/kit': ^3.2.2 || ^4.0.0 + vue: ^3.0.0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vue-element-plus-x@1.3.98: + resolution: {integrity: sha512-Mi8wvrsNRfHspzAY1Z4HkKYhfDdSm5/4vMNF82P+W81tbPb1jA2x/6KkldpyZrylRnuO6OBQz5s/Gtt0nzIf6w==} + peerDependencies: + vue: ^3.5.17 + + vue-observe-visibility@2.0.0-alpha.1: + resolution: {integrity: sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==} + peerDependencies: + vue: ^3.0.0 + + vue-resize@2.0.0-alpha.1: + resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} + peerDependencies: + vue: ^3.0.0 + + vue-router@5.0.3: + resolution: {integrity: sha512-nG1c7aAFac7NYj8Hluo68WyWfc41xkEjaR0ViLHCa3oDvTQ/nIuLJlXJX1NUPw/DXzx/8+OKMng045HHQKQKWw==} + peerDependencies: + '@pinia/colada': '>=0.21.2' + '@vue/compiler-sfc': ^3.5.17 + pinia: ^3.0.4 + vue: ^3.5.0 + peerDependenciesMeta: + '@pinia/colada': + optional: true + '@vue/compiler-sfc': + optional: true + pinia: + optional: true + + vue-virtual-scroller@2.0.0-beta.8: + resolution: {integrity: sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==} + peerDependencies: + vue: ^3.2.0 + + vue@3.5.29: + resolution: {integrity: sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.0.2 + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@braintree/sanitize-url@7.1.2': {} + + '@chevrotain/cst-dts-gen@11.0.3': + dependencies: + '@chevrotain/gast': 11.0.3 + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/gast@11.0.3': + dependencies: + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/regexp-to-ast@11.0.3': {} + + '@chevrotain/types@11.0.3': {} + + '@chevrotain/utils@11.0.3': {} + + '@ctrl/tinycolor@4.2.0': {} + + '@element-plus/icons-vue@2.3.2(vue@3.5.29)': + dependencies: + vue: 3.5.29 + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.3)': + dependencies: + eslint: 10.0.3 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.3': + dependencies: + '@eslint/object-schema': 3.0.3 + debug: 4.4.3 + minimatch: 10.2.4 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.5.3': + dependencies: + '@eslint/core': 1.1.1 + + '@eslint/core@1.1.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/object-schema@3.0.3': {} + + '@eslint/plugin-kit@0.6.1': + dependencies: + '@eslint/core': 1.1.1 + levn: 0.4.1 + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + mlly: 1.8.1 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@mermaid-js/parser@0.6.3': + dependencies: + langium: 3.3.1 + + '@rolldown/pluginutils@1.0.0-rc.2': {} + + '@rollup/rollup-android-arm-eabi@4.59.0': + optional: true + + '@rollup/rollup-android-arm64@4.59.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.59.0': + optional: true + + '@rollup/rollup-darwin-x64@4.59.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.59.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.59.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.59.0': + optional: true + + '@rollup/rollup-openbsd-x64@4.59.0': + optional: true + + '@rollup/rollup-openharmony-arm64@4.59.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.59.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.59.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.59.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.59.0': + optional: true + + '@shikijs/core@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 + + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/transformers@3.23.0': + dependencies: + '@shikijs/core': 3.23.0 + '@shikijs/types': 3.23.0 + + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@sxzz/popperjs-es@2.11.8': {} + + '@types/d3-array@3.2.2': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.3': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/d3@7.4.3': + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.8': {} + + '@types/geojson@7946.0.16': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/json-schema@7.0.15': {} + + '@types/katex@0.16.8': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.24 + + '@types/lodash@4.17.24': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + + '@types/trusted-types@2.0.7': + optional: true + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.20': {} + + '@types/web-bluetooth@0.0.21': {} + + '@ungap/structured-clone@1.3.0': {} + + '@vitejs/plugin-vue@6.0.4(vite@7.3.1(less@4.5.1)(yaml@2.8.2))(vue@3.5.29)': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 7.3.1(less@4.5.1)(yaml@2.8.2) + vue: 3.5.29 + + '@vue-macros/common@3.1.2(vue@3.5.29)': + dependencies: + '@vue/compiler-sfc': 3.5.29 + ast-kit: 2.2.0 + local-pkg: 1.1.2 + magic-string-ast: 1.0.3 + unplugin-utils: 0.3.1 + optionalDependencies: + vue: 3.5.29 + + '@vue/compiler-core@3.5.29': + dependencies: + '@babel/parser': 7.29.0 + '@vue/shared': 3.5.29 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.29': + dependencies: + '@vue/compiler-core': 3.5.29 + '@vue/shared': 3.5.29 + + '@vue/compiler-sfc@3.5.29': + dependencies: + '@babel/parser': 7.29.0 + '@vue/compiler-core': 3.5.29 + '@vue/compiler-dom': 3.5.29 + '@vue/compiler-ssr': 3.5.29 + '@vue/shared': 3.5.29 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.8 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.29': + dependencies: + '@vue/compiler-dom': 3.5.29 + '@vue/shared': 3.5.29 + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-api@8.0.7': + dependencies: + '@vue/devtools-kit': 8.0.7 + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-kit@8.0.7': + dependencies: + '@vue/devtools-shared': 8.0.7 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/devtools-shared@8.0.7': {} + + '@vue/reactivity@3.5.29': + dependencies: + '@vue/shared': 3.5.29 + + '@vue/runtime-core@3.5.29': + dependencies: + '@vue/reactivity': 3.5.29 + '@vue/shared': 3.5.29 + + '@vue/runtime-dom@3.5.29': + dependencies: + '@vue/reactivity': 3.5.29 + '@vue/runtime-core': 3.5.29 + '@vue/shared': 3.5.29 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.29(vue@3.5.29)': + dependencies: + '@vue/compiler-ssr': 3.5.29 + '@vue/shared': 3.5.29 + vue: 3.5.29 + + '@vue/shared@3.5.29': {} + + '@vueuse/core@12.0.0': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 12.0.0 + '@vueuse/shared': 12.0.0 + vue: 3.5.29 + transitivePeerDependencies: + - typescript + + '@vueuse/core@13.9.0(vue@3.5.29)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.9.0 + '@vueuse/shared': 13.9.0(vue@3.5.29) + vue: 3.5.29 + + '@vueuse/metadata@12.0.0': {} + + '@vueuse/metadata@13.9.0': {} + + '@vueuse/shared@12.0.0': + dependencies: + vue: 3.5.29 + transitivePeerDependencies: + - typescript + + '@vueuse/shared@13.9.0(vue@3.5.29)': + dependencies: + vue: 3.5.29 + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.29.0 + pathe: 2.0.3 + + ast-walker-scope@0.8.3: + dependencies: + '@babel/parser': 7.29.0 + ast-kit: 2.2.0 + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + axios@1.13.6: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + bail@2.0.2: {} + + balanced-match@4.0.4: {} + + birpc@2.9.0: {} + + brace-expansion@5.0.4: + dependencies: + balanced-match: 4.0.4 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + chatarea@6.0.7: {} + + chevrotain-allstar@0.3.1(chevrotain@11.0.3): + dependencies: + chevrotain: 11.0.3 + lodash-es: 4.17.23 + + chevrotain@11.0.3: + dependencies: + '@chevrotain/cst-dts-gen': 11.0.3 + '@chevrotain/gast': 11.0.3 + '@chevrotain/regexp-to-ast': 11.0.3 + '@chevrotain/types': 11.0.3 + '@chevrotain/utils': 11.0.3 + lodash-es: 4.17.21 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + confbox@0.1.8: {} + + confbox@0.2.4: {} + + copy-anything@2.0.6: + dependencies: + is-what: 3.14.1 + + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.33.1 + + cytoscape-fcose@2.2.0(cytoscape@3.33.1): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.33.1 + + cytoscape@3.33.1: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.0.1 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.11: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.23 + + dayjs@1.11.19: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + define-lazy-prop@2.0.0: {} + + delaunator@5.0.1: + dependencies: + robust-predicates: 3.0.2 + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dompurify@3.3.2: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + element-plus@2.13.5(vue@3.5.29): + dependencies: + '@ctrl/tinycolor': 4.2.0 + '@element-plus/icons-vue': 2.3.2(vue@3.5.29) + '@floating-ui/dom': 1.7.6 + '@popperjs/core': '@sxzz/popperjs-es@2.11.8' + '@types/lodash': 4.17.24 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 12.0.0 + async-validator: 4.2.5 + dayjs: 1.11.19 + lodash: 4.17.23 + lodash-es: 4.17.23 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.23)(lodash@4.17.23) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.29 + transitivePeerDependencies: + - typescript + + emoji-regex@8.0.0: {} + + entities@6.0.1: {} + + entities@7.0.1: {} + + errno@0.1.8: + dependencies: + prr: 1.0.1 + optional: true + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.0.3: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.3 + '@eslint/config-helpers': 0.5.3 + '@eslint/core': 1.1.1 + '@eslint/plugin-kit': 0.6.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.4 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + exsolve@1.0.8: {} + + extend@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.4 + keyv: 4.5.4 + + flatted@3.3.4: {} + + follow-redirects@1.15.11: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + github-markdown-css@5.9.0: {} + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: + optional: true + + hachure-fill@0.5.2: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-sanitize@5.0.2: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.3.0 + unist-util-position: 5.0.0 + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + highlight.js@11.11.1: {} + + hookable@5.5.3: {} + + html-void-elements@3.0.0: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + image-size@0.5.5: + optional: true + + imurmurhash@0.1.4: {} + + internmap@1.0.1: {} + + internmap@2.0.3: {} + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-plain-obj@4.1.0: {} + + is-what@3.14.1: {} + + is-what@5.5.0: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + js-tokens@9.0.1: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + katex@0.16.37: + dependencies: + commander: 8.3.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + khroma@2.1.0: {} + + langium@3.3.1: + dependencies: + chevrotain: 11.0.3 + chevrotain-allstar: 0.3.1(chevrotain@11.0.3) + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + + less@4.5.1: + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.8.1 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.1 + pkg-types: 2.3.0 + quansync: 0.2.11 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash-es@4.17.23: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.23)(lodash@4.17.23): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.23 + lodash-es: 4.17.23 + + lodash@4.17.23: {} + + longest-streak@3.1.0: {} + + magic-string-ast@1.0.3: + dependencies: + magic-string: 0.30.21 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + optional: true + + markdown-table@3.0.4: {} + + marked@16.4.2: {} + + math-intrinsics@1.1.0: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-math@3.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-newline-to-break@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-find-and-replace: 3.0.2 + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + memoize-one@6.0.0: {} + + mermaid@11.12.0: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.0 + '@mermaid-js/parser': 0.6.3 + '@types/d3': 7.4.3 + cytoscape: 3.33.1 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1) + cytoscape-fcose: 2.2.0(cytoscape@3.33.1) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.11 + dayjs: 1.11.19 + dompurify: 3.3.2 + katex: 0.16.37 + khroma: 2.1.0 + lodash-es: 4.17.23 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.3.6 + ts-dedent: 2.2.0 + uuid: 11.1.0 + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.8 + devlop: 1.1.0 + katex: 0.16.37 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: + optional: true + + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.4 + + mitt@2.1.0: {} + + mitt@3.0.1: {} + + mlly@1.8.1: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + + ms@2.1.3: {} + + muggle-string@0.4.1: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.5.0 + optional: true + + normalize-wheel-es@1.2.0: {} + + obug@2.1.1: {} + + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.4: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-manager-detector@1.6.0: {} + + parse-node-version@1.0.1: {} + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + path-data-parser@0.1.0: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + perfect-debounce@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + pify@4.0.1: + optional: true + + pinia@3.0.4(vue@3.5.29): + dependencies: + '@vue/devtools-api': 7.7.9 + vue: 3.5.29 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.1 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prismjs@1.30.0: {} + + property-information@7.1.0: {} + + proxy-from-env@1.1.0: {} + + prr@1.0.1: + optional: true + + punycode@2.3.1: {} + + quansync@0.2.11: {} + + radash@12.1.1: {} + + readdirp@5.0.0: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.8 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.37 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-sanitize@6.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-sanitize: 5.0.2 + + remark-breaks@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-newline-to-break: 2.0.0 + unified: 11.0.5 + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-math@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + require-directory@2.1.1: {} + + rfdc@1.4.1: {} + + robust-predicates@3.0.2: {} + + rollup-plugin-visualizer@6.0.11(rollup@4.59.0): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.6 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.59.0 + + rollup@4.59.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 + fsevents: 2.3.3 + + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + + rw@1.3.3: {} + + safer-buffer@2.1.2: {} + + sax@1.5.0: + optional: true + + scule@1.3.0: {} + + semver@5.7.2: + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shiki@3.23.0: + dependencies: + '@shikijs/core': 3.23.0 + '@shikijs/engine-javascript': 3.23.0 + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + source-map-js@1.2.1: {} + + source-map@0.6.1: + optional: true + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + speakingurl@14.0.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + + stylis@4.3.6: {} + + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + ts-dedent@2.2.0: {} + + ts-md5@2.0.1: {} + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-api-pro@0.0.6: {} + + ufo@1.6.3: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unimport@5.7.0: + dependencies: + acorn: 8.16.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.1 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 2.3.0 + scule: 1.3.0 + strip-literal: 3.1.0 + tinyglobby: 0.2.15 + unplugin: 2.3.11 + unplugin-utils: 0.3.1 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + unplugin-auto-import@21.0.0(@vueuse/core@13.9.0(vue@3.5.29)): + dependencies: + local-pkg: 1.1.2 + magic-string: 0.30.21 + picomatch: 4.0.3 + unimport: 5.7.0 + unplugin: 2.3.11 + unplugin-utils: 0.3.1 + optionalDependencies: + '@vueuse/core': 13.9.0(vue@3.5.29) + + unplugin-icons@23.0.1(@vue/compiler-sfc@3.5.29): + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/utils': 3.1.0 + local-pkg: 1.1.2 + obug: 2.1.1 + unplugin: 2.3.11 + optionalDependencies: + '@vue/compiler-sfc': 3.5.29 + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + unplugin-vue-components@31.0.0(vue@3.5.29): + dependencies: + chokidar: 5.0.0 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.1 + obug: 2.1.1 + picomatch: 4.0.3 + tinyglobby: 0.2.15 + unplugin: 2.3.11 + unplugin-utils: 0.3.1 + vue: 3.5.29 + + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.16.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + + unplugin@3.0.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + uuid@11.1.0: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@7.3.1(less@4.5.1)(yaml@2.8.2): + dependencies: + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.8 + rollup: 4.59.0 + tinyglobby: 0.2.15 + optionalDependencies: + fsevents: 2.3.3 + less: 4.5.1 + yaml: 2.8.2 + + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-uri@3.0.8: {} + + vue-element-plus-x@1.3.98(rollup@4.59.0)(vue@3.5.29): + dependencies: + '@element-plus/icons-vue': 2.3.2(vue@3.5.29) + '@shikijs/transformers': 3.23.0 + '@vueuse/core': 13.9.0(vue@3.5.29) + chatarea: 6.0.7 + deepmerge: 4.3.1 + dompurify: 3.3.2 + github-markdown-css: 5.9.0 + highlight.js: 11.11.1 + mermaid: 11.12.0 + prismjs: 1.30.0 + property-information: 7.1.0 + radash: 12.1.1 + rehype-katex: 7.0.1 + rehype-raw: 7.0.0 + rehype-sanitize: 6.0.0 + remark-breaks: 4.0.0 + remark-gfm: 4.0.1 + remark-math: 6.0.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + rollup-plugin-visualizer: 6.0.11(rollup@4.59.0) + shiki: 3.23.0 + ts-md5: 2.0.1 + typescript-api-pro: 0.0.6 + unified: 11.0.5 + vue: 3.5.29 + transitivePeerDependencies: + - rolldown + - rollup + - supports-color + + vue-observe-visibility@2.0.0-alpha.1(vue@3.5.29): + dependencies: + vue: 3.5.29 + + vue-resize@2.0.0-alpha.1(vue@3.5.29): + dependencies: + vue: 3.5.29 + + vue-router@5.0.3(@vue/compiler-sfc@3.5.29)(pinia@3.0.4(vue@3.5.29))(vue@3.5.29): + dependencies: + '@babel/generator': 7.29.1 + '@vue-macros/common': 3.1.2(vue@3.5.29) + '@vue/devtools-api': 8.0.7 + ast-walker-scope: 0.8.3 + chokidar: 5.0.0 + json5: 2.2.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.1 + muggle-string: 0.4.1 + pathe: 2.0.3 + picomatch: 4.0.3 + scule: 1.3.0 + tinyglobby: 0.2.15 + unplugin: 3.0.0 + unplugin-utils: 0.3.1 + vue: 3.5.29 + yaml: 2.8.2 + optionalDependencies: + '@vue/compiler-sfc': 3.5.29 + pinia: 3.0.4(vue@3.5.29) + + vue-virtual-scroller@2.0.0-beta.8(vue@3.5.29): + dependencies: + mitt: 2.1.0 + vue: 3.5.29 + vue-observe-visibility: 2.0.0-alpha.1(vue@3.5.29) + vue-resize: 2.0.0-alpha.1(vue@3.5.29) + + vue@3.5.29: + dependencies: + '@vue/compiler-dom': 3.5.29 + '@vue/compiler-sfc': 3.5.29 + '@vue/runtime-dom': 3.5.29 + '@vue/server-renderer': 3.5.29(vue@3.5.29) + '@vue/shared': 3.5.29 + + web-namespaces@2.0.1: {} + + webpack-virtual-modules@0.6.2: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + y18n@5.0.8: {} + + yaml@2.8.2: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + zwitch@2.0.4: {} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..c8b308d --- /dev/null +++ b/src/App.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/apis/auth/auth.js b/src/apis/auth/auth.js new file mode 100644 index 0000000..dcced7c --- /dev/null +++ b/src/apis/auth/auth.js @@ -0,0 +1,51 @@ +import service from '@/utils/request' + +const BASE_URL = '/auth' + +/** @desc 账号登录 */ +export function accountLogin(req) { + return service.post(`${BASE_URL}/account`, req) +} +// 获取邀请码 +export function getCodePhone(params) { + return service.post(`${BASE_URL}/register/phone`, params) +} + +/** @desc 手机号登录 */ +export function phoneLogin(req) { + return service.post(`${BASE_URL}/phone`, req) +} + +/** @desc 邮箱登录 */ +export function emailLogin(req) { + return service.post(`${BASE_URL}/email`, req) +} + +/** @desc 三方账号登录 */ +export function socialLogin(source, req) { + return service.post(`/oauth/${source}`, req) +} + +/** @desc 三方账号登录授权 */ +export function socialAuth(source) { + return service.get(`/oauth/${source}`) +} + +/** @desc 退出登录 */ +export function logout() { + return service.post(`${BASE_URL}/logout`) +} + +/** @desc 获取用户信息 */ +export const getUserInfo = () => { + return service.get(`${BASE_URL}/user/info`) +} + +/** @desc 获取路由信息 */ +export const getUserRoute = () => { + return service.get(`${BASE_URL}/route`) +} + +export const checkUsertoken = () => { + return service.get(`${BASE_URL}/check/token`) +} diff --git a/src/apis/auth/captcha.js b/src/apis/auth/captcha.js new file mode 100644 index 0000000..390a799 --- /dev/null +++ b/src/apis/auth/captcha.js @@ -0,0 +1,32 @@ +import service from '@/utils/request' + +const BASE_URL = '/captcha' + +/** @desc 获取图片验证码 */ +export function getImageCaptcha() { + return service.get(`${BASE_URL}/image`) +} +// **获取短信 +export function getSmsCaptchaBin(phone) { + return service.get(`${BASE_URL}/sms?phone=${phone}`) +} + +/** @desc 获取短信验证码 */ +export function getSmsCaptcha(phone, captchaReq) { + return service.get(`${BASE_URL}/sms?phone=${phone}&captchaVerification=${encodeURIComponent(captchaReq.captchaVerification || '')}`) +} + +/** @desc 获取邮箱验证码 */ +export function getEmailCaptcha(email, captchaReq) { + return service.get(`${BASE_URL}/mail?email=${email}&captchaVerification=${encodeURIComponent(captchaReq.captchaVerification || '')}`) +} + +/** @desc 获取行为验证码 */ +export function getBehaviorCaptcha(req) { + return service.get(`${BASE_URL}/behavior`, req) +} + +/** @desc 校验行为验证码 */ +export function checkBehaviorCaptcha(req) { + return service.post(`${BASE_URL}/behavior`, req) +} diff --git a/src/apis/auth/index.js b/src/apis/auth/index.js new file mode 100644 index 0000000..a824e7c --- /dev/null +++ b/src/apis/auth/index.js @@ -0,0 +1,2 @@ +export * from './auth.js' +export * from './captcha.js' diff --git a/src/apis/collection/index.js b/src/apis/collection/index.js new file mode 100644 index 0000000..5d9a690 --- /dev/null +++ b/src/apis/collection/index.js @@ -0,0 +1,18 @@ +import service from '@/utils/request' + +const BASE_URL = '/business' + +/** @desc 传入userId、url、clothesId */ +export function setCollectImg(req) { + return service.post(`${BASE_URL}/collect`, req) +} + +/** @desc 根据id批量取消收藏 */ +export function delCollectImg(req) { + return service.del(`${BASE_URL}/collect/batchDelete`, req) +} + +/** @desc 根据userId分页查询收藏 */ +export function getCollectImg(req) { + return service.get(`${BASE_URL}/collect/page`, req) +} diff --git a/src/apis/createRoot/index.js b/src/apis/createRoot/index.js new file mode 100644 index 0000000..a62ab5b --- /dev/null +++ b/src/apis/createRoot/index.js @@ -0,0 +1,18 @@ +import service from '@/utils/request' + +const BASE_URL = '/business' + +/** @desc 通过rootid查询包含的任务列表 */ +export function setTaskRootId(req) { + return service.post(`${BASE_URL}/rootTask`, req) +} + +/** @desc 查询用户所含的rootId */ +export function AllRootTask(req) { + return service.get(`${BASE_URL}/rootTask/page`, { params: req }) +} + +/** @desc 查询用户所含的rootId */ +// export function getLibraryImg(req) { +// return service.put(`${BASE_URL}/rootTask/${req}`) +// } diff --git a/src/apis/history/index.js b/src/apis/history/index.js new file mode 100644 index 0000000..85a4241 --- /dev/null +++ b/src/apis/history/index.js @@ -0,0 +1,13 @@ +import service from '@/utils/request' + +const BASE_URL = '/billing' + +/** @desc 通过rootid查询包含的任务列表 */ +export function getTaskListByRootId(req) { + return service.post(`${BASE_URL}/queryTaskListByRootId`, req) +} + +/** @desc 查询用户所含的rootId */ +export function getLibraryImg(req) { + return service.get(`${BASE_URL}/page`, { params: req }) +} diff --git a/src/apis/library/index.js b/src/apis/library/index.js new file mode 100644 index 0000000..90f5e85 --- /dev/null +++ b/src/apis/library/index.js @@ -0,0 +1,18 @@ +import service from '@/utils/request' + +const BASE_URL = '/business/huandaResource' + +/** @desc 添加图片 */ +export function addLibraryImg(req) { + return service.post(`${BASE_URL}`, req) +} + +/** @desc 删除图片 */ +export function delLibraryImg(req) { + return service.post(`${BASE_URL}/batchDelete`, req) +} + +/** @desc 查询单个库的所有图片 */ +export function getLibraryImg(req) { + return service.get(`${BASE_URL}/page`, { params: req }) +} diff --git a/src/apis/pay/aliPay.js b/src/apis/pay/aliPay.js new file mode 100644 index 0000000..9871971 --- /dev/null +++ b/src/apis/pay/aliPay.js @@ -0,0 +1,28 @@ +// axios 发送ajax请求 +import service from '@/utils/request' + +export default { + + // 发起支付请求 + tradePagePay(productId, userId, totalFee) { + return service({ + url: `/pay/ali-pay/trade/page/pay/${productId}`, + params: { userId, totalFee }, + method: 'post' + }) + }, + + cancel(orderNo) { + return service({ + url: `/pay/ali-pay/trade/close/${orderNo}`, + method: 'post' + }) + }, + + refunds(orderNo, reason) { + return service({ + url: `/pay/ali-pay/trade/refund/${orderNo}/${reason}`, + method: 'post' + }) + } +} diff --git a/src/apis/pay/index.js b/src/apis/pay/index.js new file mode 100644 index 0000000..96dbe8f --- /dev/null +++ b/src/apis/pay/index.js @@ -0,0 +1,11 @@ +import aliPayApi from './aliPay' +import orderInfoApi from './orderInfo' +import productApi from './product' +import wxPayApi from './wxPay' + +export { + aliPayApi, + orderInfoApi, + productApi, + wxPayApi +} diff --git a/src/apis/pay/orderInfo.js b/src/apis/pay/orderInfo.js new file mode 100644 index 0000000..38ceb69 --- /dev/null +++ b/src/apis/pay/orderInfo.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export default { + + // 查询订单列表 + list() { + return request({ + url: '/apy/order-info/list', + method: 'get' + }) + }, + + // 查询订单状态 + queryOrderStatus(orderNo) { + return request({ + url: `/pay/order-info/query-order-status/${orderNo}`, + method: 'get' + }) + }, + // 查询用户的sysBeans + queryUserSysBeans(userId) { + return request({ + url: `/pay/beans/getSysBeans/${userId}`, + method: 'get' + }) + } +} diff --git a/src/apis/pay/product.js b/src/apis/pay/product.js new file mode 100644 index 0000000..8b980d5 --- /dev/null +++ b/src/apis/pay/product.js @@ -0,0 +1,13 @@ +// axios 发送ajax请求 +import request from '@/utils/request' + +export default { + + // 查询商品列表(对远程接口调用) + list() { + return request({ + url: '/pay/product/list', + method: 'get' + }) + } +} diff --git a/src/apis/pay/wxPay.js b/src/apis/pay/wxPay.js new file mode 100644 index 0000000..08538bb --- /dev/null +++ b/src/apis/pay/wxPay.js @@ -0,0 +1,36 @@ +// axios 发送ajax请求 +import request from '@/utils/request' + +export default { + + // Native下单 + nativePay(productId, userId, totalFee) { + return request({ + url: `/pay/wx-pay/native/${productId}`, + params: { userId, totalFee }, + method: 'post' + }) + }, + + // Native下单(v2) + nativePayV2(productId) { + return request({ + url: `/pay/wx-pay-v2/native/${productId}`, + method: 'post' + }) + }, + + cancel(orderNo) { + return request({ + url: `/pay/wx-pay/cancel/${orderNo}`, + method: 'post' + }) + }, + + refunds(orderNo, reason) { + return request({ + url: `/pay/wx-pay/refunds/${orderNo}/${reason}`, + method: 'post' + }) + } +} diff --git a/src/apis/workflows.json b/src/apis/workflows.json new file mode 100644 index 0000000..a4b3d65 --- /dev/null +++ b/src/apis/workflows.json @@ -0,0 +1,107 @@ +{ + "model": { + "workflowId": "1998946903104610306", + "nodeInfoList": [ + { + "nodeId": "12", + "fieldName": "text", + "fieldValue": "一位中年女医生,短发利落清爽,身着薄荷绿医务衬衫。她以站立的姿势,面向镜头。背景为柔和的白色眼神明亮而充满鼓励。" + }, + { + "nodeId": "16", + "fieldName": "aspect_ratio", + "fieldValue": "aspect_ratio" + } + ] + }, + "background_pose": { + "workflowId": "1996842562587611138", + "nodeInfoList": [ + { + "nodeId": "11", + "fieldName": "text", + "fieldValue": "" + }, + { + "nodeId": "10", + "fieldName": "aspect_ratio", + "fieldValue": "aspect_ratio" + } + ] + }, + "huanda": { + "workflowId": "1996836769582784513", + "nodeInfoList": [ + { + "nodeId": "2", + "fieldName": "image", + "fieldValue": "image" + }, + { + "nodeId": "3", + "fieldName": "image", + "fieldValue": "image" + }, + { + "nodeId": "10", + "fieldName": "image", + "fieldValue": "image" + }, + { + "nodeId": "14", + "fieldName": "image", + "fieldValue": "image" + }, + { + "nodeId": "18", + "fieldName": "index", + "fieldValue": "index" + }, + { + "nodeId": "34", + "fieldName": "index", + "fieldValue": "index" + }, + { + "nodeId": "37", + "fieldName": "index", + "fieldValue": "index" + }, + { + "nodeId": "29", + "fieldName": "aspect_ratio", + "fieldValue": "aspect_ratio" + } + ] + }, + "video": { + "workflowId": "1996136037531500545", + "nodeInfoList": [ + { + "nodeId": "55", + "fieldName": "prompt", + "fieldValue": "" + }, + { + "nodeId": "16", + "fieldName": "image", + "fieldValue": "image" + } + ] + }, + "talk": { + "workflowId": "1996137696278069250", + "nodeInfoList": [ + { + "nodeId": "1", + "fieldName": "prompt", + "fieldValue": "" + }, + { + "nodeId": "2", + "fieldName": "image", + "fieldValue": "image" + } + ] + } +} \ No newline at end of file diff --git a/src/assets/dialog/darkArrow.svg b/src/assets/dialog/darkArrow.svg new file mode 100644 index 0000000..c246f8c --- /dev/null +++ b/src/assets/dialog/darkArrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/dialog/image4-1-1-BZWQeEAk.png b/src/assets/dialog/image4-1-1-BZWQeEAk.png new file mode 100644 index 0000000000000000000000000000000000000000..703921ca18fc12019b0919cb23c1fcbdac83f53d GIT binary patch literal 69845 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 literal 0 HcmV?d00001 diff --git a/src/assets/dialog/originalImage.svg b/src/assets/dialog/originalImage.svg new file mode 100644 index 0000000..b8a4bcd --- /dev/null +++ b/src/assets/dialog/originalImage.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/dialog/referenceDiagram.svg b/src/assets/dialog/referenceDiagram.svg new file mode 100644 index 0000000..e680b5d --- /dev/null +++ b/src/assets/dialog/referenceDiagram.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/dialog/writerArrow.svg b/src/assets/dialog/writerArrow.svg new file mode 100644 index 0000000..8e4a9b4 --- /dev/null +++ b/src/assets/dialog/writerArrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/display/arrow.svg b/src/assets/display/arrow.svg new file mode 100644 index 0000000..a48949a --- /dev/null +++ b/src/assets/display/arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/display/back.svg b/src/assets/display/back.svg new file mode 100644 index 0000000..9f1727c --- /dev/null +++ b/src/assets/display/back.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/display/brush.svg b/src/assets/display/brush.svg new file mode 100644 index 0000000..97a398d --- /dev/null +++ b/src/assets/display/brush.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/display/collection.svg b/src/assets/display/collection.svg new file mode 100644 index 0000000..fd68ea8 --- /dev/null +++ b/src/assets/display/collection.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/display/download.svg b/src/assets/display/download.svg new file mode 100644 index 0000000..a98142e --- /dev/null +++ b/src/assets/display/download.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/Img/index.vue b/src/components/Img/index.vue new file mode 100644 index 0000000..4c0aa48 --- /dev/null +++ b/src/components/Img/index.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/src/components/Select/index.vue b/src/components/Select/index.vue new file mode 100644 index 0000000..a272520 --- /dev/null +++ b/src/components/Select/index.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/components/UploadPicture.vue b/src/components/UploadPicture.vue new file mode 100644 index 0000000..0fdc5d5 --- /dev/null +++ b/src/components/UploadPicture.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/components/dialogBox/index.vue b/src/components/dialogBox/index.vue new file mode 100644 index 0000000..dd48f18 --- /dev/null +++ b/src/components/dialogBox/index.vue @@ -0,0 +1,335 @@ + + + + + diff --git a/src/components/dialogBox/model/index.vue b/src/components/dialogBox/model/index.vue new file mode 100644 index 0000000..8c5d7f7 --- /dev/null +++ b/src/components/dialogBox/model/index.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/src/components/dialogBox/proportion/index.vue b/src/components/dialogBox/proportion/index.vue new file mode 100644 index 0000000..83a9b9b --- /dev/null +++ b/src/components/dialogBox/proportion/index.vue @@ -0,0 +1,362 @@ + + + + + \ No newline at end of file diff --git a/src/components/dialogBox/quantity/index.vue b/src/components/dialogBox/quantity/index.vue new file mode 100644 index 0000000..c6e6941 --- /dev/null +++ b/src/components/dialogBox/quantity/index.vue @@ -0,0 +1,78 @@ + + + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..54e3c44 --- /dev/null +++ b/src/main.js @@ -0,0 +1,15 @@ +import { createPinia } from 'pinia' +import { createApp } from 'vue' +import VueVirtualScroller from 'vue-virtual-scroller' +import App from './App.vue' +import router from './router' +import 'vue-virtual-scroller/dist/vue-virtual-scroller.css' +import './style.css' + +const pinia = createPinia() +const app = createApp(App) + +app.use(VueVirtualScroller) +app.use(pinia) +app.use(router) +app.mount('#app') diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..d3fe601 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,73 @@ +import { createRouter, createWebHistory } from 'vue-router' +import { useDisplayStore, useUserStore } from '@/stores' +import { getToken } from '@/utils/auth' + +const routes = [ + { + path: '/', + redirect: '/home' + }, + { + path: '/login', + name: 'Login', + component: () => import('@/views/login/index.vue') + }, + { + path: '/home', + name: 'home', + component: () => import('@/views/home/index.vue') + }, + { + path: '/generate', + name: 'generate', + component: () => import('@/views/home/index.vue') + } +] + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes +}) + +// router.beforeEach(async (to, from, next) => { +// // 白名单路径(不需要验证 token 的路径) +// const whiteList = ['/login'] + +// // 如果访问的是白名单路径,直接放行 +// if (whiteList.includes(to.path)) { +// return next() +// } + +// // 检查是否有 token +// const token = getToken() +// if (!token) { +// // 没有 token,重定向到登录页 +// return next('/login') +// } +// useDisplayStore().sidebarShow = to.path.split('/')[1] +// // 获取用户 store 实例 +// const userStore = useUserStore() + +// // 检查 token 是否有效 +// try { +// const isTokenValid = await userStore.checkTokenValid() +// console.log(isTokenValid) +// if (isTokenValid) { +// // token 有效,允许访问 +// if (!userStore.userInfo.id) { +// // 如果用户信息不存在,则从服务器获取 +// await userStore.getInfo() +// } +// next() +// } else { +// // token 无效,重定向到登录页 +// next('/login') +// } +// } catch (error) { +// // 验证过程中出错,重定向到登录页 +// console.error('验证 token 时出错:', error) +// next('/login') +// } +// }) + +export default router diff --git a/src/stores/display.js b/src/stores/display.js new file mode 100644 index 0000000..bd1498f --- /dev/null +++ b/src/stores/display.js @@ -0,0 +1,9 @@ +const DisplayStoreSetup = () => { + const Sender_variant = ref('default') + return { + Sender_variant + } +} + +// eslint-disable-next-line no-undef +export const useDisplayStore = defineStore('display', DisplayStoreSetup) diff --git a/src/stores/index.js b/src/stores/index.js new file mode 100644 index 0000000..6f55357 --- /dev/null +++ b/src/stores/index.js @@ -0,0 +1,3 @@ +export * from './display' +export * from './param' +export * from './user' diff --git a/src/stores/param.js b/src/stores/param.js new file mode 100644 index 0000000..704fced --- /dev/null +++ b/src/stores/param.js @@ -0,0 +1,8 @@ +const ParamStoreSetup = () => { + + return { + } +} + +// eslint-disable-next-line no-undef +export const useParamStore = defineStore('params', ParamStoreSetup) diff --git a/src/stores/user.js b/src/stores/user.js new file mode 100644 index 0000000..d71c9b5 --- /dev/null +++ b/src/stores/user.js @@ -0,0 +1,142 @@ +import { + accountLogin as accountLoginApi, + checkUsertoken as checkUsertokenApi, + getCodePhone, + getUserInfo as getUserInfoApi, + logout as logoutApi, + phoneLogin as phoneLoginApi, + socialLogin as socialLoginApi +} from '@/apis/auth' +import { clearToken, getToken, setToken } from '@/utils/auth' + +const storeSetup = () => { + const userInfo = reactive({ + id: '', + username: '', + nickname: '', + gender: 0, + email: '', + phone: '', + avatar: '', + pwdResetTime: '', + pwdExpired: false, + registrationDate: '', + deptName: '', + roles: [], + permissions: [], + routers: [] + }) + const name = computed(() => userInfo.nickname) + const username = computed(() => userInfo.username) + + const token = ref(getToken() || '') + const pwdExpiredShow = ref(true) + const roles = ref([]) // 当前用户角色 + const permissions = ref([]) // 当前角色权限标识集合 + + const dept = ref({}) // 当前用户所在部门集合 + const schoolURL = ref({ school: '', college: '' }) + const isLogin = ref(false) + + // 重置token + const resetToken = () => { + token.value = '' + clearToken() + } + + // 检查token有效性 + const checkTokenValid = async () => { + const res = await checkUsertokenApi() + console.log('checkTokenValid:', res) // 打印响应数据以进行调试 + if (res.code === '401' || res.success === false) { + // 检查响应数据是否存在,以避免空响应导致的错误 + console.error('Token is invalid:', res.message)// 打印错误信息以进行调试 + return false + } + console.log('Token is valid') // 打印成功信息以进行调试 + return true + } + + // 获取用户信息 + const getInfo = async () => { + const res = await getUserInfoApi() + Object.assign(userInfo, res.data) + userInfo.avatar = getAvatar(res.data.avatar, res.data.gender) + userInfo.username = res.data.username + if (typeof res.data.routers === 'string' && res.data.routers.trim() !== '') { + userInfo.routers = res.data.routers.split(',').map((item) => item.trim()) // 补充trim处理更完善 + } else { + userInfo.routers = [] + } + if (res.data.roles && res.data.roles.length) { + roles.value = res.data.roles + permissions.value = res.data.permissions + } + } + + // 登录 + const accountLogin = async (req) => { + const res = await accountLoginApi(req) + if (res.data == null || res.code === '500' || res.success === false) { + // eslint-disable-next-line no-undef + ElMessage({ + title: '提示', + message: res.msg || '操作失败,请稍后重试' + }) + isLogin.value = false + return false + } + setToken(res.data.token) // res.data.generateToken + token.value = res.data.token + getInfo() + // isLogin.value = true + return true + } + + // 退出登录回调 + const logoutCallBack = async () => { + roles.value = [] + permissions.value = [] + pwdExpiredShow.value = true + isLogin.value = false + resetToken() + } + + // 退出登录 + const logout = async () => { + try { + await logoutApi() + await logoutCallBack() + return true + } catch (error) { + console.error('Logout failed:', error.message) // 处理错误 + return false + } + } + + return { + userInfo, + name, + token, + roles, + permissions, + pwdExpiredShow, + dept, + username, + isLogin, + accountLogin, + logout, + logoutCallBack, + getInfo, + resetToken, + checkTokenValid + } +} + +// eslint-disable-next-line no-undef +export const useUserStore = defineStore('user', storeSetup, { + persist: { + paths: ['token', 'roles', 'permissions', 'pwdExpiredShow', 'username'], + storage: localStorage + } +}) diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..98cbd70 --- /dev/null +++ b/src/style.css @@ -0,0 +1,52 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + /* width: 100%; */ + font-family: "Microsoft YaHei"; + font-size: 14px; + line-height: 1.5; + font-weight: 400; + color: #333333; + background-color: #f5f5f5; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + width: 100%; + height: 100vh; + min-width: 1500px; + /* min-height: 960px; */ + overflow-y: hidden; +} + +#app { + width: 100%; + height: 100%; +} + +/* 滚动条样式 */ +::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +::-webkit-scrollbar-thumb { + background: #c1c1c1; + border-radius: 3px; +} + +::-webkit-scrollbar-thumb:hover { + background: #a8a8a8; +} diff --git a/src/utils/auth.ts b/src/utils/auth.ts new file mode 100644 index 0000000..f2ea509 --- /dev/null +++ b/src/utils/auth.ts @@ -0,0 +1,19 @@ +const TOKEN_KEY = 'token' + +const isLogin = () => { + return !!localStorage.getItem(TOKEN_KEY) +} + +const getToken = () => { + return localStorage.getItem(TOKEN_KEY) +} + +const setToken = (token: string) => { + localStorage.setItem(TOKEN_KEY, token) +} + +const clearToken = () => { + localStorage.removeItem(TOKEN_KEY) +} + +export { isLogin, getToken, setToken, clearToken } diff --git a/src/utils/createTask.js b/src/utils/createTask.js new file mode 100644 index 0000000..874dc00 --- /dev/null +++ b/src/utils/createTask.js @@ -0,0 +1,78 @@ +import workflows from '@/apis/workflows.json' +import { useParamStore } from '@/stores' + +export async function getFormattedTime(date = new Date()) { + const year = date.getFullYear() + const month = String(date.getMonth() + 1).padStart(2, '0') // 月份从0开始,需要+1 + const day = String(date.getDate()).padStart(2, '0') + const hours = String(date.getHours()).padStart(2, '0') + const minutes = String(date.getMinutes()).padStart(2, '0') + + return `${year}-${month}-${day} ${hours}:${minutes}` +} + +// 处理音频生成任务的数据并返回 +export async function createTask(taskType = 1, params, title = '模特展示图') { + const paramStore = useParamStore() + const data = { + taskId: params.taskId, + taskRootId: params.taskRootId || paramStore.taskRootId, + parentTaskId: params.parentTaskId || '0', + AIGC: 'huanda', + platform: 'runninghub', + taskType, + modelName: 'Flux', + title, + file_type: params.file_type, + payload: {}, + createTime: params.time, + parentCreateTime: params.parentCreateTime || '', + parentIndex: params.parentIndex || '', + token: params.token + } + + if (taskType === 1) { + data.payload = workflows.huanda + data.payload.nodeInfoList[0].fieldValue = paramStore.params.clothes + data.payload.nodeInfoList[1].fieldValue = paramStore.params.model + data.payload.nodeInfoList[2].fieldValue = paramStore.params.pose + data.payload.nodeInfoList[3].fieldValue = paramStore.params.background + data.payload.nodeInfoList[4].fieldValue = paramStore.params.model ? 0 : 1 + data.payload.nodeInfoList[5].fieldValue = paramStore.params.pose ? 0 : 1 + data.payload.nodeInfoList[6].fieldValue = paramStore.params.background ? 0 : 1 + data.payload.nodeInfoList[7].fieldValue = params.prompt + data.payload.nodeInfoList[7].fieldValue = params.aspectRatio + } else if (taskType === 2) { // 对话修改 + data.parentTaskId = params.parentTaskId + + data.payload = workflows.talk + data.payload.nodeInfoList[0].fieldValue = params.text + data.payload.nodeInfoList[1].fieldValue = params.talkImg + } else if (taskType === 3) { // 生成视频 + data.parentTaskId = params.parentTaskId + + data.payload = workflows.video + data.payload.nodeInfoList[0].fieldValue = params.text + data.payload.nodeInfoList[1].fieldValue = params.videoImg + } else if (taskType === 4) { // AI生成模特 + data.payload = workflows.model + data.payload.nodeInfoList[0].fieldValue = params.text + data.payload.nodeInfoList[1].fieldValue = params.aspectRatio + } else if (taskType === 5 || taskType === 6) { // AI生成服装背景 + // data.parentTaskId = params.parentTaskId + + data.payload = workflows.background_pose + data.payload.nodeInfoList[0].fieldValue = params.text + data.payload.nodeInfoList[1].fieldValue = params.aspectRatio + } + console.log('data:', data) + return data +} + +// 获取音频结果 +export async function getTask(result) { + if (result.code === 0 && result.msg === 'success') { + return { type: true, url: result.data[0].fileUrl } + } + return { type: false, message: result.data.exception_message } +} diff --git a/src/utils/downloadImage.js b/src/utils/downloadImage.js new file mode 100644 index 0000000..d17e6c3 --- /dev/null +++ b/src/utils/downloadImage.js @@ -0,0 +1,76 @@ +// 生成文件名的辅助函数 +export async function generateFilename(url, prefix = 'image') { + try { + const urlObj = new URL(url) + const pathname = urlObj.pathname + let filename = pathname.substring(pathname.lastIndexOf('/') + 1) + + // 如果URL中没有文件名或扩展名,根据类型生成 + if (!filename || !filename.includes('.')) { + const timestamp = new Date().getTime() + // 根据URL内容推断文件类型,否则默认为png + const extension = url.includes('.jpg') || url.includes('.jpeg') + ? '.jpg' + : url.includes('.gif') + ? '.gif' + : url.includes('.webp') ? '.webp' : '.png' + filename = `${prefix}_${timestamp}${extension}` + } + + return filename + } catch (error) { + console.error('URL解析失败:', error) + // 如果URL解析失败,生成默认文件名 + const timestamp = new Date().getTime() + return `${prefix}_${timestamp}.png` + } +} + +// 通用下载图片函数 +export async function downloadImage(imageUrl, filenamePrefix = 'image') { + if (!imageUrl) { + // 这里不能使用ElMessage,因为在工具函数中 + console.warn('暂无图片可下载') + return + } + + try { + // 检查是否为外部链接 + if (imageUrl.startsWith('http')) { + const response = await fetch(imageUrl) + const blob = await response.blob() + + // 创建临时链接 + const link = document.createElement('a') + const url = URL.createObjectURL(blob) + + // 生成合适的文件名 + const filename = await generateFilename(imageUrl, filenamePrefix) + link.href = url + link.download = filename + + // 添加到DOM并触发点击 + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + + // 记得释放对象URL + URL.revokeObjectURL(url) + + console.log('图片下载成功') + } else { + // 如果是本地路径,直接下载 + const link = document.createElement('a') + link.href = imageUrl + const filename = await generateFilename(imageUrl, filenamePrefix) + link.download = filename + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + + console.log('图片下载成功') + } + } catch (error) { + console.error('下载失败:', error) + } +} diff --git a/src/utils/encrypt.ts b/src/utils/encrypt.ts new file mode 100644 index 0000000..54f3ee3 --- /dev/null +++ b/src/utils/encrypt.ts @@ -0,0 +1,39 @@ +import Base64 from 'crypto-js/enc-base64' +import UTF8 from 'crypto-js/enc-utf8' +import { JSEncrypt } from 'jsencrypt' +import md5 from 'crypto-js/md5' +import CryptoJS from 'crypto-js' + +export function encodeByBase64(txt: string) { + return UTF8.parse(txt).toString(Base64) +} + +export function decodeByBase64(txt: string) { + return Base64.parse(txt).toString(UTF8) +} + +export function encryptByMd5(txt: string) { + return md5(txt).toString() +} + +const publicKey + = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM51dgYtMyF+tTQt80sfFOpSV27a7t9u' + + 'aUVeFrdGiVxscuizE7H8SMntYqfn9lp8a5GH5P1/GGehVjUD2gF/4kcCAwEAAQ==' + +export function encryptByRsa(txt: string) { + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 设置公钥 + return encryptor.encrypt(txt) // 对数据进行加密 +} + +const defaultKeyWork = 'XwKsGlMcdPMEhR1B' + +export function encryptByAes(word: string, keyWord = defaultKeyWork) { + const key = CryptoJS.enc.Utf8.parse(keyWord) + const arcs = CryptoJS.enc.Utf8.parse(word) + const encrypted = CryptoJS.AES.encrypt(arcs, key, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }) + return encrypted.toString() +} diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..0fc640b --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,86 @@ +import axios from 'axios' +import { getToken } from '@/utils/auth' +import { userError } from './tokenError' + +// 创建axios实例 +const service = axios.create({ + baseURL: import.meta.env.VITE_API_BASE_URL, + timeout: 50000 // 请求超时时间 +}) + +const StatusCodeMessage = { + 200: '服务器成功返回请求的数据', + 201: '新建或修改数据成功。', + 202: '一个请求已经进入后台排队(异步任务)', + 204: '删除数据成功', + 400: '请求错误(400)', + 401: '未授权,请重新登录(401)', + 403: '拒绝访问(403)', + 404: '请求出错(404)', + 408: '请求超时(408)', + 500: '服务器错误(500)', + 501: '服务未实现(501)', + 502: '网络错误(502)', + 503: '服务不可用(503)', + 504: '网络超时(504)' +} + +// request拦截器 +service.interceptors.request.use( + (config) => { + const token = getToken() + if (token) { + if (!config.headers) { + config.headers = {} + } + config.headers.Authorization = `Bearer ${token}` + } + // console.log(config.baseURL) + if (config.url?.startsWith(import.meta.env.VITE_API_PAY_PREFIX)) { // 支付服务路由 + config.baseURL = import.meta.env.VITE_API_PAY_TARGET + } else if (config.url?.startsWith(import.meta.env.VITE_API_AIGC_PREFIX)) { // 资源服务路由 + // config.url = config.url.replace(import.meta.env.VITE_API_AIGC_PREFIX, '') + config.baseURL = import.meta.env.VITE_API_AIGC_TARGET + } else if (config.url?.startsWith(import.meta.env.VITE_API_MUSIC_WORKFLOW_PREFIX)) { // 音频生成平台工作流服务路由 + config.url = config.url.replace(import.meta.env.VITE_API_MUSIC_WORKFLOW_PREFIX, '') + config.baseURL = import.meta.env.VITE_API_MUSIC_WORKFLOW_TARGET + } + return config + }, + (error) => { + // Do something with request error + Promise.reject(error) + } +) + +// response 拦截器 +service.interceptors.response.use( + (response) => { + const { data } = response + const { success, code, msg } = data + if (success || code === 0) { + console.log('msg: \n', msg) + return response.data + } else if (code === 401 && response.config.url !== '/auth/check/token`') { // 判断code=401时进行页面刷新,但是不对检验token这个路由的请求判断,防止出现死循环 + userError() + } + console.log('CodeMessage: \n', StatusCodeMessage[code]) + console.log('msg: \n', msg) + return response.data + }, + (error) => { + console.log('err: \n', error) + return Promise.reject(error) + } +) + +// 添加HTTP DELETE方法 +service.del = function (url, config) { + return service({ + method: 'delete', + url, + ...config + }) +} + +export default service diff --git a/src/utils/tokenError.js b/src/utils/tokenError.js new file mode 100644 index 0000000..61038f9 --- /dev/null +++ b/src/utils/tokenError.js @@ -0,0 +1,15 @@ +export function userError() { + // eslint-disable-next-line no-undef + ElNotification({ + title: '身份错误', + // eslint-disable-next-line no-undef + message: h('i', { style: 'color: teal' }, '检测到身份验证失败,请手动刷新页面,\n或者5秒后自动刷新页面重试,'), + type: 'error', + duration: 5000 + }) + Promise.resolve().then(() => { + setTimeout(() => { + window.location.reload() + }, 5000) + }) +} diff --git a/src/utils/uploadImage.js b/src/utils/uploadImage.js new file mode 100644 index 0000000..e69de29 diff --git a/src/utils/websocket.js b/src/utils/websocket.js new file mode 100644 index 0000000..67be2a1 --- /dev/null +++ b/src/utils/websocket.js @@ -0,0 +1,402 @@ +import { ElNotification } from 'element-plus' +import { h, ref } from 'vue' +import { setTaskRootId } from '@/apis/createRoot' +import { useDisplayStore, useParamStore, useUserStore } from '@/stores' +import { getToken } from '@/utils/auth' +import { createTask, getFormattedTime, getTask } from '@/utils/createTask' +import { userError } from '@/utils/tokenError' + +export function websocketError(code, msg) { + let message + switch (code) { + case 1006: + message = '用户身份验证失败' + userError() + break + case 4401: // 后端返回常规错误 + message = msg + break + case 4402: // 后端返回外部平台提交时的错误 + message = JSON.parse(msg) + break + case 4403: // 外部平台的任务结果的错误 + message = msg + break + default: + message = '连接异常,请稍后重试' + } + + ElNotification({ + title: '生成通知', + + message: h('i', { style: 'color: teal' }, message), + type: 'error' + }) +} + +export function websocketSuccess() { + // 合并两个通知为一个 + ElNotification({ + title: '生成通知', + message: h('div', [ + h('div', { style: 'font-weight: bold; color: teal;' }, '生成成功!'), + h('br'), + h('div', { style: 'color: orange; margin-top: 5px;' }, '内测状态,请及时下载生成的文件,云端储存与历史记录保留24小时!') + ]), + type: 'success', + duration: 6000 // 增加持续时间以适应更多信息 + }) +} + +export async function generateRootImage(aspectRatio, prompt) { + const progress_text = ref('') + const message = ref('') + const useDisplay = useDisplayStore() + const useParams = useParamStore() + const useUser = useUserStore() + + const newTaskRootId = crypto.randomUUID() + const taskId = crypto.randomUUID() + const time = await getFormattedTime() + const newRootTaskImage = useParams.rootTaskImage + const token = getToken() + + const result = await createTask(1, { prompt, aspectRatio, time, taskRootId: newTaskRootId, taskId, token }) + // const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjY0NDEwODAyMjk1OTgzNzIzMCwicm5TdHIiOiJiWkVwS2JLWFJyZmRIaFFHWXZKTkdzOGdGM0JSRmxQOCJ9.5eQ2GtVdrDntQDe2tnF8vl_DhTfd2uW-KNqzvl1imc0' + const wsURL = `${import.meta.env.VITE_API_WORKFLOW_WS}/?token=${token}` + const socket = new WebSocket(wsURL) + console.log('WebSocket连接已建立') + + // 心跳机制相关变量 + let heartbeatInterval = null + const heartbeatIntervalTime = 20000 // 30秒发送一次心跳 + + try { + // 接收服务器消息 + socket.onmessage = async (event) => { + // 处理pong响应 + if (event.data === 'pong') { + console.log('收到心跳响应') + return + } else if (event.data === 'please give me taskId') { + socket.send(`setTaskId:${taskId}`) + progress_text.value = '信息提交中...' + return + } else if (event.data === 'OK! Please continue. ') { + // 发送消息 + useParams.newTaskRootId = newTaskRootId + useParams.taskRootId = newTaskRootId + useDisplay.taskRootId = newTaskRootId + socket.send(JSON.stringify({ + type: 'generate', + data: result + })) + return + } else if (event.data === '任务提交成功,正在排队中...') { + progress_text.value = '生成中...' + useParams.setRootTask = { id: taskId, type: 'image', status: 'generate', name: '模特展示图', time, files: [] } + return + } + + message.value = event.data + } + + // 处理链接错误 + socket.onerror = (error) => { + console.error('WebSocket链接出错:', error) + + // 清理心跳定时器 + if (heartbeatInterval) { + console.log('清理心跳定时器') + clearInterval(heartbeatInterval) + } + } + + // 处理链接关闭 + socket.onclose = async (event) => { + console.log('WebSocket已关闭:', event) + useDisplay.isRootGerenate = false + + // 清理心跳定时器 + if (heartbeatInterval) { + console.log('清理心跳定时器') + clearInterval(heartbeatInterval) + } + if (event.code === 1006) { + console.error('用户身份验证失败') + userError() + return + } + if (event.code === 1000 && event.reason === 'success') { + const res = JSON.parse(message.value) + console.log('收到服务器消息:', res) + const result = await getTask(res) + if (result.type) { + useParams.setRootTask = { id: taskId, type: 'image', status: 'success', name: '模特展示图', time, files: [result.url] } + setTaskRootId({ taskRootId: newTaskRootId, userId: useUser.userInfo.id, imageUrl: newRootTaskImage }) + useDisplay.getNewHistory = true + websocketSuccess() + } else { + websocketError(4403, res.message) + } + } else { + websocketError(event.code, event.reason) + useParams.setRootTask = { id: taskId, type: 'image', status: 'error', name: '生成失败', time, files: [] } + } + } + + // 等待 WebSocket 连接打开 + socket.onopen = async () => { + console.log('WebSocket连接已建立') + + // 启动心跳机制 + heartbeatInterval = setInterval(() => { + if (socket.readyState === WebSocket.OPEN) { + socket.send('ping') + console.log('发送心跳包') + } + }, heartbeatIntervalTime) + } + } catch (error) { + console.log('Error creating AI3D_file:', error) + + ElNotification({ + title: '生成通知', + message: h('i', { style: 'color: teal' }, '生成失败,请检查参数后重新提交任务'), + type: 'error' + }) + } +} + +export async function generateSubImage(taskType, data, title) { + const progress_text = ref('') + const message = ref('') + const useParams = useParamStore() + const useDisplay = useDisplayStore() + + const newTaskRootId = useDisplay.taskRootId + console.log('newTaskRootId', newTaskRootId) + useParams.taskRootId = newTaskRootId + const taskId = crypto.randomUUID() + const time = await getFormattedTime() + const token = getToken() + + const result = await createTask(taskType, { ...data, time, taskId, taskRootId: newTaskRootId, token }, title) + // const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjY0NDEwODAyMjk1OTgzNzIzMCwicm5TdHIiOiJiWkVwS2JLWFJyZmRIaFFHWXZKTkdzOGdGM0JSRmxQOCJ9.5eQ2GtVdrDntQDe2tnF8vl_DhTfd2uW-KNqzvl1imc0' + const wsURL = `${import.meta.env.VITE_API_WORKFLOW_WS}/?token=${token}` + const socket = new WebSocket(wsURL) + console.log('WebSocket连接已建立') + + // 心跳机制相关变量 + let heartbeatInterval = null + const heartbeatIntervalTime = 20000 // 30秒发送一次心跳 + + try { + // 接收服务器消息 + socket.onmessage = async (event) => { + // 处理pong响应 + if (event.data === 'pong') { + console.log('收到心跳响应') + return + } else if (event.data === 'please give me taskId') { + socket.send(`setTaskId:${taskId}`) + progress_text.value = '信息提交中...' + return + } else if (event.data === 'OK! Please continue. ') { + // 发送消息 + socket.send(JSON.stringify({ + type: 'generate', + data: result + })) + return + } else if (event.data === '任务提交成功,正在排队中...') { + progress_text.value = '生成中...' + useParams.setSubTask = { id: taskId, type: data.file_type, status: 'generate', name: title, time, parentIndex: data.parentIndex, parentTime: data.parentCreateTime, files: [] } + useDisplay.AIvideo = false + return + } + message.value = event.data + } + + // 处理链接错误 + socket.onerror = (error) => { + console.error('WebSocket链接出错:', error) + + // 清理心跳定时器 + if (heartbeatInterval) { + clearInterval(heartbeatInterval) + } + + ElNotification({ + title: '生成通知', + message: h('i', { style: 'color: teal' }, '生成视频失败'), + type: 'error' + }) + } + + // 处理链接关闭 + socket.onclose = async (event) => { + console.log('WebSocket已关闭:', event) + useDisplay.isSubGerenate = false + + // 清理心跳定时器 + if (heartbeatInterval) { + clearInterval(heartbeatInterval) + } + if (event.code === 1006) { + console.error('用户身份验证失败') + userError() + } else if (event.code === 1000 && event.reason === 'success') { + const res = JSON.parse(message.value) + console.log('收到服务器消息:', res) + const result = await getTask(res) + if (result.type) { + useParams.setSubTask = { id: taskId, type: data.file_type, status: 'success', name: title, time, parentIndex: data.parentIndex, parentTime: data.parentCreateTime, files: [result.url] } + websocketSuccess() + } else { + websocketError(4403, res.message) + } + } else { + websocketError(event.code, event.reason) + useParams.setSubTask = { id: taskId, type: 'image', status: 'error', name: '生成失败', time, files: [] } + } + // 清理心跳定时器 + if (heartbeatInterval) { + clearInterval(heartbeatInterval) + } + } + + // 等待 WebSocket 连接打开 + socket.onopen = async () => { + console.log('WebSocket连接已建立') + + // 启动心跳机制 + heartbeatInterval = setInterval(() => { + if (socket.readyState === WebSocket.OPEN) { + socket.send('ping') + console.log('发送心跳包') + } + }, heartbeatIntervalTime) + } + } catch (error) { + console.log('Error creating AI3D_file:', error) + + ElNotification({ + title: '生成通知', + message: h('i', { style: 'color: teal' }, '生成失败,请检查参数后重新提交任务'), + type: 'error' + }) + } +} + +export async function generateAIimage(taskType, data, type) { + const progress_text = ref('') + const message = ref('') + const useDisplay = useDisplayStore() + const token = getToken() + const taskId = crypto.randomUUID() + + const result = await createTask(taskType, { text: data.prompt, aspect_ratio: data.aspectRatio, token }) + // const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjY0NDEwODAyMjk1OTgzNzIzMCwicm5TdHIiOiJiWkVwS2JLWFJyZmRIaFFHWXZKTkdzOGdGM0JSRmxQOCJ9.5eQ2GtVdrDntQDe2tnF8vl_DhTfd2uW-KNqzvl1imc0' + const wsURL = `${import.meta.env.VITE_API_WORKFLOW_WS}/?token=${token}` + const socket = new WebSocket(wsURL) + console.log('WebSocket连接已建立') + + // 心跳机制相关变量 + let heartbeatInterval = null + const heartbeatIntervalTime = 20000 // 30秒发送一次心跳 + + try { + // 接收服务器消息 + socket.onmessage = async (event) => { + // 处理pong响应 + if (event.data === 'pong') { + console.log('收到心跳响应') + return + } else if (event.data === 'please give me taskId') { + socket.send(`setTaskId:${taskId}`) + progress_text.value = '信息提交中...' + return + } else if (event.data === 'OK! Please continue. ') { + // 发送消息 + socket.send(JSON.stringify({ + type: 'generate', + data: result + })) + return + } else if (event.data === '任务提交成功,正在排队中...') { + progress_text.value = '视频生成中...' + return + } + message.value = event.data + } + + // 处理链接错误 + socket.onerror = (error) => { + console.error('WebSocket链接出错:', error) + + // 清理心跳定时器 + if (heartbeatInterval) { + clearInterval(heartbeatInterval) + } + } + + // 处理链接关闭 + socket.onclose = async (event) => { + console.log('WebSocket已关闭:', event) + useDisplay.isAIgenerate[type] = false + + // 清理心跳定时器 + if (heartbeatInterval) { + console.log('清理心跳定时器') + clearInterval(heartbeatInterval) + } + if (event.code === 1006) { + console.error('用户身份验证失败') + userError() + return + } + if (event.code === 1000 && event.reason === 'success') { + const res = JSON.parse(message.value) + console.log('收到服务器消息:', res) + const result = await getTask(res) + if (result.type) { + useDisplay.AIimage[type] = result.url + console.log('生成成功', useDisplay.AIimage[type]) + websocketSuccess() + } else { + websocketError(4403, res.message) + } + } else { + websocketError(event.code, event.reason) + } + } + + // 等待 WebSocket 连接打开 + socket.onopen = () => { + console.log('WebSocket连接已建立') + // 启动心跳机制 + heartbeatInterval = setInterval(() => { + if (socket.readyState === WebSocket.OPEN) { + socket.send('ping') + console.log('发送心跳包') + } + }, heartbeatIntervalTime) + + // 发送消息 + socket.send(JSON.stringify({ + type: 'generate', + data: result + })) + } + } catch (error) { + console.log('Error creating AI3D_file:', error) + + ElNotification({ + title: '生成通知', + + message: h('i', { style: 'color: teal' }, '生成失败,请检查参数后重新提交任务'), + type: 'error' + }) + } +} diff --git a/src/views/home/display/components/set.vue b/src/views/home/display/components/set.vue new file mode 100644 index 0000000..33cea88 --- /dev/null +++ b/src/views/home/display/components/set.vue @@ -0,0 +1,363 @@ + + + + + diff --git a/src/views/home/display/index.vue b/src/views/home/display/index.vue new file mode 100644 index 0000000..c37439e --- /dev/null +++ b/src/views/home/display/index.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/views/home/index.vue b/src/views/home/index.vue new file mode 100644 index 0000000..a7b4a8a --- /dev/null +++ b/src/views/home/index.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..0b4977d --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,328 @@ + + + + + diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..246436b --- /dev/null +++ b/vite.config.js @@ -0,0 +1,54 @@ +import { fileURLToPath, URL } from 'node:url' +import vue from '@vitejs/plugin-vue' +import Icons from 'unplugin-icons/vite' +import { defineConfig, loadEnv } from 'vite' +import { autoImportConfig, componentsConfig } from './config/plugins.js' + +// https://vite.dev/config/ +export default defineConfig(({ _command, mode }) => { + const env = loadEnv(mode, process.cwd()) + console.log('Environment variables:', env) + return { + base: env.VITE_BASE_URL, + optimizeDeps: { + exclude: ['vue-element-plus-x'] + }, + resolve: { + alias: { + '~': fileURLToPath(new URL('./', import.meta.url)), + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + plugins: [ + vue(), + autoImportConfig, + componentsConfig, + Icons({ + autoInstall: true + }) + ], + build: { + chunkSizeWarningLimit: 2000, + outDir: 'dist', + minify: 'terser', + terserOptions: { + compress: { + keep_infinity: true, + drop_console: true, + drop_debugger: true + }, + format: { + comments: false + } + }, + rollupOptions: { + output: { + chunkFileNames: 'static/js/[name]-[hash].js', + entryFileNames: 'static/js/[name]-[hash].js', + assetFileNames: 'static/[ext]/[name]-[hash].[ext]' + } + } + }, + envPrefix: ['VITE', 'FILE'] + } +})