diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..79a12ff
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+[*.{js,ts,vue}]
+charset = utf-8 # 设置文件字符集为 utf-8
+end_of_line = lf # 控制换行类型(lf | cr | crlf)
+insert_final_newline = true # 始终在文件末尾插入一个新行
+indent_style = space # 缩进风格(tab | space)
+indent_size = 2 # 缩进大小
+max_line_length = 100 # 最大行长度
+
+[*.md] # 仅 md 文件适用以下规则
+max_line_length = off # 关闭最大行长度限制
+trim_trailing_whitespace = false # 关闭末尾空格修剪
diff --git a/.env b/.env
new file mode 100644
index 0000000..3e0963a
--- /dev/null
+++ b/.env
@@ -0,0 +1,25 @@
+# 标题
+VITE_APP_TITLE=华翔MES管理系统
+
+# 项目本地运行端口号
+VITE_PORT=80
+
+# open 运行 npm run dev 时自动打开浏览器
+VITE_OPEN=true
+
+# 租户开关
+VITE_APP_TENANT_ENABLE=true
+
+# 验证码的开关
+VITE_APP_CAPTCHA_ENABLE=true
+
+# 文档地址的开关
+VITE_APP_DOCALERT_ENABLE=true
+
+# 百度统计
+VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
+
+# 默认账户密码
+VITE_APP_DEFAULT_LOGIN_TENANT = 沈阳华翔
+VITE_APP_DEFAULT_LOGIN_USERNAME = admin
+VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
diff --git a/.env.dev b/.env.dev
new file mode 100644
index 0000000..232f1c6
--- /dev/null
+++ b/.env.dev
@@ -0,0 +1,36 @@
+# 开发环境:本地只启动前端项目,依赖开发环境(后端、APP)
+NODE_ENV=production
+
+VITE_DEV=true
+
+# 请求路径
+VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
+
+# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
+VITE_UPLOAD_TYPE=server
+# 上传路径
+VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=false
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=false
+
+# 是否sourcemap
+VITE_SOURCEMAP=true
+
+# 打包路径
+VITE_BASE_PATH=/
+
+# 输出路径
+VITE_OUT_DIR=dist
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
+
+# 验证码的开关
+VITE_APP_CAPTCHA_ENABLE=true
diff --git a/.env.local b/.env.local
new file mode 100644
index 0000000..005d2f0
--- /dev/null
+++ b/.env.local
@@ -0,0 +1,33 @@
+# 本地开发环境:本地启动所有项目(前端、后端、APP)时使用,不依赖外部环境
+NODE_ENV=development
+
+VITE_DEV=true
+
+# 请求路径
+VITE_BASE_URL='http://localhost:48080'
+
+# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
+VITE_UPLOAD_TYPE=server
+# 上传路径
+VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=false
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=false
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH=/
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://localhost:3000'
+
+# 验证码的开关
+VITE_APP_CAPTCHA_ENABLE=false
diff --git a/.env.prod b/.env.prod
new file mode 100644
index 0000000..842ba61
--- /dev/null
+++ b/.env.prod
@@ -0,0 +1,33 @@
+# 生产环境:只在打包时使用
+NODE_ENV=production
+
+VITE_DEV=false
+
+# 请求路径
+VITE_BASE_URL='http://localhost:48080'
+
+# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
+VITE_UPLOAD_TYPE=server
+# 上传路径
+VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=true
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=true
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH=/
+
+# 输出路径
+VITE_OUT_DIR=dist-prod
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
diff --git a/.env.stage b/.env.stage
new file mode 100644
index 0000000..f7c521b
--- /dev/null
+++ b/.env.stage
@@ -0,0 +1,33 @@
+# 预发布环境:只在打包时使用
+NODE_ENV=production
+
+VITE_DEV=false
+
+# 请求路径
+VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
+
+# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
+VITE_UPLOAD_TYPE=server
+# 上传路径
+VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=true
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=true
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH='http://static-vue3.yudao.iocoder.cn/'
+
+# 输出路径
+VITE_OUT_DIR=dist-stage
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
diff --git a/.env.test b/.env.test
new file mode 100644
index 0000000..7bf1b41
--- /dev/null
+++ b/.env.test
@@ -0,0 +1,33 @@
+# 测试环境:只在打包时使用
+NODE_ENV=production
+
+VITE_DEV=false
+
+# 请求路径
+VITE_BASE_URL='http://localhost:48080'
+
+# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
+VITE_UPLOAD_TYPE=server
+# 上传路径
+VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=true
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=true
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH=/admin-ui-vue3/
+
+# 输出路径
+VITE_OUT_DIR=dist-test
+
+# 商城H5会员端域名
+VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..1e85c0f
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,8 @@
+/build/
+/config/
+/dist/
+/*.js
+/test/unit/coverage/
+/node_modules/*
+/dist*
+/src/main.ts
diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
new file mode 100644
index 0000000..024c96a
--- /dev/null
+++ b/.eslintrc-auto-import.json
@@ -0,0 +1,259 @@
+{
+ "globals": {
+ "EffectScope": true,
+ "ElMessage": true,
+ "ElMessageBox": true,
+ "ElTag": true,
+ "asyncComputed": true,
+ "autoResetRef": true,
+ "computed": true,
+ "computedAsync": true,
+ "computedEager": true,
+ "computedInject": true,
+ "computedWithControl": true,
+ "controlledComputed": true,
+ "controlledRef": true,
+ "createApp": true,
+ "createEventHook": true,
+ "createGlobalState": true,
+ "createInjectionState": true,
+ "createReactiveFn": true,
+ "createSharedComposable": true,
+ "createUnrefFn": true,
+ "customRef": true,
+ "debouncedRef": true,
+ "debouncedWatch": true,
+ "defineAsyncComponent": true,
+ "defineComponent": true,
+ "eagerComputed": true,
+ "effectScope": true,
+ "extendRef": true,
+ "getCurrentInstance": true,
+ "getCurrentScope": true,
+ "h": true,
+ "ignorableWatch": true,
+ "inject": true,
+ "isDefined": true,
+ "isProxy": true,
+ "isReactive": true,
+ "isReadonly": true,
+ "isRef": true,
+ "makeDestructurable": true,
+ "markRaw": true,
+ "nextTick": true,
+ "onActivated": true,
+ "onBeforeMount": true,
+ "onBeforeUnmount": true,
+ "onBeforeUpdate": true,
+ "onClickOutside": true,
+ "onDeactivated": true,
+ "onErrorCaptured": true,
+ "onKeyStroke": true,
+ "onLongPress": true,
+ "onMounted": true,
+ "onRenderTracked": true,
+ "onRenderTriggered": true,
+ "onScopeDispose": true,
+ "onServerPrefetch": true,
+ "onStartTyping": true,
+ "onUnmounted": true,
+ "onUpdated": true,
+ "pausableWatch": true,
+ "provide": true,
+ "reactify": true,
+ "reactifyObject": true,
+ "reactive": true,
+ "reactiveComputed": true,
+ "reactiveOmit": true,
+ "reactivePick": true,
+ "readonly": true,
+ "ref": true,
+ "refAutoReset": true,
+ "refDebounced": true,
+ "refDefault": true,
+ "refThrottled": true,
+ "refWithControl": true,
+ "resolveComponent": true,
+ "resolveRef": true,
+ "resolveUnref": true,
+ "shallowReactive": true,
+ "shallowReadonly": true,
+ "shallowRef": true,
+ "syncRef": true,
+ "syncRefs": true,
+ "templateRef": true,
+ "throttledRef": true,
+ "throttledWatch": true,
+ "toRaw": true,
+ "toReactive": true,
+ "toRef": true,
+ "toRefs": true,
+ "triggerRef": true,
+ "tryOnBeforeMount": true,
+ "tryOnBeforeUnmount": true,
+ "tryOnMounted": true,
+ "tryOnScopeDispose": true,
+ "tryOnUnmounted": true,
+ "unref": true,
+ "unrefElement": true,
+ "until": true,
+ "useActiveElement": true,
+ "useArrayEvery": true,
+ "useArrayFilter": true,
+ "useArrayFind": true,
+ "useArrayFindIndex": true,
+ "useArrayJoin": true,
+ "useArrayMap": true,
+ "useArrayReduce": true,
+ "useArraySome": true,
+ "useAsyncQueue": true,
+ "useAsyncState": true,
+ "useAttrs": true,
+ "useBase64": true,
+ "useBattery": true,
+ "useBluetooth": true,
+ "useBreakpoints": true,
+ "useBroadcastChannel": true,
+ "useBrowserLocation": true,
+ "useCached": true,
+ "useClipboard": true,
+ "useColorMode": true,
+ "useConfirmDialog": true,
+ "useCounter": true,
+ "useCssModule": true,
+ "useCssVar": true,
+ "useCssVars": true,
+ "useCurrentElement": true,
+ "useCycleList": true,
+ "useDark": true,
+ "useDateFormat": true,
+ "useDebounce": true,
+ "useDebounceFn": true,
+ "useDebouncedRefHistory": true,
+ "useDeviceMotion": true,
+ "useDeviceOrientation": true,
+ "useDevicePixelRatio": true,
+ "useDevicesList": true,
+ "useDisplayMedia": true,
+ "useDocumentVisibility": true,
+ "useDraggable": true,
+ "useDropZone": true,
+ "useElementBounding": true,
+ "useElementByPoint": true,
+ "useElementHover": true,
+ "useElementSize": true,
+ "useElementVisibility": true,
+ "useEventBus": true,
+ "useEventListener": true,
+ "useEventSource": true,
+ "useEyeDropper": true,
+ "useFavicon": true,
+ "useFetch": true,
+ "useFileDialog": true,
+ "useFileSystemAccess": true,
+ "useFocus": true,
+ "useFocusWithin": true,
+ "useFps": true,
+ "useFullscreen": true,
+ "useGamepad": true,
+ "useGeolocation": true,
+ "useIdle": true,
+ "useImage": true,
+ "useInfiniteScroll": true,
+ "useIntersectionObserver": true,
+ "useInterval": true,
+ "useIntervalFn": true,
+ "useKeyModifier": true,
+ "useLastChanged": true,
+ "useLocalStorage": true,
+ "useMagicKeys": true,
+ "useManualRefHistory": true,
+ "useMediaControls": true,
+ "useMediaQuery": true,
+ "useMemoize": true,
+ "useMemory": true,
+ "useMounted": true,
+ "useMouse": true,
+ "useMouseInElement": true,
+ "useMousePressed": true,
+ "useMutationObserver": true,
+ "useNavigatorLanguage": true,
+ "useNetwork": true,
+ "useNow": true,
+ "useObjectUrl": true,
+ "useOffsetPagination": true,
+ "useOnline": true,
+ "usePageLeave": true,
+ "useParallax": true,
+ "usePermission": true,
+ "usePointer": true,
+ "usePointerSwipe": true,
+ "usePreferredColorScheme": true,
+ "usePreferredDark": true,
+ "usePreferredLanguages": true,
+ "useRafFn": true,
+ "useRefHistory": true,
+ "useResizeObserver": true,
+ "useRoute": true,
+ "useRouter": true,
+ "useScreenOrientation": true,
+ "useScreenSafeArea": true,
+ "useScriptTag": true,
+ "useScroll": true,
+ "useScrollLock": true,
+ "useSessionStorage": true,
+ "useShare": true,
+ "useSlots": true,
+ "useSpeechRecognition": true,
+ "useSpeechSynthesis": true,
+ "useStepper": true,
+ "useStorage": true,
+ "useStorageAsync": true,
+ "useStyleTag": true,
+ "useSupported": true,
+ "useSwipe": true,
+ "useTemplateRefsList": true,
+ "useTextDirection": true,
+ "useTextSelection": true,
+ "useTextareaAutosize": true,
+ "useThrottle": true,
+ "useThrottleFn": true,
+ "useThrottledRefHistory": true,
+ "useTimeAgo": true,
+ "useTimeout": true,
+ "useTimeoutFn": true,
+ "useTimeoutPoll": true,
+ "useTimestamp": true,
+ "useTitle": true,
+ "useToggle": true,
+ "useTransition": true,
+ "useUrlSearchParams": true,
+ "useUserMedia": true,
+ "useVModel": true,
+ "useVModels": true,
+ "useVibrate": true,
+ "useVirtualList": true,
+ "useWakeLock": true,
+ "useWebNotification": true,
+ "useWebSocket": true,
+ "useWebWorker": true,
+ "useWebWorkerFn": true,
+ "useWindowFocus": true,
+ "useWindowScroll": true,
+ "useWindowSize": true,
+ "watch": true,
+ "watchArray": true,
+ "watchAtMost": true,
+ "watchDebounced": true,
+ "watchEffect": true,
+ "watchIgnorable": true,
+ "watchOnce": true,
+ "watchPausable": true,
+ "watchPostEffect": true,
+ "watchSyncEffect": true,
+ "watchThrottled": true,
+ "watchTriggerable": true,
+ "watchWithFilter": true,
+ "whenever": true
+ }
+}
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..b28255c
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,75 @@
+// @ts-check
+const { defineConfig } = require('eslint-define-config')
+module.exports = defineConfig({
+ root: true,
+ env: {
+ browser: true,
+ node: true,
+ es6: true
+ },
+ parser: 'vue-eslint-parser',
+ parserOptions: {
+ parser: '@typescript-eslint/parser',
+ ecmaVersion: 2020,
+ sourceType: 'module',
+ jsxPragma: 'React',
+ ecmaFeatures: {
+ jsx: true
+ }
+ },
+ extends: [
+ 'plugin:vue/vue3-recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'prettier',
+ 'plugin:prettier/recommended',
+ '@unocss'
+ ],
+ rules: {
+ 'vue/no-setup-props-destructure': 'off',
+ 'vue/script-setup-uses-vars': 'error',
+ 'vue/no-reserved-component-names': 'off',
+ '@typescript-eslint/ban-ts-ignore': 'off',
+ '@typescript-eslint/explicit-function-return-type': 'off',
+ '@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/no-var-requires': 'off',
+ '@typescript-eslint/no-empty-function': 'off',
+ 'vue/custom-event-name-casing': 'off',
+ 'no-use-before-define': 'off',
+ '@typescript-eslint/no-use-before-define': 'off',
+ '@typescript-eslint/ban-ts-comment': 'off',
+ '@typescript-eslint/ban-types': 'off',
+ '@typescript-eslint/no-non-null-assertion': 'off',
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
+ '@typescript-eslint/no-unused-vars': 'off',
+ 'no-unused-vars': 'off',
+ 'space-before-function-paren': 'off',
+
+ 'vue/attributes-order': 'off',
+ 'vue/one-component-per-file': 'off',
+ 'vue/html-closing-bracket-newline': 'off',
+ 'vue/max-attributes-per-line': 'off',
+ 'vue/multiline-html-element-content-newline': 'off',
+ 'vue/singleline-html-element-content-newline': 'off',
+ 'vue/attribute-hyphenation': 'off',
+ 'vue/require-default-prop': 'off',
+ 'vue/require-explicit-emits': 'off',
+ 'vue/require-toggle-inside-transition': 'off',
+ 'vue/html-self-closing': [
+ 'error',
+ {
+ html: {
+ void: 'always',
+ normal: 'never',
+ component: 'always'
+ },
+ svg: 'always',
+ math: 'always'
+ }
+ ],
+ 'vue/multi-word-component-names': 'off',
+ 'vue/no-v-html': 'off',
+ 'prettier/prettier': 'off', // 芋艿:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
+ '@unocss/order': 'off', // 芋艿:禁用 unocss 【css】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
+ '@unocss/order-attributify': 'off' // 芋艿:禁用 unocss 【属性】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
+ }
+})
diff --git a/.image/Java监控.jpg b/.image/Java监控.jpg
new file mode 100644
index 0000000..6ad522a
Binary files /dev/null and b/.image/Java监控.jpg differ
diff --git a/.image/MySQL.jpg b/.image/MySQL.jpg
new file mode 100644
index 0000000..64a1940
Binary files /dev/null and b/.image/MySQL.jpg differ
diff --git a/.image/OA请假-列表.jpg b/.image/OA请假-列表.jpg
new file mode 100644
index 0000000..787bb73
Binary files /dev/null and b/.image/OA请假-列表.jpg differ
diff --git a/.image/OA请假-发起.jpg b/.image/OA请假-发起.jpg
new file mode 100644
index 0000000..1a7342d
Binary files /dev/null and b/.image/OA请假-发起.jpg differ
diff --git a/.image/OA请假-详情.jpg b/.image/OA请假-详情.jpg
new file mode 100644
index 0000000..a83e7c1
Binary files /dev/null and b/.image/OA请假-详情.jpg differ
diff --git a/.image/Redis.jpg b/.image/Redis.jpg
new file mode 100644
index 0000000..9569352
Binary files /dev/null and b/.image/Redis.jpg differ
diff --git a/.image/admin-uniapp/01.png b/.image/admin-uniapp/01.png
new file mode 100644
index 0000000..0f65d99
Binary files /dev/null and b/.image/admin-uniapp/01.png differ
diff --git a/.image/admin-uniapp/02.png b/.image/admin-uniapp/02.png
new file mode 100644
index 0000000..05ec781
Binary files /dev/null and b/.image/admin-uniapp/02.png differ
diff --git a/.image/admin-uniapp/03.png b/.image/admin-uniapp/03.png
new file mode 100644
index 0000000..f400c68
Binary files /dev/null and b/.image/admin-uniapp/03.png differ
diff --git a/.image/admin-uniapp/04.png b/.image/admin-uniapp/04.png
new file mode 100644
index 0000000..d5d5ea0
Binary files /dev/null and b/.image/admin-uniapp/04.png differ
diff --git a/.image/admin-uniapp/05.png b/.image/admin-uniapp/05.png
new file mode 100644
index 0000000..1de6d8a
Binary files /dev/null and b/.image/admin-uniapp/05.png differ
diff --git a/.image/admin-uniapp/06.png b/.image/admin-uniapp/06.png
new file mode 100644
index 0000000..400ae90
Binary files /dev/null and b/.image/admin-uniapp/06.png differ
diff --git a/.image/admin-uniapp/07.png b/.image/admin-uniapp/07.png
new file mode 100644
index 0000000..2ed8c0f
Binary files /dev/null and b/.image/admin-uniapp/07.png differ
diff --git a/.image/admin-uniapp/08.png b/.image/admin-uniapp/08.png
new file mode 100644
index 0000000..090e64a
Binary files /dev/null and b/.image/admin-uniapp/08.png differ
diff --git a/.image/admin-uniapp/09.png b/.image/admin-uniapp/09.png
new file mode 100644
index 0000000..f2032c8
Binary files /dev/null and b/.image/admin-uniapp/09.png differ
diff --git a/.image/common/ai-feature.png b/.image/common/ai-feature.png
new file mode 100644
index 0000000..b4a55f5
Binary files /dev/null and b/.image/common/ai-feature.png differ
diff --git a/.image/common/ai-preview.gif b/.image/common/ai-preview.gif
new file mode 100644
index 0000000..5f13ac4
Binary files /dev/null and b/.image/common/ai-preview.gif differ
diff --git a/.image/common/bpm-feature.png b/.image/common/bpm-feature.png
new file mode 100644
index 0000000..23787fb
Binary files /dev/null and b/.image/common/bpm-feature.png differ
diff --git a/.image/common/crm-feature.png b/.image/common/crm-feature.png
new file mode 100644
index 0000000..e1c9670
Binary files /dev/null and b/.image/common/crm-feature.png differ
diff --git a/.image/common/erp-feature.png b/.image/common/erp-feature.png
new file mode 100644
index 0000000..d30b30e
Binary files /dev/null and b/.image/common/erp-feature.png differ
diff --git a/.image/common/infra-feature.png b/.image/common/infra-feature.png
new file mode 100644
index 0000000..f5cef50
Binary files /dev/null and b/.image/common/infra-feature.png differ
diff --git a/.image/common/mall-feature.png b/.image/common/mall-feature.png
new file mode 100644
index 0000000..cca05c0
Binary files /dev/null and b/.image/common/mall-feature.png differ
diff --git a/.image/common/mall-preview.png b/.image/common/mall-preview.png
new file mode 100644
index 0000000..f939214
Binary files /dev/null and b/.image/common/mall-preview.png differ
diff --git a/.image/common/project-vs.png b/.image/common/project-vs.png
new file mode 100644
index 0000000..561e092
Binary files /dev/null and b/.image/common/project-vs.png differ
diff --git a/.image/common/ruoyi-vue-pro-architecture.png b/.image/common/ruoyi-vue-pro-architecture.png
new file mode 100644
index 0000000..7bd7d59
Binary files /dev/null and b/.image/common/ruoyi-vue-pro-architecture.png differ
diff --git a/.image/common/ruoyi-vue-pro-biz.png b/.image/common/ruoyi-vue-pro-biz.png
new file mode 100644
index 0000000..24a385a
Binary files /dev/null and b/.image/common/ruoyi-vue-pro-biz.png differ
diff --git a/.image/common/system-feature.png b/.image/common/system-feature.png
new file mode 100644
index 0000000..366087c
Binary files /dev/null and b/.image/common/system-feature.png differ
diff --git a/.image/common/yudao-cloud-architecture.png b/.image/common/yudao-cloud-architecture.png
new file mode 100644
index 0000000..59416d8
Binary files /dev/null and b/.image/common/yudao-cloud-architecture.png differ
diff --git a/.image/common/yudao-roadmap.png b/.image/common/yudao-roadmap.png
new file mode 100644
index 0000000..f4becc9
Binary files /dev/null and b/.image/common/yudao-roadmap.png differ
diff --git a/.image/个人中心.jpg b/.image/个人中心.jpg
new file mode 100644
index 0000000..ce57f6e
Binary files /dev/null and b/.image/个人中心.jpg differ
diff --git a/.image/代码生成.jpg b/.image/代码生成.jpg
new file mode 100644
index 0000000..751603e
Binary files /dev/null and b/.image/代码生成.jpg differ
diff --git a/.image/令牌管理.jpg b/.image/令牌管理.jpg
new file mode 100644
index 0000000..04abf4d
Binary files /dev/null and b/.image/令牌管理.jpg differ
diff --git a/.image/任务列表-审批.jpg b/.image/任务列表-审批.jpg
new file mode 100644
index 0000000..cba312a
Binary files /dev/null and b/.image/任务列表-审批.jpg differ
diff --git a/.image/任务列表-已办.jpg b/.image/任务列表-已办.jpg
new file mode 100644
index 0000000..7a8d0fb
Binary files /dev/null and b/.image/任务列表-已办.jpg differ
diff --git a/.image/任务列表-待办.jpg b/.image/任务列表-待办.jpg
new file mode 100644
index 0000000..a90323f
Binary files /dev/null and b/.image/任务列表-待办.jpg differ
diff --git a/.image/任务日志.jpg b/.image/任务日志.jpg
new file mode 100644
index 0000000..599e50a
Binary files /dev/null and b/.image/任务日志.jpg differ
diff --git a/.image/商户信息.jpg b/.image/商户信息.jpg
new file mode 100644
index 0000000..483eace
Binary files /dev/null and b/.image/商户信息.jpg differ
diff --git a/.image/在线用户.jpg b/.image/在线用户.jpg
new file mode 100644
index 0000000..b183009
Binary files /dev/null and b/.image/在线用户.jpg differ
diff --git a/.image/大屏设计器-列表.jpg b/.image/大屏设计器-列表.jpg
new file mode 100644
index 0000000..9a45c3b
Binary files /dev/null and b/.image/大屏设计器-列表.jpg differ
diff --git a/.image/大屏设计器-编辑.jpg b/.image/大屏设计器-编辑.jpg
new file mode 100644
index 0000000..63298a0
Binary files /dev/null and b/.image/大屏设计器-编辑.jpg differ
diff --git a/.image/大屏设计器-预览.jpg b/.image/大屏设计器-预览.jpg
new file mode 100644
index 0000000..501d9ea
Binary files /dev/null and b/.image/大屏设计器-预览.jpg differ
diff --git a/.image/字典数据.jpg b/.image/字典数据.jpg
new file mode 100644
index 0000000..8298c89
Binary files /dev/null and b/.image/字典数据.jpg differ
diff --git a/.image/字典类型.jpg b/.image/字典类型.jpg
new file mode 100644
index 0000000..6613392
Binary files /dev/null and b/.image/字典类型.jpg differ
diff --git a/.image/定时任务.jpg b/.image/定时任务.jpg
new file mode 100644
index 0000000..d5bbd85
Binary files /dev/null and b/.image/定时任务.jpg differ
diff --git a/.image/岗位管理.jpg b/.image/岗位管理.jpg
new file mode 100644
index 0000000..42b64d2
Binary files /dev/null and b/.image/岗位管理.jpg differ
diff --git a/.image/应用信息-列表.jpg b/.image/应用信息-列表.jpg
new file mode 100644
index 0000000..da419a2
Binary files /dev/null and b/.image/应用信息-列表.jpg differ
diff --git a/.image/应用信息-编辑.jpg b/.image/应用信息-编辑.jpg
new file mode 100644
index 0000000..913cfbc
Binary files /dev/null and b/.image/应用信息-编辑.jpg differ
diff --git a/.image/应用管理.jpg b/.image/应用管理.jpg
new file mode 100644
index 0000000..6e7789f
Binary files /dev/null and b/.image/应用管理.jpg differ
diff --git a/.image/我的流程-列表.jpg b/.image/我的流程-列表.jpg
new file mode 100644
index 0000000..223d17a
Binary files /dev/null and b/.image/我的流程-列表.jpg differ
diff --git a/.image/我的流程-发起.jpg b/.image/我的流程-发起.jpg
new file mode 100644
index 0000000..7a83306
Binary files /dev/null and b/.image/我的流程-发起.jpg differ
diff --git a/.image/我的流程-详情.jpg b/.image/我的流程-详情.jpg
new file mode 100644
index 0000000..6a01541
Binary files /dev/null and b/.image/我的流程-详情.jpg differ
diff --git a/.image/报表设计器-图形报表.jpg b/.image/报表设计器-图形报表.jpg
new file mode 100644
index 0000000..681b318
Binary files /dev/null and b/.image/报表设计器-图形报表.jpg differ
diff --git a/.image/报表设计器-打印设计.jpg b/.image/报表设计器-打印设计.jpg
new file mode 100644
index 0000000..bb86da6
Binary files /dev/null and b/.image/报表设计器-打印设计.jpg differ
diff --git a/.image/报表设计器-数据报表.jpg b/.image/报表设计器-数据报表.jpg
new file mode 100644
index 0000000..9ca5b9b
Binary files /dev/null and b/.image/报表设计器-数据报表.jpg differ
diff --git a/.image/操作日志.jpg b/.image/操作日志.jpg
new file mode 100644
index 0000000..4a0611a
Binary files /dev/null and b/.image/操作日志.jpg differ
diff --git a/.image/支付订单.jpg b/.image/支付订单.jpg
new file mode 100644
index 0000000..0a56dd7
Binary files /dev/null and b/.image/支付订单.jpg differ
diff --git a/.image/敏感词.jpg b/.image/敏感词.jpg
new file mode 100644
index 0000000..92a5397
Binary files /dev/null and b/.image/敏感词.jpg differ
diff --git a/.image/数据库文档.jpg b/.image/数据库文档.jpg
new file mode 100644
index 0000000..a4339d9
Binary files /dev/null and b/.image/数据库文档.jpg differ
diff --git a/.image/文件管理.jpg b/.image/文件管理.jpg
new file mode 100644
index 0000000..054b19f
Binary files /dev/null and b/.image/文件管理.jpg differ
diff --git a/.image/文件管理2.jpg b/.image/文件管理2.jpg
new file mode 100644
index 0000000..b12e5c3
Binary files /dev/null and b/.image/文件管理2.jpg differ
diff --git a/.image/文件配置.jpg b/.image/文件配置.jpg
new file mode 100644
index 0000000..e618049
Binary files /dev/null and b/.image/文件配置.jpg differ
diff --git a/.image/日志中心.jpg b/.image/日志中心.jpg
new file mode 100644
index 0000000..27c1c6c
Binary files /dev/null and b/.image/日志中心.jpg differ
diff --git a/.image/流程模型-列表.jpg b/.image/流程模型-列表.jpg
new file mode 100644
index 0000000..ffdc584
Binary files /dev/null and b/.image/流程模型-列表.jpg differ
diff --git a/.image/流程模型-定义.jpg b/.image/流程模型-定义.jpg
new file mode 100644
index 0000000..18b316c
Binary files /dev/null and b/.image/流程模型-定义.jpg differ
diff --git a/.image/流程模型-设计.jpg b/.image/流程模型-设计.jpg
new file mode 100644
index 0000000..9614969
Binary files /dev/null and b/.image/流程模型-设计.jpg differ
diff --git a/.image/流程表单.jpg b/.image/流程表单.jpg
new file mode 100644
index 0000000..60669c1
Binary files /dev/null and b/.image/流程表单.jpg differ
diff --git a/.image/生成效果.jpg b/.image/生成效果.jpg
new file mode 100644
index 0000000..98ff2cc
Binary files /dev/null and b/.image/生成效果.jpg differ
diff --git a/.image/用户分组.jpg b/.image/用户分组.jpg
new file mode 100644
index 0000000..39af1cd
Binary files /dev/null and b/.image/用户分组.jpg differ
diff --git a/.image/用户管理.jpg b/.image/用户管理.jpg
new file mode 100644
index 0000000..844604a
Binary files /dev/null and b/.image/用户管理.jpg differ
diff --git a/.image/登录.jpg b/.image/登录.jpg
new file mode 100644
index 0000000..b782b98
Binary files /dev/null and b/.image/登录.jpg differ
diff --git a/.image/登录日志.jpg b/.image/登录日志.jpg
new file mode 100644
index 0000000..25662d9
Binary files /dev/null and b/.image/登录日志.jpg differ
diff --git a/.image/短信日志.jpg b/.image/短信日志.jpg
new file mode 100644
index 0000000..ada8e56
Binary files /dev/null and b/.image/短信日志.jpg differ
diff --git a/.image/短信模板.jpg b/.image/短信模板.jpg
new file mode 100644
index 0000000..09381cc
Binary files /dev/null and b/.image/短信模板.jpg differ
diff --git a/.image/短信渠道.jpg b/.image/短信渠道.jpg
new file mode 100644
index 0000000..df3a5c3
Binary files /dev/null and b/.image/短信渠道.jpg differ
diff --git a/.image/租户套餐.png b/.image/租户套餐.png
new file mode 100644
index 0000000..9663167
Binary files /dev/null and b/.image/租户套餐.png differ
diff --git a/.image/租户管理.jpg b/.image/租户管理.jpg
new file mode 100644
index 0000000..647416a
Binary files /dev/null and b/.image/租户管理.jpg differ
diff --git a/.image/系统接口.jpg b/.image/系统接口.jpg
new file mode 100644
index 0000000..6d39d42
Binary files /dev/null and b/.image/系统接口.jpg differ
diff --git a/.image/菜单管理.jpg b/.image/菜单管理.jpg
new file mode 100644
index 0000000..ad3b797
Binary files /dev/null and b/.image/菜单管理.jpg differ
diff --git a/.image/表单构建.jpg b/.image/表单构建.jpg
new file mode 100644
index 0000000..81f0374
Binary files /dev/null and b/.image/表单构建.jpg differ
diff --git a/.image/角色管理.jpg b/.image/角色管理.jpg
new file mode 100644
index 0000000..eed776e
Binary files /dev/null and b/.image/角色管理.jpg differ
diff --git a/.image/访问日志.jpg b/.image/访问日志.jpg
new file mode 100644
index 0000000..ef301aa
Binary files /dev/null and b/.image/访问日志.jpg differ
diff --git a/.image/退款订单.jpg b/.image/退款订单.jpg
new file mode 100644
index 0000000..2c6c6c9
Binary files /dev/null and b/.image/退款订单.jpg differ
diff --git a/.image/通知公告.jpg b/.image/通知公告.jpg
new file mode 100644
index 0000000..97bb42f
Binary files /dev/null and b/.image/通知公告.jpg differ
diff --git a/.image/部门管理.jpg b/.image/部门管理.jpg
new file mode 100644
index 0000000..6eab233
Binary files /dev/null and b/.image/部门管理.jpg differ
diff --git a/.image/配置管理.jpg b/.image/配置管理.jpg
new file mode 100644
index 0000000..0abaec9
Binary files /dev/null and b/.image/配置管理.jpg differ
diff --git a/.image/链路追踪.jpg b/.image/链路追踪.jpg
new file mode 100644
index 0000000..12f7aa8
Binary files /dev/null and b/.image/链路追踪.jpg differ
diff --git a/.image/错误日志.jpg b/.image/错误日志.jpg
new file mode 100644
index 0000000..eb615ea
Binary files /dev/null and b/.image/错误日志.jpg differ
diff --git a/.image/错误码管理.jpg b/.image/错误码管理.jpg
new file mode 100644
index 0000000..ea91dde
Binary files /dev/null and b/.image/错误码管理.jpg differ
diff --git a/.image/首页.jpg b/.image/首页.jpg
new file mode 100644
index 0000000..10a7fde
Binary files /dev/null and b/.image/首页.jpg differ
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..f68ea86
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,11 @@
+/node_modules/**
+/dist/
+/dist*
+/public/*
+/docs/*
+/vite.config.ts
+/src/types/env.d.ts
+/src/types/auto-components.d.ts
+/src/types/auto-imports.d.ts
+/docs/**/*
+CHANGELOG
diff --git a/.stylelintignore b/.stylelintignore
new file mode 100644
index 0000000..aa605b4
--- /dev/null
+++ b/.stylelintignore
@@ -0,0 +1,6 @@
+/dist/*
+/public/*
+public/*
+/dist*
+/src/types/env.d.ts
+/docs/**/*
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..65288b5
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,18 @@
+{
+ "recommendations": [
+ "christian-kohler.path-intellisense",
+ "vscode-icons-team.vscode-icons",
+ "davidanson.vscode-markdownlint",
+ "dbaeumer.vscode-eslint",
+ "esbenp.prettier-vscode",
+ "mrmlnc.vscode-less",
+ "lokalise.i18n-ally",
+ "redhat.vscode-yaml",
+ "csstools.postcss",
+ "mikestead.dotenv",
+ "eamodio.gitlens",
+ "antfu.iconify",
+ "antfu.unocss",
+ "Vue.volar"
+ ]
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..f43edc0
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,16 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "msedge",
+ "request": "launch",
+ "name": "Launch Edge against localhost",
+ "url": "http://localhost",
+ "webRoot": "${workspaceFolder}/src",
+ "sourceMaps": true
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..7d8aed4
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,145 @@
+{
+ "typescript.tsdk": "node_modules/typescript/lib",
+ "npm.packageManager": "pnpm",
+ "editor.tabSize": 2,
+ "prettier.printWidth": 100, // 超过最大值换行
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "files.eol": "\n",
+ "search.exclude": {
+ "**/node_modules": true,
+ "**/*.log": true,
+ "**/*.log*": true,
+ "**/bower_components": true,
+ "**/dist": true,
+ "**/elehukouben": true,
+ "**/.git": true,
+ "**/.gitignore": true,
+ "**/.svn": true,
+ "**/.DS_Store": true,
+ "**/.idea": true,
+ "**/.vscode": false,
+ "**/yarn.lock": true,
+ "**/tmp": true,
+ "out": true,
+ "dist": true,
+ "node_modules": true,
+ "CHANGELOG.md": true,
+ "examples": true,
+ "res": true,
+ "screenshots": true,
+ "yarn-error.log": true,
+ "**/.yarn": true
+ },
+ "files.exclude": {
+ "**/.cache": true,
+ "**/.editorconfig": true,
+ "**/.eslintcache": true,
+ "**/bower_components": true,
+ "**/.idea": true,
+ "**/tmp": true,
+ "**/.git": true,
+ "**/.svn": true,
+ "**/.hg": true,
+ "**/CVS": true,
+ "**/.DS_Store": true
+ },
+ "files.watcherExclude": {
+ "**/.git/objects/**": true,
+ "**/.git/subtree-cache/**": true,
+ "**/.vscode/**": true,
+ "**/node_modules/**": true,
+ "**/tmp/**": true,
+ "**/bower_components/**": true,
+ "**/dist/**": true,
+ "**/yarn.lock": true
+ },
+ "stylelint.enable": true,
+ "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
+ "path-intellisense.mappings": {
+ "@/": "${workspaceRoot}/src"
+ },
+ "[javascriptreact]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[typescript]": {
+ "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+ },
+ "[typescriptreact]": {
+ "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+ },
+ "[html]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[css]": {
+ "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+ },
+ "[less]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[scss]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[markdown]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": "explicit",
+ "source.fixAll.stylelint": "explicit"
+ },
+ "[vue]": {
+ "editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+ },
+ "i18n-ally.localesPaths": ["src/locales"],
+ "i18n-ally.keystyle": "nested",
+ "i18n-ally.sortKeys": true,
+ "i18n-ally.namespace": false,
+ "i18n-ally.enabledParsers": ["ts"],
+ "i18n-ally.sourceLanguage": "en",
+ "i18n-ally.displayLanguage": "zh-CN",
+ "i18n-ally.enabledFrameworks": ["vue", "react"],
+ "cSpell.words": [
+ "brotli",
+ "browserslist",
+ "codemirror",
+ "commitlint",
+ "cropperjs",
+ "echart",
+ "echarts",
+ "esnext",
+ "esno",
+ "iconify",
+ "INTLIFY",
+ "lintstagedrc",
+ "logicflow",
+ "nprogress",
+ "pinia",
+ "pnpm",
+ "qrcode",
+ "sider",
+ "sortablejs",
+ "stylelint",
+ "svgs",
+ "unocss",
+ "unplugin",
+ "unref",
+ "videojs",
+ "VITE",
+ "vitejs",
+ "vueuse",
+ "wangeditor",
+ "xingyu",
+ "yudao",
+ "zxcvbn"
+ ],
+ // 控制相关文件嵌套展示
+ "explorer.fileNesting.enabled": true,
+ "explorer.fileNesting.expand": false,
+ "explorer.fileNesting.patterns": {
+ "*.ts": "$(capture).test.ts, $(capture).test.tsx",
+ "*.tsx": "$(capture).test.ts, $(capture).test.tsx",
+ "*.env": "$(capture).env.*",
+ "package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
+ },
+ "terminal.integrated.scrollback": 10000,
+ "nuxt.isNuxtApp": false
+}
diff --git a/build/vite/index.ts b/build/vite/index.ts
new file mode 100644
index 0000000..585759f
--- /dev/null
+++ b/build/vite/index.ts
@@ -0,0 +1,100 @@
+import { resolve } from 'path'
+import Vue from '@vitejs/plugin-vue'
+import VueJsx from '@vitejs/plugin-vue-jsx'
+import progress from 'vite-plugin-progress'
+import EslintPlugin from 'vite-plugin-eslint'
+import PurgeIcons from 'vite-plugin-purge-icons'
+import { ViteEjsPlugin } from 'vite-plugin-ejs'
+// @ts-ignore
+import ElementPlus from 'unplugin-element-plus/vite'
+import AutoImport from 'unplugin-auto-import/vite'
+import Components from 'unplugin-vue-components/vite'
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
+import viteCompression from 'vite-plugin-compression'
+import topLevelAwait from 'vite-plugin-top-level-await'
+import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
+import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
+import UnoCSS from 'unocss/vite'
+
+export function createVitePlugins() {
+ const root = process.cwd()
+
+ // 路径查找
+ function pathResolve(dir: string) {
+ return resolve(root, '.', dir)
+ }
+
+ return [
+ Vue(),
+ VueJsx(),
+ UnoCSS(),
+ progress(),
+ PurgeIcons(),
+ ElementPlus({}),
+ AutoImport({
+ include: [
+ /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
+ /\.vue$/,
+ /\.vue\?vue/, // .vue
+ /\.md$/ // .md
+ ],
+ imports: [
+ 'vue',
+ 'vue-router',
+ // 可额外添加需要 autoImport 的组件
+ {
+ '@/hooks/web/useI18n': ['useI18n'],
+ '@/hooks/web/useMessage': ['useMessage'],
+ '@/hooks/web/useTable': ['useTable'],
+ '@/hooks/web/useCrudSchemas': ['useCrudSchemas'],
+ '@/utils/formRules': ['required'],
+ '@/utils/dict': ['DICT_TYPE']
+ }
+ ],
+ dts: 'src/types/auto-imports.d.ts',
+ resolvers: [ElementPlusResolver()],
+ eslintrc: {
+ enabled: false, // Default `false`
+ filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
+ globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
+ }
+ }),
+ Components({
+ // 生成自定义 `auto-components.d.ts` 全局声明
+ dts: 'src/types/auto-components.d.ts',
+ // 自定义组件的解析器
+ resolvers: [ElementPlusResolver()],
+ globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
+ }),
+ EslintPlugin({
+ cache: false,
+ include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
+ }),
+ VueI18nPlugin({
+ runtimeOnly: true,
+ compositionOnly: true,
+ include: [resolve(__dirname, 'src/locales/**')]
+ }),
+ createSvgIconsPlugin({
+ iconDirs: [pathResolve('src/assets/svgs')],
+ symbolId: 'icon-[dir]-[name]',
+ svgoOptions: true
+ }),
+ viteCompression({
+ verbose: true, // 是否在控制台输出压缩结果
+ disable: false, // 是否禁用
+ threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
+ algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
+ ext: '.gz', // 生成的压缩包后缀
+ deleteOriginFile: false //压缩后是否删除源文件
+ }),
+ ViteEjsPlugin(),
+ topLevelAwait({
+ // https://juejin.cn/post/7152191742513512485
+ // The export name of top-level await promise for each chunk module
+ promiseExportName: '__tla',
+ // The function to generate import names of top-level await promise in each chunk module
+ promiseImportName: (i) => `__tla_${i}`
+ })
+ ]
+}
diff --git a/build/vite/optimize.ts b/build/vite/optimize.ts
new file mode 100644
index 0000000..aa7e68c
--- /dev/null
+++ b/build/vite/optimize.ts
@@ -0,0 +1,122 @@
+const include = [
+ 'qs',
+ 'url',
+ 'vue',
+ 'sass',
+ 'mitt',
+ 'axios',
+ 'pinia',
+ 'dayjs',
+ 'qrcode',
+ 'unocss',
+ 'vue-router',
+ 'vue-types',
+ 'vue-i18n',
+ 'crypto-js',
+ 'cropperjs',
+ 'lodash-es',
+ 'nprogress',
+ 'web-storage-cache',
+ '@iconify/iconify',
+ '@vueuse/core',
+ '@zxcvbn-ts/core',
+ 'echarts/core',
+ 'echarts/charts',
+ 'echarts/components',
+ 'echarts/renderers',
+ 'echarts-wordcloud',
+ '@wangeditor/editor',
+ '@wangeditor/editor-for-vue',
+ '@microsoft/fetch-event-source',
+ 'markdown-it',
+ 'markmap-view',
+ 'markmap-lib',
+ 'markmap-toolbar',
+ 'highlight.js',
+ 'element-plus',
+ 'element-plus/es',
+ 'element-plus/es/locale/lang/zh-cn',
+ 'element-plus/es/locale/lang/en',
+ 'element-plus/es/components/avatar/style/css',
+ 'element-plus/es/components/space/style/css',
+ 'element-plus/es/components/backtop/style/css',
+ 'element-plus/es/components/form/style/css',
+ 'element-plus/es/components/radio-group/style/css',
+ 'element-plus/es/components/radio/style/css',
+ 'element-plus/es/components/checkbox/style/css',
+ 'element-plus/es/components/checkbox-group/style/css',
+ 'element-plus/es/components/switch/style/css',
+ 'element-plus/es/components/time-picker/style/css',
+ 'element-plus/es/components/date-picker/style/css',
+ 'element-plus/es/components/descriptions/style/css',
+ 'element-plus/es/components/descriptions-item/style/css',
+ 'element-plus/es/components/link/style/css',
+ 'element-plus/es/components/tooltip/style/css',
+ 'element-plus/es/components/drawer/style/css',
+ 'element-plus/es/components/dialog/style/css',
+ 'element-plus/es/components/checkbox-button/style/css',
+ 'element-plus/es/components/option-group/style/css',
+ 'element-plus/es/components/radio-button/style/css',
+ 'element-plus/es/components/cascader/style/css',
+ 'element-plus/es/components/color-picker/style/css',
+ 'element-plus/es/components/input-number/style/css',
+ 'element-plus/es/components/rate/style/css',
+ 'element-plus/es/components/select-v2/style/css',
+ 'element-plus/es/components/tree-select/style/css',
+ 'element-plus/es/components/slider/style/css',
+ 'element-plus/es/components/time-select/style/css',
+ 'element-plus/es/components/autocomplete/style/css',
+ 'element-plus/es/components/image-viewer/style/css',
+ 'element-plus/es/components/upload/style/css',
+ 'element-plus/es/components/col/style/css',
+ 'element-plus/es/components/form-item/style/css',
+ 'element-plus/es/components/alert/style/css',
+ 'element-plus/es/components/breadcrumb/style/css',
+ 'element-plus/es/components/select/style/css',
+ 'element-plus/es/components/input/style/css',
+ 'element-plus/es/components/breadcrumb-item/style/css',
+ 'element-plus/es/components/tag/style/css',
+ 'element-plus/es/components/pagination/style/css',
+ 'element-plus/es/components/table/style/css',
+ 'element-plus/es/components/table-v2/style/css',
+ 'element-plus/es/components/table-column/style/css',
+ 'element-plus/es/components/card/style/css',
+ 'element-plus/es/components/row/style/css',
+ 'element-plus/es/components/button/style/css',
+ 'element-plus/es/components/menu/style/css',
+ 'element-plus/es/components/sub-menu/style/css',
+ 'element-plus/es/components/menu-item/style/css',
+ 'element-plus/es/components/option/style/css',
+ 'element-plus/es/components/dropdown/style/css',
+ 'element-plus/es/components/dropdown-menu/style/css',
+ 'element-plus/es/components/dropdown-item/style/css',
+ 'element-plus/es/components/skeleton/style/css',
+ 'element-plus/es/components/skeleton/style/css',
+ 'element-plus/es/components/backtop/style/css',
+ 'element-plus/es/components/menu/style/css',
+ 'element-plus/es/components/sub-menu/style/css',
+ 'element-plus/es/components/menu-item/style/css',
+ 'element-plus/es/components/dropdown/style/css',
+ 'element-plus/es/components/tree/style/css',
+ 'element-plus/es/components/dropdown-menu/style/css',
+ 'element-plus/es/components/dropdown-item/style/css',
+ 'element-plus/es/components/badge/style/css',
+ 'element-plus/es/components/breadcrumb/style/css',
+ 'element-plus/es/components/breadcrumb-item/style/css',
+ 'element-plus/es/components/image/style/css',
+ 'element-plus/es/components/collapse-transition/style/css',
+ 'element-plus/es/components/timeline/style/css',
+ 'element-plus/es/components/timeline-item/style/css',
+ 'element-plus/es/components/collapse/style/css',
+ 'element-plus/es/components/collapse-item/style/css',
+ 'element-plus/es/components/button-group/style/css',
+ 'element-plus/es/components/text/style/css',
+ 'element-plus/es/components/segmented/style/css',
+ '@element-plus/icons-vue',
+ 'element-plus/es/components/footer/style/css',
+ 'element-plus/es/components/empty/style/css'
+]
+
+const exclude = ['@iconify/json']
+
+export { include, exclude }
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..f4b23d9
--- /dev/null
+++ b/index.html
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+ %VITE_APP_TITLE%
+
+
+
+
+
+
+
+
+
%VITE_APP_TITLE%
+
+
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..b02c8f5
--- /dev/null
+++ b/package.json
@@ -0,0 +1,153 @@
+{
+ "name": "syhx-ui-admin-vue3",
+ "version": "2.2.0-snapshot",
+ "description": "基于vue3、vite4、element-plus、typesScript",
+ "author": "ccwin",
+ "private": false,
+ "scripts": {
+ "i": "pnpm install",
+ "dev": "vite --mode env.local",
+ "dev-server": "vite --mode dev",
+ "ts:check": "vue-tsc --noEmit",
+ "build:local": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build",
+ "build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
+ "build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
+ "build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
+ "build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod",
+ "serve:dev": "vite preview --mode dev",
+ "serve:prod": "vite preview --mode prod",
+ "preview": "pnpm build:local && vite preview",
+ "clean": "npx rimraf node_modules",
+ "clean:cache": "npx rimraf node_modules/.cache",
+ "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
+ "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
+ "lint:style": "stylelint --fix \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
+ "lint:lint-staged": "lint-staged -c "
+ },
+ "dependencies": {
+ "@antv/x6": "^2.18.1",
+ "@antv/x6-vue-shape": "^2.1.2",
+ "@element-plus/icons-vue": "^2.1.0",
+ "@form-create/designer": "^3.1.3",
+ "@form-create/element-ui": "^3.1.24",
+ "@iconify/iconify": "^3.1.1",
+ "@microsoft/fetch-event-source": "^2.0.1",
+ "@videojs-player/vue": "^1.0.0",
+ "@vueuse/core": "^10.9.0",
+ "@wangeditor/editor": "^5.1.23",
+ "@wangeditor/editor-for-vue": "^5.1.10",
+ "@zxcvbn-ts/core": "^3.0.4",
+ "animate.css": "^4.1.1",
+ "axios": "^1.6.8",
+ "benz-amr-recorder": "^1.1.5",
+ "bpmn-js-token-simulation": "^0.10.0",
+ "camunda-bpmn-moddle": "^7.0.1",
+ "cropperjs": "^1.6.1",
+ "crypto-js": "^4.2.0",
+ "dayjs": "^1.11.10",
+ "diagram-js": "^12.8.0",
+ "driver.js": "^1.3.1",
+ "echarts": "^5.5.0",
+ "echarts-wordcloud": "^2.1.0",
+ "element-plus": "2.8.0",
+ "fast-xml-parser": "^4.3.2",
+ "highlight.js": "^11.9.0",
+ "jsencrypt": "^3.3.2",
+ "lodash-es": "^4.17.21",
+ "markdown-it": "^14.1.0",
+ "markmap-common": "^0.16.0",
+ "markmap-lib": "^0.16.1",
+ "markmap-toolbar": "^0.17.0",
+ "markmap-view": "^0.16.0",
+ "min-dash": "^4.1.1",
+ "mitt": "^3.0.1",
+ "nprogress": "^0.2.0",
+ "pinia": "^2.1.7",
+ "pinia-plugin-persistedstate": "^3.2.1",
+ "qrcode": "^1.5.3",
+ "qs": "^6.12.0",
+ "steady-xml": "^0.1.0",
+ "url": "^0.11.3",
+ "video.js": "^7.21.5",
+ "vue": "3.4.21",
+ "vue-dompurify-html": "^4.1.4",
+ "vue-i18n": "9.10.2",
+ "vue-router": "^4.3.0",
+ "vue-types": "^5.1.1",
+ "vuedraggable": "^4.1.0",
+ "vxe-table": "^4.7.80",
+ "web-storage-cache": "^1.1.1",
+ "xml-js": "^1.6.11"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^19.0.1",
+ "@commitlint/config-conventional": "^19.0.0",
+ "@iconify/json": "^2.2.187",
+ "@intlify/unplugin-vue-i18n": "^2.0.0",
+ "@purge-icons/generated": "^0.9.0",
+ "@types/lodash-es": "^4.17.12",
+ "@types/node": "^20.11.21",
+ "@types/nprogress": "^0.2.3",
+ "@types/qrcode": "^1.5.5",
+ "@types/qs": "^6.9.12",
+ "@typescript-eslint/eslint-plugin": "^7.1.0",
+ "@typescript-eslint/parser": "^7.1.0",
+ "@unocss/eslint-config": "^0.57.4",
+ "@unocss/transformer-variant-group": "^0.58.5",
+ "@vitejs/plugin-legacy": "^5.3.1",
+ "@vitejs/plugin-vue": "^5.0.4",
+ "@vitejs/plugin-vue-jsx": "^3.1.0",
+ "autoprefixer": "^10.4.17",
+ "bpmn-js": "8.9.0",
+ "bpmn-js-properties-panel": "0.46.0",
+ "consola": "^3.2.3",
+ "eslint": "^8.57.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-define-config": "^2.1.0",
+ "eslint-plugin-prettier": "^5.1.3",
+ "eslint-plugin-vue": "^9.22.0",
+ "lint-staged": "^15.2.2",
+ "postcss": "^8.4.35",
+ "postcss-html": "^1.6.0",
+ "postcss-scss": "^4.0.9",
+ "prettier": "^3.2.5",
+ "prettier-eslint": "^16.3.0",
+ "rimraf": "^5.0.5",
+ "rollup": "^4.12.0",
+ "sass": "^1.69.5",
+ "stylelint": "^16.2.1",
+ "stylelint-config-html": "^1.1.0",
+ "stylelint-config-recommended": "^14.0.0",
+ "stylelint-config-standard": "^36.0.0",
+ "stylelint-order": "^6.0.4",
+ "terser": "^5.28.1",
+ "typescript": "5.3.3",
+ "unocss": "^0.58.5",
+ "unplugin-auto-import": "^0.16.7",
+ "unplugin-element-plus": "^0.8.0",
+ "unplugin-vue-components": "^0.25.2",
+ "vite": "5.1.4",
+ "vite-plugin-compression": "^0.5.1",
+ "vite-plugin-ejs": "^1.7.0",
+ "vite-plugin-eslint": "^1.8.1",
+ "vite-plugin-progress": "^0.0.7",
+ "vite-plugin-purge-icons": "^0.10.0",
+ "vite-plugin-svg-icons": "^2.0.1",
+ "vite-plugin-top-level-await": "^1.3.1",
+ "vue-eslint-parser": "^9.3.2",
+ "vue-tsc": "^1.8.27"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://gitee.com/yudaocode/yudao-ui-admin-vue3"
+ },
+ "bugs": {
+ "url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues"
+ },
+ "homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3",
+ "engines": {
+ "node": ">= 16.0.0",
+ "pnpm": ">=8.6.0"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..7438384
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,11707 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@antv/x6':
+ specifier: ^2.18.1
+ version: 2.18.1
+ '@antv/x6-vue-shape':
+ specifier: ^2.1.2
+ version: 2.1.2(@antv/x6@2.18.1)(vue@3.4.21(typescript@5.3.3))
+ '@element-plus/icons-vue':
+ specifier: ^2.1.0
+ version: 2.3.1(vue@3.4.21(typescript@5.3.3))
+ '@form-create/designer':
+ specifier: ^3.1.3
+ version: 3.1.5(vue@3.4.21(typescript@5.3.3))
+ '@form-create/element-ui':
+ specifier: ^3.1.24
+ version: 3.1.29(vue@3.4.21(typescript@5.3.3))
+ '@iconify/iconify':
+ specifier: ^3.1.1
+ version: 3.1.1
+ '@microsoft/fetch-event-source':
+ specifier: ^2.0.1
+ version: 2.0.1
+ '@videojs-player/vue':
+ specifier: ^1.0.0
+ version: 1.0.0(@types/video.js@7.3.58)(video.js@7.21.5)(vue@3.4.21(typescript@5.3.3))
+ '@vueuse/core':
+ specifier: ^10.9.0
+ version: 10.9.0(vue@3.4.21(typescript@5.3.3))
+ '@wangeditor/editor':
+ specifier: ^5.1.23
+ version: 5.1.23
+ '@wangeditor/editor-for-vue':
+ specifier: ^5.1.10
+ version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.4.21(typescript@5.3.3))
+ '@zxcvbn-ts/core':
+ specifier: ^3.0.4
+ version: 3.0.4
+ animate.css:
+ specifier: ^4.1.1
+ version: 4.1.1
+ axios:
+ specifier: ^1.6.8
+ version: 1.6.8
+ benz-amr-recorder:
+ specifier: ^1.1.5
+ version: 1.1.5
+ bpmn-js-token-simulation:
+ specifier: ^0.10.0
+ version: 0.10.0
+ camunda-bpmn-moddle:
+ specifier: ^7.0.1
+ version: 7.0.1
+ cropperjs:
+ specifier: ^1.6.1
+ version: 1.6.2
+ crypto-js:
+ specifier: ^4.2.0
+ version: 4.2.0
+ dayjs:
+ specifier: ^1.11.10
+ version: 1.11.11
+ diagram-js:
+ specifier: ^12.8.0
+ version: 12.8.1
+ driver.js:
+ specifier: ^1.3.1
+ version: 1.3.1
+ echarts:
+ specifier: ^5.5.0
+ version: 5.5.0
+ echarts-wordcloud:
+ specifier: ^2.1.0
+ version: 2.1.0(echarts@5.5.0)
+ element-plus:
+ specifier: 2.8.0
+ version: 2.8.0(vue@3.4.21(typescript@5.3.3))
+ fast-xml-parser:
+ specifier: ^4.3.2
+ version: 4.3.6
+ highlight.js:
+ specifier: ^11.9.0
+ version: 11.9.0
+ jsencrypt:
+ specifier: ^3.3.2
+ version: 3.3.2
+ lodash-es:
+ specifier: ^4.17.21
+ version: 4.17.21
+ markdown-it:
+ specifier: ^14.1.0
+ version: 14.1.0
+ markmap-common:
+ specifier: ^0.16.0
+ version: 0.16.0
+ markmap-lib:
+ specifier: ^0.16.1
+ version: 0.16.1(markmap-common@0.16.0)
+ markmap-toolbar:
+ specifier: ^0.17.0
+ version: 0.17.0(markmap-common@0.16.0)
+ markmap-view:
+ specifier: ^0.16.0
+ version: 0.16.0(markmap-common@0.16.0)
+ min-dash:
+ specifier: ^4.1.1
+ version: 4.2.1
+ mitt:
+ specifier: ^3.0.1
+ version: 3.0.1
+ nprogress:
+ specifier: ^0.2.0
+ version: 0.2.0
+ pinia:
+ specifier: ^2.1.7
+ version: 2.1.7(typescript@5.3.3)(vue@3.4.21(typescript@5.3.3))
+ pinia-plugin-persistedstate:
+ specifier: ^3.2.1
+ version: 3.2.1(pinia@2.1.7(typescript@5.3.3)(vue@3.4.21(typescript@5.3.3)))
+ qrcode:
+ specifier: ^1.5.3
+ version: 1.5.3
+ qs:
+ specifier: ^6.12.0
+ version: 6.12.1
+ steady-xml:
+ specifier: ^0.1.0
+ version: 0.1.0
+ url:
+ specifier: ^0.11.3
+ version: 0.11.3
+ video.js:
+ specifier: ^7.21.5
+ version: 7.21.5
+ vue:
+ specifier: 3.4.21
+ version: 3.4.21(typescript@5.3.3)
+ vue-dompurify-html:
+ specifier: ^4.1.4
+ version: 4.1.4(vue@3.4.21(typescript@5.3.3))
+ vue-i18n:
+ specifier: 9.10.2
+ version: 9.10.2(vue@3.4.21(typescript@5.3.3))
+ vue-router:
+ specifier: ^4.3.0
+ version: 4.3.2(vue@3.4.21(typescript@5.3.3))
+ vue-types:
+ specifier: ^5.1.1
+ version: 5.1.1(vue@3.4.21(typescript@5.3.3))
+ vuedraggable:
+ specifier: ^4.1.0
+ version: 4.1.0(vue@3.4.21(typescript@5.3.3))
+ vxe-table:
+ specifier: ^4.7.80
+ version: 4.7.80
+ web-storage-cache:
+ specifier: ^1.1.1
+ version: 1.1.1
+ xml-js:
+ specifier: ^1.6.11
+ version: 1.6.11
+ devDependencies:
+ '@commitlint/cli':
+ specifier: ^19.0.1
+ version: 19.3.0(@types/node@20.12.7)(typescript@5.3.3)
+ '@commitlint/config-conventional':
+ specifier: ^19.0.0
+ version: 19.2.2
+ '@iconify/json':
+ specifier: ^2.2.187
+ version: 2.2.205
+ '@intlify/unplugin-vue-i18n':
+ specifier: ^2.0.0
+ version: 2.0.0(rollup@4.17.1)(vue-i18n@9.10.2(vue@3.4.21(typescript@5.3.3)))
+ '@purge-icons/generated':
+ specifier: ^0.9.0
+ version: 0.9.0
+ '@types/lodash-es':
+ specifier: ^4.17.12
+ version: 4.17.12
+ '@types/node':
+ specifier: ^20.11.21
+ version: 20.12.7
+ '@types/nprogress':
+ specifier: ^0.2.3
+ version: 0.2.3
+ '@types/qrcode':
+ specifier: ^1.5.5
+ version: 1.5.5
+ '@types/qs':
+ specifier: ^6.9.12
+ version: 6.9.15
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^7.1.0
+ version: 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/parser':
+ specifier: ^7.1.0
+ version: 7.7.1(eslint@8.57.0)(typescript@5.3.3)
+ '@unocss/eslint-config':
+ specifier: ^0.57.4
+ version: 0.57.7(eslint@8.57.0)(typescript@5.3.3)
+ '@unocss/transformer-variant-group':
+ specifier: ^0.58.5
+ version: 0.58.9
+ '@vitejs/plugin-legacy':
+ specifier: ^5.3.1
+ version: 5.3.2(terser@5.30.4)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ '@vitejs/plugin-vue':
+ specifier: ^5.0.4
+ version: 5.0.4(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))
+ '@vitejs/plugin-vue-jsx':
+ specifier: ^3.1.0
+ version: 3.1.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))
+ autoprefixer:
+ specifier: ^10.4.17
+ version: 10.4.19(postcss@8.4.38)
+ bpmn-js:
+ specifier: 8.9.0
+ version: 8.9.0
+ bpmn-js-properties-panel:
+ specifier: 0.46.0
+ version: 0.46.0(bpmn-js@8.9.0)
+ consola:
+ specifier: ^3.2.3
+ version: 3.2.3
+ eslint:
+ specifier: ^8.57.0
+ version: 8.57.0
+ eslint-config-prettier:
+ specifier: ^9.1.0
+ version: 9.1.0(eslint@8.57.0)
+ eslint-define-config:
+ specifier: ^2.1.0
+ version: 2.1.0
+ eslint-plugin-prettier:
+ specifier: ^5.1.3
+ version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5)
+ eslint-plugin-vue:
+ specifier: ^9.22.0
+ version: 9.25.0(eslint@8.57.0)
+ lint-staged:
+ specifier: ^15.2.2
+ version: 15.2.2
+ postcss:
+ specifier: ^8.4.35
+ version: 8.4.38
+ postcss-html:
+ specifier: ^1.6.0
+ version: 1.6.0
+ postcss-scss:
+ specifier: ^4.0.9
+ version: 4.0.9(postcss@8.4.38)
+ prettier:
+ specifier: ^3.2.5
+ version: 3.2.5
+ prettier-eslint:
+ specifier: ^16.3.0
+ version: 16.3.0
+ rimraf:
+ specifier: ^5.0.5
+ version: 5.0.5
+ rollup:
+ specifier: ^4.12.0
+ version: 4.17.1
+ sass:
+ specifier: ^1.69.5
+ version: 1.75.0
+ stylelint:
+ specifier: ^16.2.1
+ version: 16.4.0(typescript@5.3.3)
+ stylelint-config-html:
+ specifier: ^1.1.0
+ version: 1.1.0(postcss-html@1.6.0)(stylelint@16.4.0(typescript@5.3.3))
+ stylelint-config-recommended:
+ specifier: ^14.0.0
+ version: 14.0.0(stylelint@16.4.0(typescript@5.3.3))
+ stylelint-config-standard:
+ specifier: ^36.0.0
+ version: 36.0.0(stylelint@16.4.0(typescript@5.3.3))
+ stylelint-order:
+ specifier: ^6.0.4
+ version: 6.0.4(stylelint@16.4.0(typescript@5.3.3))
+ terser:
+ specifier: ^5.28.1
+ version: 5.30.4
+ typescript:
+ specifier: 5.3.3
+ version: 5.3.3
+ unocss:
+ specifier: ^0.58.5
+ version: 0.58.9(postcss@8.4.38)(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ unplugin-auto-import:
+ specifier: ^0.16.7
+ version: 0.16.7(@vueuse/core@10.9.0(vue@3.4.21(typescript@5.3.3)))(rollup@4.17.1)
+ unplugin-element-plus:
+ specifier: ^0.8.0
+ version: 0.8.0(rollup@4.17.1)
+ unplugin-vue-components:
+ specifier: ^0.25.2
+ version: 0.25.2(@babel/parser@7.24.4)(rollup@4.17.1)(vue@3.4.21(typescript@5.3.3))
+ vite:
+ specifier: 5.1.4
+ version: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ vite-plugin-compression:
+ specifier: ^0.5.1
+ version: 0.5.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ vite-plugin-ejs:
+ specifier: ^1.7.0
+ version: 1.7.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ vite-plugin-eslint:
+ specifier: ^1.8.1
+ version: 1.8.1(eslint@8.57.0)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ vite-plugin-progress:
+ specifier: ^0.0.7
+ version: 0.0.7(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ vite-plugin-purge-icons:
+ specifier: ^0.10.0
+ version: 0.10.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ vite-plugin-svg-icons:
+ specifier: ^2.0.1
+ version: 2.0.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ vite-plugin-top-level-await:
+ specifier: ^1.3.1
+ version: 1.4.1(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ vue-eslint-parser:
+ specifier: ^9.3.2
+ version: 9.4.2(eslint@8.57.0)
+ vue-tsc:
+ specifier: ^1.8.27
+ version: 1.8.27(typescript@5.3.3)
+
+packages:
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz}
+ engines: {node: '>=6.0.0'}
+
+ '@antfu/install-pkg@0.1.1':
+ resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==, tarball: https://registry.npmmirror.com/@antfu/install-pkg/-/install-pkg-0.1.1.tgz}
+
+ '@antfu/utils@0.7.7':
+ resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==, tarball: https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz}
+
+ '@antv/x6-common@2.0.17':
+ resolution: {integrity: sha512-37g7vmRkNdYzZPdwjaMSZEGv/MMH0S4r70/Jwoab1mioycmuIBN73iyziX8m56BvJSDucZ3J/6DU07otWqzS6A==}
+
+ '@antv/x6-geometry@2.0.5':
+ resolution: {integrity: sha512-MId6riEQkxphBpVeTcL4ZNXL4lScyvDEPLyIafvWMcWNTGK0jgkK7N20XSzqt8ltJb0mGUso5s56mrk8ysHu2A==}
+
+ '@antv/x6-vue-shape@2.1.2':
+ resolution: {integrity: sha512-lfLNJ2ztK8NP2JBAWTD6m5Wol0u6tOqj2KdOhWZoT8EtEw9rMmAdxsr8uTi9MRJO9pDMM0nbsR3cidnMh7VeDQ==}
+ peerDependencies:
+ '@antv/x6': ^2.x
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^2.0.0 || >=3.0.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ '@antv/x6@2.18.1':
+ resolution: {integrity: sha512-FkWdbLOpN9J7dfJ+kiBxzowSx2N6syBily13NMVdMs+wqC6Eo5sLXWCZjQHateTFWgFw7ZGi2y9o3Pmdov1sXw==}
+
+ '@babel/code-frame@7.24.2':
+ resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.2.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.24.4':
+ resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==, tarball: https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.24.4':
+ resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.24.4':
+ resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.22.5':
+ resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==, tarball: https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15':
+ resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==, tarball: https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.23.6':
+ resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==, tarball: https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.24.4':
+ resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==, tarball: https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-create-regexp-features-plugin@7.22.15':
+ resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==, tarball: https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-define-polyfill-provider@0.6.2':
+ resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==, tarball: https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ '@babel/helper-environment-visitor@7.22.20':
+ resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==, tarball: https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-function-name@7.23.0':
+ resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==, tarball: https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-hoist-variables@7.22.5':
+ resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, tarball: https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-member-expression-to-functions@7.23.0':
+ resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==, tarball: https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.22.15':
+ resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.24.3':
+ resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.23.3':
+ resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==, tarball: https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.22.5':
+ resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==, tarball: https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.24.0':
+ resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==, tarball: https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-remap-async-to-generator@7.22.20':
+ resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==, tarball: https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-replace-supers@7.24.1':
+ resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==, tarball: https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-simple-access@7.22.5':
+ resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, tarball: https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.22.5':
+ resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==, tarball: https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-split-export-declaration@7.22.6':
+ resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, tarball: https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.24.1':
+ resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.22.20':
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.23.5':
+ resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==, tarball: https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-wrap-function@7.22.20':
+ resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==, tarball: https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.24.4':
+ resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/highlight@7.24.2':
+ resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.2.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.24.4':
+ resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.24.4.tgz}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4':
+ resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1':
+ resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1':
+ resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1':
+ resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==, tarball: https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, tarball: https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-dynamic-import@7.8.3':
+ resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-export-namespace-from@7.8.3':
+ resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-assertions@7.24.1':
+ resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.24.1':
+ resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.24.1':
+ resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.24.1':
+ resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-arrow-functions@7.24.1':
+ resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-generator-functions@7.24.3':
+ resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-async-to-generator@7.24.1':
+ resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoped-functions@7.24.1':
+ resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-block-scoping@7.24.4':
+ resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-properties@7.24.1':
+ resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-class-static-block@7.24.4':
+ resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+
+ '@babel/plugin-transform-classes@7.24.1':
+ resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-computed-properties@7.24.1':
+ resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-destructuring@7.24.1':
+ resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-dotall-regex@7.24.1':
+ resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-duplicate-keys@7.24.1':
+ resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-dynamic-import@7.24.1':
+ resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-exponentiation-operator@7.24.1':
+ resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-export-namespace-from@7.24.1':
+ resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-for-of@7.24.1':
+ resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-function-name@7.24.1':
+ resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-json-strings@7.24.1':
+ resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-literals@7.24.1':
+ resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-logical-assignment-operators@7.24.1':
+ resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-member-expression-literals@7.24.1':
+ resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-amd@7.24.1':
+ resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.24.1':
+ resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-systemjs@7.24.1':
+ resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-umd@7.24.1':
+ resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.22.5':
+ resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/plugin-transform-new-target@7.24.1':
+ resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.24.1':
+ resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-numeric-separator@7.24.1':
+ resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-rest-spread@7.24.1':
+ resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-super@7.24.1':
+ resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-catch-binding@7.24.1':
+ resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-chaining@7.24.1':
+ resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-parameters@7.24.1':
+ resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-methods@7.24.1':
+ resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-property-in-object@7.24.1':
+ resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-property-literals@7.24.1':
+ resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regenerator@7.24.1':
+ resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-reserved-words@7.24.1':
+ resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-shorthand-properties@7.24.1':
+ resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-spread@7.24.1':
+ resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-sticky-regex@7.24.1':
+ resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-template-literals@7.24.1':
+ resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typeof-symbol@7.24.1':
+ resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.24.4':
+ resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-escapes@7.24.1':
+ resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-property-regex@7.24.1':
+ resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-regex@7.24.1':
+ resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-unicode-sets-regex@7.24.1':
+ resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==, tarball: https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/preset-env@7.24.4':
+ resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==, tarball: https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-modules@0.1.6-no-external-plugins':
+ resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, tarball: https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+
+ '@babel/preset-typescript@7.24.1':
+ resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==, tarball: https://registry.npmmirror.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/regjsgen@0.8.0':
+ resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==, tarball: https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz}
+
+ '@babel/runtime-corejs3@7.24.4':
+ resolution: {integrity: sha512-VOQOexSilscN24VEY810G/PqtpFvx/z6UqDIjIWbDe2368HhDLkYN5TYwaEz/+eRCUkhJ2WaNLLmQAlxzfWj4w==, tarball: https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/runtime@7.24.4':
+ resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.4.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.24.0':
+ resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.24.0.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.24.1':
+ resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.24.1.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.24.0':
+ resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.24.0.tgz}
+ engines: {node: '>=6.9.0'}
+
+ '@bpmn-io/diagram-js-ui@0.2.3':
+ resolution: {integrity: sha512-OGyjZKvGK8tHSZ0l7RfeKhilGoOGtFDcoqSGYkX0uhFlo99OVZ9Jn1K7TJGzcE9BdKwvA5Y5kGqHEhdTxHvFfw==, tarball: https://registry.npmmirror.com/@bpmn-io/diagram-js-ui/-/diagram-js-ui-0.2.3.tgz}
+
+ '@bpmn-io/element-templates-validator@0.2.0':
+ resolution: {integrity: sha512-/ogp0+6zUFdoiY09NYaHL5JtapB8zN1spG8hpML96qetXDCODRxnsqlHTvSwxtZHUDcgun+lxcK8b4wgtCP+6Q==, tarball: https://registry.npmmirror.com/@bpmn-io/element-templates-validator/-/element-templates-validator-0.2.0.tgz}
+
+ '@bpmn-io/extract-process-variables@0.4.5':
+ resolution: {integrity: sha512-LtHx5b9xqS8avRLrq/uTlKhWzMeV3bWQKIdDic2bdo5n9roitX13GRb01u2S0hSsKDWEhXQtydFYN2b6G7bqfw==, tarball: https://registry.npmmirror.com/@bpmn-io/extract-process-variables/-/extract-process-variables-0.4.5.tgz}
+
+ '@camunda/element-templates-json-schema@0.4.0':
+ resolution: {integrity: sha512-M5xW61ba7z2maBxfoT4c1bjuLD8OIL7863et/hULiNG6+R/B9CZ4Qze1juuIfXv4zpF2fYSuUsTPkTtiZrcspQ==, tarball: https://registry.npmmirror.com/@camunda/element-templates-json-schema/-/element-templates-json-schema-0.4.0.tgz}
+
+ '@commitlint/cli@19.3.0':
+ resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==, tarball: https://registry.npmmirror.com/@commitlint/cli/-/cli-19.3.0.tgz}
+ engines: {node: '>=v18'}
+ hasBin: true
+
+ '@commitlint/config-conventional@19.2.2':
+ resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==, tarball: https://registry.npmmirror.com/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/config-validator@19.0.3':
+ resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==, tarball: https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-19.0.3.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/ensure@19.0.3':
+ resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==, tarball: https://registry.npmmirror.com/@commitlint/ensure/-/ensure-19.0.3.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/execute-rule@19.0.0':
+ resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==, tarball: https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/format@19.3.0':
+ resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==, tarball: https://registry.npmmirror.com/@commitlint/format/-/format-19.3.0.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/is-ignored@19.2.2':
+ resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==, tarball: https://registry.npmmirror.com/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/lint@19.2.2':
+ resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==, tarball: https://registry.npmmirror.com/@commitlint/lint/-/lint-19.2.2.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/load@19.2.0':
+ resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==, tarball: https://registry.npmmirror.com/@commitlint/load/-/load-19.2.0.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/message@19.0.0':
+ resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==, tarball: https://registry.npmmirror.com/@commitlint/message/-/message-19.0.0.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/parse@19.0.3':
+ resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==, tarball: https://registry.npmmirror.com/@commitlint/parse/-/parse-19.0.3.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/read@19.2.1':
+ resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==, tarball: https://registry.npmmirror.com/@commitlint/read/-/read-19.2.1.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/resolve-extends@19.1.0':
+ resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==, tarball: https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/rules@19.0.3':
+ resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==, tarball: https://registry.npmmirror.com/@commitlint/rules/-/rules-19.0.3.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/to-lines@19.0.0':
+ resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==, tarball: https://registry.npmmirror.com/@commitlint/to-lines/-/to-lines-19.0.0.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/top-level@19.0.0':
+ resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==, tarball: https://registry.npmmirror.com/@commitlint/top-level/-/top-level-19.0.0.tgz}
+ engines: {node: '>=v18'}
+
+ '@commitlint/types@19.0.3':
+ resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==, tarball: https://registry.npmmirror.com/@commitlint/types/-/types-19.0.3.tgz}
+ engines: {node: '>=v18'}
+
+ '@csstools/css-parser-algorithms@2.6.1':
+ resolution: {integrity: sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==, tarball: https://registry.npmmirror.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^2.2.4
+
+ '@csstools/css-tokenizer@2.2.4':
+ resolution: {integrity: sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==, tarball: https://registry.npmmirror.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz}
+ engines: {node: ^14 || ^16 || >=18}
+
+ '@csstools/media-query-list-parser@2.1.9':
+ resolution: {integrity: sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==, tarball: https://registry.npmmirror.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^2.6.1
+ '@csstools/css-tokenizer': ^2.2.4
+
+ '@csstools/selector-specificity@3.0.3':
+ resolution: {integrity: sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==, tarball: https://registry.npmmirror.com/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss-selector-parser: ^6.0.13
+
+ '@ctrl/tinycolor@3.6.1':
+ resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
+ engines: {node: '>=10'}
+
+ '@dual-bundle/import-meta-resolve@4.0.0':
+ resolution: {integrity: sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==, tarball: https://registry.npmmirror.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz}
+
+ '@element-plus/icons-vue@2.3.1':
+ resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==, tarball: https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz}
+ peerDependencies:
+ vue: ^3.2.0
+
+ '@esbuild/aix-ppc64@0.19.12':
+ resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.19.12':
+ resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.19.12':
+ resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.19.12':
+ resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.19.12':
+ resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.19.12':
+ resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.19.12':
+ resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.19.12':
+ resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.19.12':
+ resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.19.12':
+ resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.19.12':
+ resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.19.12':
+ resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.19.12':
+ resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.19.12':
+ resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.19.12':
+ resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.19.12':
+ resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.19.12':
+ resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.19.12':
+ resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.19.12':
+ resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.19.12':
+ resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.19.12':
+ resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.19.12':
+ resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.4.0':
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, tarball: https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz}
+ 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.10.0':
+ resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==, tarball: https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/eslintrc@2.1.4':
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==, tarball: https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@eslint/js@8.57.0':
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==, tarball: https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@floating-ui/core@1.6.1':
+ resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==}
+
+ '@floating-ui/dom@1.6.4':
+ resolution: {integrity: sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==}
+
+ '@floating-ui/utils@0.2.2':
+ resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==}
+
+ '@form-create/component-elm-checkbox@3.1.29':
+ resolution: {integrity: sha512-tzqpwg+lq1X/V1wEsOkHBC9QxZyUsoymFRrWiEdqvstRcTQKQjntt/3gl8MQ3Tcq22dP2xJbQxjTeu1J8o6NCA==, tarball: https://registry.npmmirror.com/@form-create/component-elm-checkbox/-/component-elm-checkbox-3.1.29.tgz}
+
+ '@form-create/component-elm-frame@3.1.29':
+ resolution: {integrity: sha512-PqOQLvGwxvOssT/IHFrTVcptVvWYYwA5OCMUfoaXqSf9HBQk++EwLd5sdsvAY6ILJMSIa9zHU8tuvSXFOWbg3w==, tarball: https://registry.npmmirror.com/@form-create/component-elm-frame/-/component-elm-frame-3.1.29.tgz}
+
+ '@form-create/component-elm-group@3.1.29':
+ resolution: {integrity: sha512-Hn4l0k1A/noqX3OWgPOnYV7OAAOlH/vNQFwxS9a/18QKuCpLU03MNeanPxwSQY1NL6Fk8NPQGBDcgeOBAcP9hg==, tarball: https://registry.npmmirror.com/@form-create/component-elm-group/-/component-elm-group-3.1.29.tgz}
+
+ '@form-create/component-elm-radio@3.1.29':
+ resolution: {integrity: sha512-AGAOb/T02uDaRPUhDUBe4iSM5uR24TftiOjxHjG1nGtfjRtP1WMsSpH5JcFrRTDMnSmw/YO6/5j7QiYyzpoj6g==, tarball: https://registry.npmmirror.com/@form-create/component-elm-radio/-/component-elm-radio-3.1.29.tgz}
+
+ '@form-create/component-elm-select@3.1.29':
+ resolution: {integrity: sha512-3oSj5zpDIpdtBD53EOMgFsz5+DE7zRuSLHjaRjiQaYhn7HwZeq02TNQ+t+d5vMjtcc/CfDlPEckbBwg2YNIGFA==, tarball: https://registry.npmmirror.com/@form-create/component-elm-select/-/component-elm-select-3.1.29.tgz}
+
+ '@form-create/component-elm-tree@3.1.29':
+ resolution: {integrity: sha512-aEu62P7VrgzVOuOigRGral8k5PsNQbtbJxZ6dd8cdbHxTsVVyh1rYTMAtNceR84DZYuRfth1H/lxU0JHRJT0rQ==, tarball: https://registry.npmmirror.com/@form-create/component-elm-tree/-/component-elm-tree-3.1.29.tgz}
+
+ '@form-create/component-elm-upload@3.1.29':
+ resolution: {integrity: sha512-drYhUf7yRBKzAzPp5Mgb1A3Ik+vBmzGD9gGf61wsD7+iiQR9vC6LIF8bGUrzX99DqXLrGP++Xxb9Iii63srmKA==, tarball: https://registry.npmmirror.com/@form-create/component-elm-upload/-/component-elm-upload-3.1.29.tgz}
+
+ '@form-create/component-subform@3.1.5':
+ resolution: {integrity: sha512-JHNEFGuwpnjGvCJ0I0GCqPL5al0qXoN4ymnRBpm+oL+6MMo5bz1kUyoqMX1MutuC96gHTqpeqc67hssi8g2mIw==, tarball: https://registry.npmmirror.com/@form-create/component-subform/-/component-subform-3.1.5.tgz}
+
+ '@form-create/component-wangeditor@3.1.20':
+ resolution: {integrity: sha512-lAjpltmYfr3a2AeXasCehGsZNL/1WB6vWqqV9TIsJ4pleTr0/D/oPwEYQjfv+gG+NoB2Sa25SRGhtlnephjyhg==, tarball: https://registry.npmmirror.com/@form-create/component-wangeditor/-/component-wangeditor-3.1.20.tgz}
+
+ '@form-create/core@3.1.29':
+ resolution: {integrity: sha512-nPFFdiEmATIKeocnP8pubKSwMSegc+tcN5PU+cSuXl5RJ1w3k0UZr80Dx2yPUmw8sv4XwSMmMUkHUojz10hqFg==, tarball: https://registry.npmmirror.com/@form-create/core/-/core-3.1.29.tgz}
+ peerDependencies:
+ vue: ^3.1.0
+
+ '@form-create/designer@3.1.5':
+ resolution: {integrity: sha512-OSBXW8PfL9OpckCHA7VQ87HR1WOlzfJMz9mnDiMLjbb8Pkh6oYfAohZCuMCs+S68jW8eKaDjw977wBrKXqiylA==, tarball: https://registry.npmmirror.com/@form-create/designer/-/designer-3.1.5.tgz}
+
+ '@form-create/element-ui@3.1.29':
+ resolution: {integrity: sha512-gG6RViw8/ZY72COHB2soNfiaoS55Il3gJ9C3lQ/J/8VccR3u6DtcK43ZoP5salQYxjQOFLyQmQidFQtmyphpgg==, tarball: https://registry.npmmirror.com/@form-create/element-ui/-/element-ui-3.1.29.tgz}
+ peerDependencies:
+ vue: ^3.1.0
+
+ '@form-create/utils@3.1.29':
+ resolution: {integrity: sha512-CsD3htq2qyuvqc3kJipUk2OFZA5eg+Fwna9zZPoi8T8UuEKBkfgR5fp2s0AgZ87i2a5NgwCk87kfVntijnxvPw==, tarball: https://registry.npmmirror.com/@form-create/utils/-/utils-3.1.29.tgz}
+
+ '@gera2ld/jsx-dom@2.2.2':
+ resolution: {integrity: sha512-EOqf31IATRE6zS1W1EoWmXZhGfLAoO9FIlwTtHduSrBdud4npYBxYAkv8dZ5hudDPwJeeSjn40kbCL4wAzr8dA==, tarball: https://registry.npmmirror.com/@gera2ld/jsx-dom/-/jsx-dom-2.2.2.tgz}
+
+ '@humanwhocodes/config-array@0.11.14':
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==, tarball: https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz}
+ engines: {node: '>=10.10.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, tarball: https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/object-schema@2.0.3':
+ resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==, tarball: https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz}
+
+ '@iconify/iconify@2.1.2':
+ resolution: {integrity: sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==, tarball: https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.1.2.tgz}
+ deprecated: no longer maintained, switch to modern iconify-icon web component
+
+ '@iconify/iconify@3.1.1':
+ resolution: {integrity: sha512-1nemfyD/OJzh9ALepH7YfuuP8BdEB24Skhd8DXWh0hzcOxImbb1ZizSZkpCzAwSZSGcJFmscIBaBQu+yLyWaxQ==, tarball: https://registry.npmmirror.com/@iconify/iconify/-/iconify-3.1.1.tgz}
+ deprecated: no longer maintained, switch to modern iconify-icon web component
+
+ '@iconify/json@2.2.205':
+ resolution: {integrity: sha512-79DbcI0U40w6jCYADjhSheJ6SVB/FJG/z0ltnqdHF/uRi6/MLroqe7y9Qy+99Ebb6F2WZgVV+TXfFMMORMPXFw==, tarball: https://registry.npmmirror.com/@iconify/json/-/json-2.2.205.tgz}
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==, tarball: https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz}
+
+ '@iconify/utils@2.1.23':
+ resolution: {integrity: sha512-YGNbHKM5tyDvdWZ92y2mIkrfvm5Fvhe6WJSkWu7vvOFhMtYDP0casZpoRz0XEHZCrYsR4stdGT3cZ52yp5qZdQ==, tarball: https://registry.npmmirror.com/@iconify/utils/-/utils-2.1.23.tgz}
+
+ '@intlify/bundle-utils@7.5.1':
+ resolution: {integrity: sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==, tarball: https://registry.npmmirror.com/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz}
+ engines: {node: '>= 14.16'}
+ peerDependencies:
+ petite-vue-i18n: '*'
+ vue-i18n: '*'
+ peerDependenciesMeta:
+ petite-vue-i18n:
+ optional: true
+ vue-i18n:
+ optional: true
+
+ '@intlify/core-base@9.10.2':
+ resolution: {integrity: sha512-HGStVnKobsJL0DoYIyRCGXBH63DMQqEZxDUGrkNI05FuTcruYUtOAxyL3zoAZu/uDGO6mcUvm3VXBaHG2GdZCg==, tarball: https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.10.2.tgz}
+ engines: {node: '>= 16'}
+
+ '@intlify/message-compiler@9.10.2':
+ resolution: {integrity: sha512-ntY/kfBwQRtX5Zh6wL8cSATujPzWW2ZQd1QwKyWwAy5fMqJyyixHMeovN4fmEyCqSu+hFfYOE63nU94evsy4YA==, tarball: https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.10.2.tgz}
+ engines: {node: '>= 16'}
+
+ '@intlify/message-compiler@9.13.1':
+ resolution: {integrity: sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==, tarball: https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz}
+ engines: {node: '>= 16'}
+
+ '@intlify/shared@9.10.2':
+ resolution: {integrity: sha512-ttHCAJkRy7R5W2S9RVnN9KYQYPIpV2+GiS79T4EE37nrPyH6/1SrOh3bmdCRC1T3ocL8qCDx7x2lBJ0xaITU7Q==, tarball: https://registry.npmmirror.com/@intlify/shared/-/shared-9.10.2.tgz}
+ engines: {node: '>= 16'}
+
+ '@intlify/shared@9.13.1':
+ resolution: {integrity: sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==, tarball: https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz}
+ engines: {node: '>= 16'}
+
+ '@intlify/unplugin-vue-i18n@2.0.0':
+ resolution: {integrity: sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg==, tarball: https://registry.npmmirror.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-2.0.0.tgz}
+ engines: {node: '>= 14.16'}
+ peerDependencies:
+ petite-vue-i18n: '*'
+ vue-i18n: '*'
+ vue-i18n-bridge: '*'
+ peerDependenciesMeta:
+ petite-vue-i18n:
+ optional: true
+ vue-i18n:
+ optional: true
+ vue-i18n-bridge:
+ optional: true
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, tarball: https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz}
+ engines: {node: '>=12'}
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, tarball: https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.6':
+ resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==, tarball: https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz}
+
+ '@jridgewell/sourcemap-codec@1.4.15':
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz}
+
+ '@microsoft/fetch-event-source@2.0.1':
+ resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==, tarball: https://registry.npmmirror.com/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz}
+ engines: {node: '>= 8'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@pkgr/core@0.1.1':
+ resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==, tarball: https://registry.npmmirror.com/@pkgr/core/-/core-0.1.1.tgz}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
+ '@polka/url@1.0.0-next.25':
+ resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==, tarball: https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.25.tgz}
+
+ '@purge-icons/core@0.10.0':
+ resolution: {integrity: sha512-AtJbZv5Yy+vWX5v32DPTr+CW7AkSK8HJx52orDbrYt/9s4lGM2t4KKAmwaTQEH2HYr2HVh1mlqs54/S1s3WT1g==, tarball: https://registry.npmmirror.com/@purge-icons/core/-/core-0.10.0.tgz}
+
+ '@purge-icons/generated@0.10.0':
+ resolution: {integrity: sha512-I+1yN7/yDy/eZzfhAZqKF8Z6FM8D/O1vempbPrHJ0m9HlZwvf8sWXOArPJ2qRQGB6mJUVSpaXkoGBuoz1GQX5A==, tarball: https://registry.npmmirror.com/@purge-icons/generated/-/generated-0.10.0.tgz}
+
+ '@purge-icons/generated@0.9.0':
+ resolution: {integrity: sha512-s2t+1oVtGDV6KtqfCXtUOhxfeYvOdDF90IVm+nMs/6bUP0HeGZLslguuL/AibpwtfL4FA/oCsIu/RhwapgAdJw==, tarball: https://registry.npmmirror.com/@purge-icons/generated/-/generated-0.9.0.tgz}
+
+ '@rollup/plugin-virtual@3.0.2':
+ resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==, tarball: https://registry.npmmirror.com/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@4.2.1':
+ resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz}
+ engines: {node: '>= 8.0.0'}
+
+ '@rollup/pluginutils@5.1.0':
+ resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.17.1':
+ resolution: {integrity: sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.17.1':
+ resolution: {integrity: sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.17.1':
+ resolution: {integrity: sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.17.1':
+ resolution: {integrity: sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.17.1':
+ resolution: {integrity: sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.17.1':
+ resolution: {integrity: sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.17.1':
+ resolution: {integrity: sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.17.1':
+ resolution: {integrity: sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.17.1':
+ resolution: {integrity: sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.17.1':
+ resolution: {integrity: sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.17.1':
+ resolution: {integrity: sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.17.1':
+ resolution: {integrity: sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.17.1':
+ resolution: {integrity: sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.17.1':
+ resolution: {integrity: sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.17.1':
+ resolution: {integrity: sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.17.1':
+ resolution: {integrity: sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, tarball: https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz}
+
+ '@swc/core-darwin-arm64@1.4.17':
+ resolution: {integrity: sha512-HVl+W4LezoqHBAYg2JCqR+s9ife9yPfgWSj37iIawLWzOmuuJ7jVdIB7Ee2B75bEisSEKyxRlTl6Y1Oq3owBgw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@swc/core-darwin-x64@1.4.17':
+ resolution: {integrity: sha512-WYRO9Fdzq4S/he8zjW5I95G1zcvyd9yyD3Tgi4/ic84P5XDlSMpBDpBLbr/dCPjmSg7aUXxNQqKqGkl6dQxYlA==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@swc/core-linux-arm-gnueabihf@1.4.17':
+ resolution: {integrity: sha512-cgbvpWOvtMH0XFjvwppUCR+Y+nf6QPaGu6AQ5hqCP+5Lv2zO5PG0RfasC4zBIjF53xgwEaaWmGP5/361P30X8Q==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@swc/core-linux-arm64-gnu@1.4.17':
+ resolution: {integrity: sha512-l7zHgaIY24cF9dyQ/FOWbmZDsEj2a9gRFbmgx2u19e3FzOPuOnaopFj0fRYXXKCmtdx+anD750iBIYnTR+pq/Q==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-arm64-musl@1.4.17':
+ resolution: {integrity: sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-x64-gnu@1.4.17':
+ resolution: {integrity: sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-linux-x64-musl@1.4.17':
+ resolution: {integrity: sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-win32-arm64-msvc@1.4.17':
+ resolution: {integrity: sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@swc/core-win32-ia32-msvc@1.4.17':
+ resolution: {integrity: sha512-JBwuSTJIgiJJX6wtr4wmXbfvOswHFj223AumUrK544QV69k60FJ9q2adPW9Csk+a8wm1hLxq4HKa2K334UHJ/g==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@swc/core-win32-x64-msvc@1.4.17':
+ resolution: {integrity: sha512-jFkOnGQamtVDBm3MF5Kq1lgW8vx4Rm1UvJWRUfg+0gx7Uc3Jp3QMFeMNw/rDNQYRDYPG3yunCC+2463ycd5+dg==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@swc/core@1.4.17':
+ resolution: {integrity: sha512-tq+mdWvodMBNBBZbwFIMTVGYHe9N7zvEaycVVjfvAx20k1XozHbHhRv+9pEVFJjwRxLdXmtvFZd3QZHRAOpoNQ==, tarball: https://registry.npmmirror.com/@swc/core/-/core-1.4.17.tgz}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@swc/helpers': ^0.5.0
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@swc/counter@0.1.3':
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, tarball: https://registry.npmmirror.com/@swc/counter/-/counter-0.1.3.tgz}
+
+ '@swc/types@0.1.6':
+ resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==, tarball: https://registry.npmmirror.com/@swc/types/-/types-0.1.6.tgz}
+
+ '@sxzz/popperjs-es@2.11.7':
+ resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
+
+ '@transloadit/prettier-bytes@0.0.7':
+ resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==, tarball: https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz}
+
+ '@trysound/sax@0.2.0':
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==, tarball: https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz}
+ engines: {node: '>=10.13.0'}
+
+ '@types/conventional-commits-parser@5.0.0':
+ resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==, tarball: https://registry.npmmirror.com/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz}
+
+ '@types/d3-array@3.2.1':
+ resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==, tarball: https://registry.npmmirror.com/@types/d3-array/-/d3-array-3.2.1.tgz}
+
+ '@types/d3-axis@3.0.6':
+ resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==, tarball: https://registry.npmmirror.com/@types/d3-axis/-/d3-axis-3.0.6.tgz}
+
+ '@types/d3-brush@3.0.6':
+ resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==, tarball: https://registry.npmmirror.com/@types/d3-brush/-/d3-brush-3.0.6.tgz}
+
+ '@types/d3-chord@3.0.6':
+ resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==, tarball: https://registry.npmmirror.com/@types/d3-chord/-/d3-chord-3.0.6.tgz}
+
+ '@types/d3-color@3.1.3':
+ resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==, tarball: https://registry.npmmirror.com/@types/d3-color/-/d3-color-3.1.3.tgz}
+
+ '@types/d3-contour@3.0.6':
+ resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==, tarball: https://registry.npmmirror.com/@types/d3-contour/-/d3-contour-3.0.6.tgz}
+
+ '@types/d3-delaunay@6.0.4':
+ resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==, tarball: https://registry.npmmirror.com/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz}
+
+ '@types/d3-dispatch@3.0.6':
+ resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==, tarball: https://registry.npmmirror.com/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz}
+
+ '@types/d3-drag@3.0.7':
+ resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==, tarball: https://registry.npmmirror.com/@types/d3-drag/-/d3-drag-3.0.7.tgz}
+
+ '@types/d3-dsv@3.0.7':
+ resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==, tarball: https://registry.npmmirror.com/@types/d3-dsv/-/d3-dsv-3.0.7.tgz}
+
+ '@types/d3-ease@3.0.2':
+ resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==, tarball: https://registry.npmmirror.com/@types/d3-ease/-/d3-ease-3.0.2.tgz}
+
+ '@types/d3-fetch@3.0.7':
+ resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==, tarball: https://registry.npmmirror.com/@types/d3-fetch/-/d3-fetch-3.0.7.tgz}
+
+ '@types/d3-force@3.0.10':
+ resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==, tarball: https://registry.npmmirror.com/@types/d3-force/-/d3-force-3.0.10.tgz}
+
+ '@types/d3-format@3.0.4':
+ resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==, tarball: https://registry.npmmirror.com/@types/d3-format/-/d3-format-3.0.4.tgz}
+
+ '@types/d3-geo@3.1.0':
+ resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==, tarball: https://registry.npmmirror.com/@types/d3-geo/-/d3-geo-3.1.0.tgz}
+
+ '@types/d3-hierarchy@3.1.7':
+ resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==, tarball: https://registry.npmmirror.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz}
+
+ '@types/d3-interpolate@3.0.4':
+ resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==, tarball: https://registry.npmmirror.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz}
+
+ '@types/d3-path@3.1.0':
+ resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==, tarball: https://registry.npmmirror.com/@types/d3-path/-/d3-path-3.1.0.tgz}
+
+ '@types/d3-polygon@3.0.2':
+ resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==, tarball: https://registry.npmmirror.com/@types/d3-polygon/-/d3-polygon-3.0.2.tgz}
+
+ '@types/d3-quadtree@3.0.6':
+ resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==, tarball: https://registry.npmmirror.com/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz}
+
+ '@types/d3-random@3.0.3':
+ resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==, tarball: https://registry.npmmirror.com/@types/d3-random/-/d3-random-3.0.3.tgz}
+
+ '@types/d3-scale-chromatic@3.0.3':
+ resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==, tarball: https://registry.npmmirror.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz}
+
+ '@types/d3-scale@4.0.8':
+ resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==, tarball: https://registry.npmmirror.com/@types/d3-scale/-/d3-scale-4.0.8.tgz}
+
+ '@types/d3-selection@3.0.10':
+ resolution: {integrity: sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==, tarball: https://registry.npmmirror.com/@types/d3-selection/-/d3-selection-3.0.10.tgz}
+
+ '@types/d3-shape@3.1.6':
+ resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==, tarball: https://registry.npmmirror.com/@types/d3-shape/-/d3-shape-3.1.6.tgz}
+
+ '@types/d3-time-format@4.0.3':
+ resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==, tarball: https://registry.npmmirror.com/@types/d3-time-format/-/d3-time-format-4.0.3.tgz}
+
+ '@types/d3-time@3.0.3':
+ resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==, tarball: https://registry.npmmirror.com/@types/d3-time/-/d3-time-3.0.3.tgz}
+
+ '@types/d3-timer@3.0.2':
+ resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==, tarball: https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-3.0.2.tgz}
+
+ '@types/d3-transition@3.0.8':
+ resolution: {integrity: sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==, tarball: https://registry.npmmirror.com/@types/d3-transition/-/d3-transition-3.0.8.tgz}
+
+ '@types/d3-zoom@3.0.8':
+ resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==, tarball: https://registry.npmmirror.com/@types/d3-zoom/-/d3-zoom-3.0.8.tgz}
+
+ '@types/d3@7.4.3':
+ resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==, tarball: https://registry.npmmirror.com/@types/d3/-/d3-7.4.3.tgz}
+
+ '@types/eslint@8.56.10':
+ resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==, tarball: https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.10.tgz}
+
+ '@types/estree@1.0.5':
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, tarball: https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz}
+
+ '@types/event-emitter@0.3.5':
+ resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==, tarball: https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz}
+
+ '@types/geojson@7946.0.14':
+ resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==, tarball: https://registry.npmmirror.com/@types/geojson/-/geojson-7946.0.14.tgz}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, tarball: https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz}
+
+ '@types/lodash-es@4.17.12':
+ resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==, tarball: https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz}
+
+ '@types/lodash@4.17.0':
+ resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.0.tgz}
+
+ '@types/node@10.17.60':
+ resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==, tarball: https://registry.npmmirror.com/@types/node/-/node-10.17.60.tgz}
+
+ '@types/node@20.12.7':
+ resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==, tarball: https://registry.npmmirror.com/@types/node/-/node-20.12.7.tgz}
+
+ '@types/nprogress@0.2.3':
+ resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==, tarball: https://registry.npmmirror.com/@types/nprogress/-/nprogress-0.2.3.tgz}
+
+ '@types/qrcode@1.5.5':
+ resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==, tarball: https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.5.tgz}
+
+ '@types/qs@6.9.15':
+ resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==, tarball: https://registry.npmmirror.com/@types/qs/-/qs-6.9.15.tgz}
+
+ '@types/semver@7.5.8':
+ resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==, tarball: https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz}
+
+ '@types/svgo@2.6.4':
+ resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==, tarball: https://registry.npmmirror.com/@types/svgo/-/svgo-2.6.4.tgz}
+
+ '@types/video.js@7.3.58':
+ resolution: {integrity: sha512-1CQjuSrgbv1/dhmcfQ83eVyYbvGyqhTvb2Opxr0QCV+iJ4J6/J+XWQ3Om59WiwCd1MN3rDUHasx5XRrpUtewYQ==}
+
+ '@types/web-bluetooth@0.0.16':
+ resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
+
+ '@types/web-bluetooth@0.0.20':
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==, tarball: https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz}
+
+ '@typescript-eslint/eslint-plugin@7.7.1':
+ resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==, tarball: https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^7.0.0
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/parser@6.21.0':
+ resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.21.0.tgz}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/parser@7.7.1':
+ resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==, tarball: https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/scope-manager@6.21.0':
+ resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==, tarball: https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz}
+ engines: {node: ^16.0.0 || >=18.0.0}
+
+ '@typescript-eslint/scope-manager@7.7.1':
+ resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==, tarball: https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@typescript-eslint/type-utils@7.7.1':
+ resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==, tarball: https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/types@6.21.0':
+ resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==, tarball: https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.21.0.tgz}
+ engines: {node: ^16.0.0 || >=18.0.0}
+
+ '@typescript-eslint/types@7.7.1':
+ resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==, tarball: https://registry.npmmirror.com/@typescript-eslint/types/-/types-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@typescript-eslint/typescript-estree@6.21.0':
+ resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/typescript-estree@7.7.1':
+ resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/utils@6.21.0':
+ resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.21.0.tgz}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+
+ '@typescript-eslint/utils@7.7.1':
+ resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==, tarball: https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+
+ '@typescript-eslint/visitor-keys@6.21.0':
+ resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==, tarball: https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz}
+ engines: {node: ^16.0.0 || >=18.0.0}
+
+ '@typescript-eslint/visitor-keys@7.7.1':
+ resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==, tarball: https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@ungap/structured-clone@1.2.0':
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, tarball: https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz}
+
+ '@unocss/astro@0.58.9':
+ resolution: {integrity: sha512-VWfHNC0EfawFxLfb3uI+QcMGBN+ju+BYtutzeZTjilLKj31X2UpqIh8fepixL6ljgZzB3fweqg2xtUMC0gMnoQ==, tarball: https://registry.npmmirror.com/@unocss/astro/-/astro-0.58.9.tgz}
+ peerDependencies:
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
+ '@unocss/cli@0.58.9':
+ resolution: {integrity: sha512-q7qlwX3V6UaqljWUQ5gMj36yTA9eLuuRywahdQWt1ioy4aPF/MEEfnMBZf/ntrqf5tIT5TO8fE11nvCco2Q/sA==, tarball: https://registry.npmmirror.com/@unocss/cli/-/cli-0.58.9.tgz}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ '@unocss/config@0.57.7':
+ resolution: {integrity: sha512-UG8G9orWEdk/vyDvGUToXYn/RZy/Qjpx66pLsaf5wQK37hkYsBoReAU5v8Ia/6PL1ueJlkcNXLaNpN6/yVoJvg==, tarball: https://registry.npmmirror.com/@unocss/config/-/config-0.57.7.tgz}
+ engines: {node: '>=14'}
+
+ '@unocss/config@0.58.9':
+ resolution: {integrity: sha512-90wRXIyGNI8UenWxvHUcH4l4rgq813MsTzYWsf6ZKyLLvkFjV2b2EfGXI27GPvZ7fVE1OAqx+wJNTw8CyQxwag==, tarball: https://registry.npmmirror.com/@unocss/config/-/config-0.58.9.tgz}
+ engines: {node: '>=14'}
+
+ '@unocss/core@0.57.7':
+ resolution: {integrity: sha512-1d36M0CV3yC80J0pqOa5rH1BX6g2iZdtKmIb3oSBN4AWnMCSrrJEPBrUikyMq2TEQTrYWJIVDzv5A9hBUat3TA==, tarball: https://registry.npmmirror.com/@unocss/core/-/core-0.57.7.tgz}
+
+ '@unocss/core@0.58.9':
+ resolution: {integrity: sha512-wYpPIPPsOIbIoMIDuH8ihehJk5pAZmyFKXIYO/Kro98GEOFhz6lJoLsy6/PZuitlgp2/TSlubUuWGjHWvp5osw==, tarball: https://registry.npmmirror.com/@unocss/core/-/core-0.58.9.tgz}
+
+ '@unocss/eslint-config@0.57.7':
+ resolution: {integrity: sha512-EJlI6rV0ZfDCphIiddHSWZVeoHdYDTVohVXGo+NfNOuRuvYWGna3n4hY3VEAiT3mWLK0/0anzHF7X0PNzCR5lQ==, tarball: https://registry.npmmirror.com/@unocss/eslint-config/-/eslint-config-0.57.7.tgz}
+ engines: {node: '>=14'}
+
+ '@unocss/eslint-plugin@0.57.7':
+ resolution: {integrity: sha512-nwj7UJF7wCfPVl5B7cUB0xrSk6yuVMdMgABnsy4N5xBlds8cclrUO+boaTB9qzh8Lg9nfJVLB3+cW3po2SJoew==, tarball: https://registry.npmmirror.com/@unocss/eslint-plugin/-/eslint-plugin-0.57.7.tgz}
+ engines: {node: '>=14'}
+
+ '@unocss/extractor-arbitrary-variants@0.58.9':
+ resolution: {integrity: sha512-M/BvPdbEEMdhcFQh/z2Bf9gylO1Ky/ZnpIvKWS1YJPLt4KA7UWXSUf+ZNTFxX+X58Is5qAb5hNh/XBQmL3gbXg==, tarball: https://registry.npmmirror.com/@unocss/extractor-arbitrary-variants/-/extractor-arbitrary-variants-0.58.9.tgz}
+
+ '@unocss/inspector@0.58.9':
+ resolution: {integrity: sha512-uRzqkCNeBmEvFePXcfIFcQPMlCXd9/bLwa5OkBthiOILwQdH1uRIW3GWAa2SWspu+kZLP0Ly3SjZ9Wqi+5ZtTw==, tarball: https://registry.npmmirror.com/@unocss/inspector/-/inspector-0.58.9.tgz}
+
+ '@unocss/postcss@0.58.9':
+ resolution: {integrity: sha512-PnKmH6Qhimw35yO6u6yx9SHaX2NmvbRNPDvMDHA/1xr3M8L0o8U88tgKbWfm65NEGF3R1zJ9A8rjtZn/LPkgPA==, tarball: https://registry.npmmirror.com/@unocss/postcss/-/postcss-0.58.9.tgz}
+ engines: {node: '>=14'}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ '@unocss/preset-attributify@0.58.9':
+ resolution: {integrity: sha512-ucP+kXRFcwmBmHohUVv31bE/SejMAMo7Hjb0QcKVLyHlzRWUJsfNR+jTAIGIUSYxN7Q8MeigYsongGo3nIeJnQ==, tarball: https://registry.npmmirror.com/@unocss/preset-attributify/-/preset-attributify-0.58.9.tgz}
+
+ '@unocss/preset-icons@0.58.9':
+ resolution: {integrity: sha512-9dS48+yAunsbS0ylOW2Wisozwpn3nGY1CqTiidkUnrMnrZK3al579A7srUX9NyPWWDjprO7eU/JkWbdDQSmFFA==, tarball: https://registry.npmmirror.com/@unocss/preset-icons/-/preset-icons-0.58.9.tgz}
+
+ '@unocss/preset-mini@0.58.9':
+ resolution: {integrity: sha512-m4aDGYtueP8QGsU3FsyML63T/w5Mtr4htme2jXy6m50+tzC1PPHaIBstMTMQfLc6h8UOregPJyGHB5iYQZGEvQ==, tarball: https://registry.npmmirror.com/@unocss/preset-mini/-/preset-mini-0.58.9.tgz}
+
+ '@unocss/preset-tagify@0.58.9':
+ resolution: {integrity: sha512-obh75XrRmxYwrQMflzvhQUMeHwd/R9bEDhTWUW9aBTolBy4eNypmQwOhHCKh5Xi4Dg6o0xj6GWC/jcCj1SPLog==, tarball: https://registry.npmmirror.com/@unocss/preset-tagify/-/preset-tagify-0.58.9.tgz}
+
+ '@unocss/preset-typography@0.58.9':
+ resolution: {integrity: sha512-hrsaqKlcZni3Vh4fwXC+lP9e92FQYbqtmlZw2jpxlVwwH5aLzwk4d4MiFQGyhCfzuSDYm0Zd52putFVV02J7bA==, tarball: https://registry.npmmirror.com/@unocss/preset-typography/-/preset-typography-0.58.9.tgz}
+
+ '@unocss/preset-uno@0.58.9':
+ resolution: {integrity: sha512-Fze+X2Z/EegCkRdDRgwwvFBmXBenNR1AG8KxAyz8iPeWbhOBaRra2sn2ScryrfH6SbJHpw26ZyJXycAdS0Fq3A==, tarball: https://registry.npmmirror.com/@unocss/preset-uno/-/preset-uno-0.58.9.tgz}
+
+ '@unocss/preset-web-fonts@0.58.9':
+ resolution: {integrity: sha512-XtiO+Z+RYnNYomNkS2XxaQiY++CrQZKOfNGw5htgIrb32QtYVQSkyYQ3jDw7JmMiCWlZ4E72cV/zUb++WrZLxg==, tarball: https://registry.npmmirror.com/@unocss/preset-web-fonts/-/preset-web-fonts-0.58.9.tgz}
+
+ '@unocss/preset-wind@0.58.9':
+ resolution: {integrity: sha512-7l+7Vx5UoN80BmJKiqDXaJJ6EUqrnUQYv8NxCThFi5lYuHzxsYWZPLU3k3XlWRUQt8XL+6rYx7mMBmD7EUSHyw==, tarball: https://registry.npmmirror.com/@unocss/preset-wind/-/preset-wind-0.58.9.tgz}
+
+ '@unocss/reset@0.58.9':
+ resolution: {integrity: sha512-nA2pg3tnwlquq+FDOHyKwZvs20A6iBsKPU7Yjb48JrNnzoaXqE+O9oN6782IG2yKVW4AcnsAnAnM4cxXhGzy1w==, tarball: https://registry.npmmirror.com/@unocss/reset/-/reset-0.58.9.tgz}
+
+ '@unocss/rule-utils@0.58.9':
+ resolution: {integrity: sha512-45bDa+elmlFLthhJmKr2ltKMAB0yoXnDMQ6Zp5j3OiRB7dDMBkwYRPvHLvIe+34Ey7tDt/kvvDPtWMpPl2quUQ==, tarball: https://registry.npmmirror.com/@unocss/rule-utils/-/rule-utils-0.58.9.tgz}
+ engines: {node: '>=14'}
+
+ '@unocss/scope@0.58.9':
+ resolution: {integrity: sha512-BIwcpx0R3bE0rYa9JVDJTk0GX32EBvnbvufBpNkWfC5tb7g+B7nMkVq9ichanksYCCxrIQQo0mrIz5PNzu9sGA==, tarball: https://registry.npmmirror.com/@unocss/scope/-/scope-0.58.9.tgz}
+
+ '@unocss/transformer-attributify-jsx-babel@0.58.9':
+ resolution: {integrity: sha512-UGaQoGZg+3QrsPtnGHPECmsGn4EQb2KSdZ4eGEn2YssjKv+CcQhzRvpEUgnuF/F+jGPkCkS/G/YEQBHRWBY54Q==, tarball: https://registry.npmmirror.com/@unocss/transformer-attributify-jsx-babel/-/transformer-attributify-jsx-babel-0.58.9.tgz}
+
+ '@unocss/transformer-attributify-jsx@0.58.9':
+ resolution: {integrity: sha512-jpL3PRwf8t43v1agUdQn2EHGgfdWfvzsMxFtoybO88xzOikzAJaaouteNtojc/fQat2T9iBduDxVj5egdKmhdQ==, tarball: https://registry.npmmirror.com/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.58.9.tgz}
+
+ '@unocss/transformer-compile-class@0.58.9':
+ resolution: {integrity: sha512-l2VpCqelJ6Tgc1kfSODxBtg7fCGPVRr2EUzTg1LrGYKa2McbKuc/wV/2DWKHGxL6+voWi7a2C9XflqGDXXutuQ==, tarball: https://registry.npmmirror.com/@unocss/transformer-compile-class/-/transformer-compile-class-0.58.9.tgz}
+
+ '@unocss/transformer-directives@0.58.9':
+ resolution: {integrity: sha512-pLOUsdoY2ugVntJXg0xuGjO9XZ2xCiMxTPRtpZ4TsEzUtdEzMswR06Y8VWvNciTB/Zqxcz9ta8rD0DKePOfSuw==, tarball: https://registry.npmmirror.com/@unocss/transformer-directives/-/transformer-directives-0.58.9.tgz}
+
+ '@unocss/transformer-variant-group@0.58.9':
+ resolution: {integrity: sha512-3A6voHSnFcyw6xpcZT6oxE+KN4SHRnG4z862tdtWvRGcN+jGyNr20ylEZtnbk4xj0VNMeGHHQRZ0WLvmrAwvOQ==, tarball: https://registry.npmmirror.com/@unocss/transformer-variant-group/-/transformer-variant-group-0.58.9.tgz}
+
+ '@unocss/vite@0.58.9':
+ resolution: {integrity: sha512-mmppBuulAHCal+sC0Qz36Y99t0HicAmznpj70Kzwl7g/yvXwm58/DW2OnpCWw+uA8/JBft/+z3zE+XvrI+T1HA==, tarball: https://registry.npmmirror.com/@unocss/vite/-/vite-0.58.9.tgz}
+ peerDependencies:
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
+
+ '@uppy/companion-client@2.2.2':
+ resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==, tarball: https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz}
+
+ '@uppy/core@2.3.4':
+ resolution: {integrity: sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==, tarball: https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz}
+
+ '@uppy/store-default@2.1.1':
+ resolution: {integrity: sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==, tarball: https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz}
+
+ '@uppy/utils@4.1.3':
+ resolution: {integrity: sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==, tarball: https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz}
+
+ '@uppy/xhr-upload@2.1.3':
+ resolution: {integrity: sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==, tarball: https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz}
+ peerDependencies:
+ '@uppy/core': ^2.3.3
+
+ '@videojs-player/vue@1.0.0':
+ resolution: {integrity: sha512-WonTezRfKu3fYdQLt/ta+nuKH6gMZUv8l40Jke/j4Lae7IqeO/+lLAmBnh3ni88bwR+vkFXIlZ2Ci7VKInIYJg==, tarball: https://registry.npmmirror.com/@videojs-player/vue/-/vue-1.0.0.tgz}
+ peerDependencies:
+ '@types/video.js': 7.x
+ video.js: 7.x
+ vue: 3.x
+
+ '@videojs/http-streaming@2.16.2':
+ resolution: {integrity: sha512-etPTUdCFu7gUWc+1XcbiPr+lrhOcBu3rV5OL1M+3PDW89zskScAkkcdqYzP4pFodBPye/ydamQoTDScOnElw5A==, tarball: https://registry.npmmirror.com/@videojs/http-streaming/-/http-streaming-2.16.2.tgz}
+ engines: {node: '>=8', npm: '>=5'}
+ peerDependencies:
+ video.js: ^6 || ^7
+
+ '@videojs/vhs-utils@3.0.5':
+ resolution: {integrity: sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==, tarball: https://registry.npmmirror.com/@videojs/vhs-utils/-/vhs-utils-3.0.5.tgz}
+ engines: {node: '>=8', npm: '>=5'}
+
+ '@videojs/xhr@2.6.0':
+ resolution: {integrity: sha512-7J361GiN1tXpm+gd0xz2QWr3xNWBE+rytvo8J3KuggFaLg+U37gZQ2BuPLcnkfGffy2e+ozY70RHC8jt7zjA6Q==, tarball: https://registry.npmmirror.com/@videojs/xhr/-/xhr-2.6.0.tgz}
+
+ '@vitejs/plugin-legacy@5.3.2':
+ resolution: {integrity: sha512-8moCOrIMaZ/Rjln0Q6GsH6s8fAt1JOI3k8nmfX4tXUxE5KAExVctSyOBk+A25GClsdSWqIk2yaUthH3KJ2X4tg==, tarball: https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-5.3.2.tgz}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ terser: ^5.4.0
+ vite: ^5.0.0
+
+ '@vitejs/plugin-vue-jsx@3.1.0':
+ resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.0.0 || ^5.0.0
+ vue: ^3.0.0
+
+ '@vitejs/plugin-vue@5.0.4':
+ resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0
+ vue: ^3.2.25
+
+ '@volar/language-core@1.11.1':
+ resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==, tarball: https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz}
+
+ '@volar/source-map@1.11.1':
+ resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-1.11.1.tgz}
+
+ '@volar/typescript@1.11.1':
+ resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==, tarball: https://registry.npmmirror.com/@volar/typescript/-/typescript-1.11.1.tgz}
+
+ '@vue/babel-helper-vue-transform-on@1.2.2':
+ resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==, tarball: https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz}
+
+ '@vue/babel-plugin-jsx@1.2.2':
+ resolution: {integrity: sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==, tarball: https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+
+ '@vue/babel-plugin-resolve-type@1.2.2':
+ resolution: {integrity: sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==, tarball: https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/compiler-core@3.4.21':
+ resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.21.tgz}
+
+ '@vue/compiler-core@3.4.26':
+ resolution: {integrity: sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.26.tgz}
+
+ '@vue/compiler-dom@3.4.21':
+ resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz}
+
+ '@vue/compiler-dom@3.4.26':
+ resolution: {integrity: sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz}
+
+ '@vue/compiler-sfc@3.4.21':
+ resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz}
+
+ '@vue/compiler-sfc@3.4.26':
+ resolution: {integrity: sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.26.tgz}
+
+ '@vue/compiler-ssr@3.4.21':
+ resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz}
+
+ '@vue/compiler-ssr@3.4.26':
+ resolution: {integrity: sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.26.tgz}
+
+ '@vue/devtools-api@6.6.1':
+ resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.1.tgz}
+
+ '@vue/language-core@1.8.27':
+ resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==, tarball: https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.27.tgz}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@vue/reactivity@3.4.21':
+ resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.21.tgz}
+
+ '@vue/runtime-core@3.4.21':
+ resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.21.tgz}
+
+ '@vue/runtime-dom@3.4.21':
+ resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz}
+
+ '@vue/server-renderer@3.4.21':
+ resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.21.tgz}
+ peerDependencies:
+ vue: 3.4.21
+
+ '@vue/shared@3.4.21':
+ resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.4.21.tgz}
+
+ '@vue/shared@3.4.26':
+ resolution: {integrity: sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.4.26.tgz}
+
+ '@vueuse/core@10.9.0':
+ resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-10.9.0.tgz}
+
+ '@vueuse/core@9.13.0':
+ resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
+
+ '@vueuse/metadata@10.9.0':
+ resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==, tarball: https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.9.0.tgz}
+
+ '@vueuse/metadata@9.13.0':
+ resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
+
+ '@vueuse/shared@10.9.0':
+ resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-10.9.0.tgz}
+
+ '@vueuse/shared@9.13.0':
+ resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
+
+ '@vxe-ui/core@4.0.12':
+ resolution: {integrity: sha512-ft8f874eQSv4N9+oulFKeg8APgd8RMHeFeUUUTNckIRJ/cNi0dbR0Fe2+ZZpRl3BwRtbE2hHb2FKWmL2oyZkfw==}
+
+ '@wangeditor/basic-modules@1.1.7':
+ resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==, tarball: https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz}
+ peerDependencies:
+ '@wangeditor/core': 1.x
+ dom7: ^3.0.0
+ lodash.throttle: ^4.1.1
+ nanoid: ^3.2.0
+ slate: ^0.72.0
+ snabbdom: ^3.1.0
+
+ '@wangeditor/code-highlight@1.0.3':
+ resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==, tarball: https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz}
+ peerDependencies:
+ '@wangeditor/core': 1.x
+ dom7: ^3.0.0
+ slate: ^0.72.0
+ snabbdom: ^3.1.0
+
+ '@wangeditor/core@1.1.19':
+ resolution: {integrity: sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==, tarball: https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz}
+ peerDependencies:
+ '@uppy/core': ^2.1.1
+ '@uppy/xhr-upload': ^2.0.3
+ dom7: ^3.0.0
+ is-hotkey: ^0.2.0
+ lodash.camelcase: ^4.3.0
+ lodash.clonedeep: ^4.5.0
+ lodash.debounce: ^4.0.8
+ lodash.foreach: ^4.5.0
+ lodash.isequal: ^4.5.0
+ lodash.throttle: ^4.1.1
+ lodash.toarray: ^4.4.0
+ nanoid: ^3.2.0
+ slate: ^0.72.0
+ snabbdom: ^3.1.0
+
+ '@wangeditor/editor-for-vue@5.1.12':
+ resolution: {integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==, tarball: https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz}
+ peerDependencies:
+ '@wangeditor/editor': '>=5.1.0'
+ vue: ^3.0.5
+
+ '@wangeditor/editor@5.1.23':
+ resolution: {integrity: sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==, tarball: https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz}
+
+ '@wangeditor/list-module@1.0.5':
+ resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==, tarball: https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz}
+ peerDependencies:
+ '@wangeditor/core': 1.x
+ dom7: ^3.0.0
+ slate: ^0.72.0
+ snabbdom: ^3.1.0
+
+ '@wangeditor/table-module@1.1.4':
+ resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==, tarball: https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz}
+ peerDependencies:
+ '@wangeditor/core': 1.x
+ dom7: ^3.0.0
+ lodash.isequal: ^4.5.0
+ lodash.throttle: ^4.1.1
+ nanoid: ^3.2.0
+ slate: ^0.72.0
+ snabbdom: ^3.1.0
+
+ '@wangeditor/upload-image-module@1.0.2':
+ resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==, tarball: https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz}
+ peerDependencies:
+ '@uppy/core': ^2.0.3
+ '@uppy/xhr-upload': ^2.0.3
+ '@wangeditor/basic-modules': 1.x
+ '@wangeditor/core': 1.x
+ dom7: ^3.0.0
+ lodash.foreach: ^4.5.0
+ slate: ^0.72.0
+ snabbdom: ^3.1.0
+
+ '@wangeditor/video-module@1.1.4':
+ resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==, tarball: https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz}
+ peerDependencies:
+ '@uppy/core': ^2.1.4
+ '@uppy/xhr-upload': ^2.0.7
+ '@wangeditor/core': 1.x
+ dom7: ^3.0.0
+ nanoid: ^3.2.0
+ slate: ^0.72.0
+ snabbdom: ^3.1.0
+
+ '@xmldom/xmldom@0.8.10':
+ resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==, tarball: https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz}
+ engines: {node: '>=10.0.0'}
+
+ '@zxcvbn-ts/core@3.0.4':
+ resolution: {integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw==, tarball: https://registry.npmmirror.com/@zxcvbn-ts/core/-/core-3.0.4.tgz}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==, tarball: https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz}
+ hasBin: true
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, tarball: https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.11.3:
+ resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ aes-decrypter@3.1.3:
+ resolution: {integrity: sha512-VkG9g4BbhMBy+N5/XodDeV6F02chEk9IpgRTq/0bS80y4dzy79VH2Gtms02VXomf3HmyRe3yyJYkJ990ns+d6A==, tarball: https://registry.npmmirror.com/aes-decrypter/-/aes-decrypter-3.1.3.tgz}
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz}
+
+ ajv@8.12.0:
+ resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, tarball: https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz}
+
+ animate.css@4.1.1:
+ resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==, tarball: https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz}
+
+ ansi-escapes@6.2.1:
+ resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz}
+ engines: {node: '>=14.16'}
+
+ ansi-regex@2.1.1:
+ resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, tarball: https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz}
+ engines: {node: '>=12'}
+
+ ansi-styles@2.2.1:
+ resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz}
+ engines: {node: '>=10'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz}
+ engines: {node: '>=12'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz}
+ engines: {node: '>= 8'}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, tarball: https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, tarball: https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz}
+
+ arr-diff@4.0.0:
+ resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==, tarball: https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ arr-flatten@1.1.0:
+ resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==, tarball: https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ arr-union@3.1.0:
+ resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==, tarball: https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ array-buffer-byte-length@1.0.1:
+ resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==, tarball: https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ array-ify@1.0.0:
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==, tarball: https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, tarball: https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz}
+ engines: {node: '>=8'}
+
+ array-unique@0.3.2:
+ resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==, tarball: https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ arraybuffer.prototype.slice@1.0.3:
+ resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==, tarball: https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ assign-symbols@1.0.0:
+ resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==, tarball: https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, tarball: https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz}
+ engines: {node: '>=8'}
+
+ async-validator@4.2.5:
+ resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
+
+ async@3.2.5:
+ resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==, tarball: https://registry.npmmirror.com/async/-/async-3.2.5.tgz}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz}
+
+ atob@2.1.2:
+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==, tarball: https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz}
+ engines: {node: '>= 4.5.0'}
+ hasBin: true
+
+ autolinker@3.16.2:
+ resolution: {integrity: sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==, tarball: https://registry.npmmirror.com/autolinker/-/autolinker-3.16.2.tgz}
+
+ autoprefixer@10.4.19:
+ resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==, tarball: https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.19.tgz}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, tarball: https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz}
+ engines: {node: '>= 0.4'}
+
+ axios@0.26.1:
+ resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, tarball: https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz}
+
+ axios@1.6.8:
+ resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==, tarball: https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz}
+
+ babel-plugin-polyfill-corejs2@0.4.11:
+ resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-corejs3@0.10.4:
+ resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.2:
+ resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==, tarball: https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz}
+
+ balanced-match@2.0.0:
+ resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-2.0.0.tgz}
+
+ base@0.11.2:
+ resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==, tarball: https://registry.npmmirror.com/base/-/base-0.11.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ benz-amr-recorder@1.1.5:
+ resolution: {integrity: sha512-NepctcNTsZHK8NxBb5uKO5p8S+xkbm+vD6GLSkCYdJeEsriexvgumLHpDkanX4QJBcLRMVtg16buWMs+gUPB3g==, tarball: https://registry.npmmirror.com/benz-amr-recorder/-/benz-amr-recorder-1.1.5.tgz}
+
+ benz-recorderjs@1.0.5:
+ resolution: {integrity: sha512-EwedOQo9KLti7HxDi/eZY51PSRbAXnOdEZmLvJ6ro3QQSoF9Y3AXBt57MIllGvVz5vtFYMeikG+GD7qTm3+p9w==, tarball: https://registry.npmmirror.com/benz-recorderjs/-/benz-recorderjs-1.0.5.tgz}
+
+ big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz}
+ engines: {node: '>=8'}
+
+ bluebird@3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, tarball: https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz}
+
+ bpmn-js-properties-panel@0.46.0:
+ resolution: {integrity: sha512-8MlNvHklIZZQH9vtoKf0A0A1v0sHO4Iz19jGhHeX15czOOiCfdavjo+q23GHWNKzQA9347F91XYFcrnM6FO8zw==, tarball: https://registry.npmmirror.com/bpmn-js-properties-panel/-/bpmn-js-properties-panel-0.46.0.tgz}
+ peerDependencies:
+ bpmn-js: ^3.x || ^4.x || ^5.x || ^6.x || ^7.x || ^8.x
+
+ bpmn-js-token-simulation@0.10.0:
+ resolution: {integrity: sha512-QuZQ/KVXKt9Vl+XENyOBoTW2Aw+uKjuBlKdCJL6El7AyM7DkJ5bZkSYURshId1SkBDdYg2mJ1flSmsrhGuSfwg==, tarball: https://registry.npmmirror.com/bpmn-js-token-simulation/-/bpmn-js-token-simulation-0.10.0.tgz}
+
+ bpmn-js@8.9.0:
+ resolution: {integrity: sha512-cthSxiJUpEHspiUKiL0YA8/mRCYngNKwALWieLKPtFo42n+vWTFgmxnASNRwhxpPEbSXjYuTah1lZ0lSyLWPpw==, tarball: https://registry.npmmirror.com/bpmn-js/-/bpmn-js-8.9.0.tgz}
+
+ bpmn-moddle@7.1.3:
+ resolution: {integrity: sha512-ZcBfw0NSOdYTSXFKEn7MOXHItz7VfLZTrFYKO8cK6V8ZzGjCcdiLIOiw7Lctw1PJsihhLiZQS8Htj2xKf+NwCg==, tarball: https://registry.npmmirror.com/bpmn-moddle/-/bpmn-moddle-7.1.3.tgz}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz}
+
+ braces@2.3.2:
+ resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz}
+ engines: {node: '>=8'}
+
+ browserslist-to-esbuild@2.1.1:
+ resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==, tarball: https://registry.npmmirror.com/browserslist-to-esbuild/-/browserslist-to-esbuild-2.1.1.tgz}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ browserslist: '*'
+
+ browserslist@4.23.0:
+ resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.23.0.tgz}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, tarball: https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz}
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, tarball: https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz}
+ engines: {node: '>=8'}
+
+ cache-base@1.0.1:
+ resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==, tarball: https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==, tarball: https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, tarball: https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz}
+ engines: {node: '>=6'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz}
+ engines: {node: '>=10'}
+
+ camunda-bpmn-moddle@7.0.1:
+ resolution: {integrity: sha512-Br8Diu6roMpziHdpl66Dhnm0DTnCFMrSD9zwLV08LpD52QA0UsXxU87XfHf08HjuB7ly0Hd1bvajZRpf9hbmYQ==, tarball: https://registry.npmmirror.com/camunda-bpmn-moddle/-/camunda-bpmn-moddle-7.0.1.tgz}
+
+ caniuse-lite@1.0.30001614:
+ resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz}
+
+ chalk@1.1.3:
+ resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==, tarball: https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz}
+ engines: {node: '>=0.10.0'}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, tarball: https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, tarball: https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==, tarball: https://registry.npmmirror.com/chalk/-/chalk-5.3.0.tgz}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ cheerio-select@2.1.0:
+ resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==, tarball: https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz}
+
+ cheerio@1.0.0-rc.12:
+ resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==, tarball: https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.12.tgz}
+ engines: {node: '>= 6'}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz}
+ engines: {node: '>= 8.10.0'}
+
+ class-utils@0.3.6:
+ resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==, tarball: https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz}
+ engines: {node: '>=0.10.0'}
+
+ cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==, tarball: https://registry.npmmirror.com/cli-truncate/-/cli-truncate-4.0.0.tgz}
+ engines: {node: '>=18'}
+
+ cliui@6.0.0:
+ resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, tarball: https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, tarball: https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz}
+ engines: {node: '>=12'}
+
+ clone@2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==, tarball: https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz}
+ engines: {node: '>=0.8'}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, tarball: https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz}
+ engines: {node: '>=6'}
+
+ collection-visit@1.0.0:
+ resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==, tarball: https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz}
+
+ colord@2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==, tarball: https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz}
+
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, tarball: https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz}
+ engines: {node: '>= 0.8'}
+
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==, tarball: https://registry.npmmirror.com/commander/-/commander-11.1.0.tgz}
+ engines: {node: '>=16'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz}
+
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, tarball: https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz}
+ engines: {node: '>= 10'}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, tarball: https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz}
+ engines: {node: '>= 12'}
+
+ common-tags@1.8.2:
+ resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, tarball: https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz}
+ engines: {node: '>=4.0.0'}
+
+ compare-func@2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==, tarball: https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz}
+
+ component-classes@1.2.6:
+ resolution: {integrity: sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==, tarball: https://registry.npmmirror.com/component-classes/-/component-classes-1.2.6.tgz}
+
+ component-closest@0.1.4:
+ resolution: {integrity: sha512-NF9hMj6JKGM5sb6wP/dg7GdJOttaIH9PcTsUNdWcrvu7Kw/5R5swQAFpgaYEHlARrNMyn4Wf7O1PlRej+pt76Q==, tarball: https://registry.npmmirror.com/component-closest/-/component-closest-0.1.4.tgz}
+
+ component-delegate@0.2.4:
+ resolution: {integrity: sha512-OlpcB/6Fi+kXQPh/TfXnSvvmrU04ghz7vcJh/jgLF0Ni+I+E3WGlKJQbBGDa5X+kVUG8WxOgjP+8iWbz902fPg==, tarball: https://registry.npmmirror.com/component-delegate/-/component-delegate-0.2.4.tgz}
+
+ component-emitter@1.3.1:
+ resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==, tarball: https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.1.tgz}
+
+ component-event@0.1.4:
+ resolution: {integrity: sha512-GMwOG8MnUHP1l8DZx1ztFO0SJTFnIzZnBDkXAj8RM2ntV2A6ALlDxgbMY1Fvxlg6WPQ+5IM/a6vg4PEYbjg/Rw==, tarball: https://registry.npmmirror.com/component-event/-/component-event-0.1.4.tgz}
+
+ component-event@0.2.1:
+ resolution: {integrity: sha512-wGA++isMqiDq1jPYeyv2as/Bt/u+3iLW0rEa+8NQ82jAv3TgqMiCM+B2SaBdn2DfLilLjjq736YcezihRYhfxw==, tarball: https://registry.npmmirror.com/component-event/-/component-event-0.2.1.tgz}
+
+ component-indexof@0.0.3:
+ resolution: {integrity: sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==, tarball: https://registry.npmmirror.com/component-indexof/-/component-indexof-0.0.3.tgz}
+
+ component-matches-selector@0.1.7:
+ resolution: {integrity: sha512-Yb2+pVBvrqkQVpPaDBF0DYXRreBveXJNrpJs9FnFu8PF6/5IIcz5oDZqiH9nB5hbD2/TmFVN5ZCxBzqu7yFFYQ==, tarball: https://registry.npmmirror.com/component-matches-selector/-/component-matches-selector-0.1.7.tgz}
+
+ component-query@0.0.3:
+ resolution: {integrity: sha512-VgebQseT1hz1Ps7vVp2uaSg+N/gsI5ts3AZUSnN6GMA2M82JH7o+qYifWhmVE/e8w/H48SJuA3nA9uX8zRe95Q==, tarball: https://registry.npmmirror.com/component-query/-/component-query-0.0.3.tgz}
+
+ compute-scroll-into-view@1.0.20:
+ resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==, tarball: https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz}
+
+ computeds@0.0.1:
+ resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==, tarball: https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, tarball: https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz}
+
+ confbox@0.1.7:
+ resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==, tarball: https://registry.npmmirror.com/confbox/-/confbox-0.1.7.tgz}
+
+ consola@3.2.3:
+ resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==, tarball: https://registry.npmmirror.com/consola/-/consola-3.2.3.tgz}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
+ conventional-changelog-angular@7.0.0:
+ resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==, tarball: https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz}
+ engines: {node: '>=16'}
+
+ conventional-changelog-conventionalcommits@7.0.2:
+ resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==, tarball: https://registry.npmmirror.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz}
+ engines: {node: '>=16'}
+
+ conventional-commits-parser@5.0.0:
+ resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==, tarball: https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz}
+
+ copy-descriptor@0.1.1:
+ resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==, tarball: https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ core-js-compat@3.37.0:
+ resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==, tarball: https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.37.0.tgz}
+
+ core-js-pure@3.37.0:
+ resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==, tarball: https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.37.0.tgz}
+
+ core-js@3.37.0:
+ resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==, tarball: https://registry.npmmirror.com/core-js/-/core-js-3.37.0.tgz}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, tarball: https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz}
+ engines: {node: '>= 0.10'}
+
+ cosmiconfig-typescript-loader@5.0.0:
+ resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==, tarball: https://registry.npmmirror.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz}
+ engines: {node: '>=v16'}
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=8.2'
+ typescript: '>=4'
+
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==, tarball: https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ cropperjs@1.6.2:
+ resolution: {integrity: sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==, tarball: https://registry.npmmirror.com/cropperjs/-/cropperjs-1.6.2.tgz}
+
+ cross-fetch@3.1.8:
+ resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==, tarball: https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.8.tgz}
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, tarball: https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz}
+ engines: {node: '>= 8'}
+
+ crypto-js@4.2.0:
+ resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==, tarball: https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz}
+
+ css-functions-list@3.2.2:
+ resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==, tarball: https://registry.npmmirror.com/css-functions-list/-/css-functions-list-3.2.2.tgz}
+ engines: {node: '>=12 || >=16'}
+
+ css-select@4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, tarball: https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz}
+
+ css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==, tarball: https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz}
+
+ css-tree@1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz}
+ engines: {node: '>=8.0.0'}
+
+ css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==, tarball: https://registry.npmmirror.com/css-tree/-/css-tree-2.3.1.tgz}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, tarball: https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz}
+ engines: {node: '>= 6'}
+
+ css.escape@1.5.1:
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, tarball: https://registry.npmmirror.com/css.escape/-/css.escape-1.5.1.tgz}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ csso@4.2.0:
+ resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, tarball: https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz}
+ engines: {node: '>=8.0.0'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz}
+
+ d3-array@3.2.4:
+ resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, tarball: https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz}
+ engines: {node: '>=12'}
+
+ d3-axis@3.0.0:
+ resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==, tarball: https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-brush@3.0.0:
+ resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==, tarball: https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-chord@3.0.1:
+ resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==, tarball: https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-color@3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, tarball: https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-contour@4.0.2:
+ resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==, tarball: https://registry.npmmirror.com/d3-contour/-/d3-contour-4.0.2.tgz}
+ engines: {node: '>=12'}
+
+ d3-delaunay@6.0.4:
+ resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==, tarball: https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz}
+ engines: {node: '>=12'}
+
+ d3-dispatch@3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, tarball: https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-drag@3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==, tarball: https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-dsv@3.0.1:
+ resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==, tarball: https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ d3-ease@3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, tarball: https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-fetch@3.0.1:
+ resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==, tarball: https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-flextree@2.1.2:
+ resolution: {integrity: sha512-gJiHrx5uTTHq44bjyIb3xpbmmdZcWLYPKeO9EPVOq8EylMFOiH2+9sWqKAiQ4DcFuOZTAxPOQyv0Rnmji/g15A==, tarball: https://registry.npmmirror.com/d3-flextree/-/d3-flextree-2.1.2.tgz}
+
+ d3-force@3.0.0:
+ resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==, tarball: https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-format@3.1.0:
+ resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==, tarball: https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-geo@3.1.1:
+ resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==, tarball: https://registry.npmmirror.com/d3-geo/-/d3-geo-3.1.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-hierarchy@1.1.9:
+ resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==, tarball: https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz}
+
+ d3-hierarchy@3.1.2:
+ resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==, tarball: https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz}
+ engines: {node: '>=12'}
+
+ d3-interpolate@3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, tarball: https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-path@3.1.0:
+ resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, tarball: https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-polygon@3.0.1:
+ resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==, tarball: https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-quadtree@3.0.1:
+ resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==, tarball: https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-random@3.0.1:
+ resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==, tarball: https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-scale-chromatic@3.1.0:
+ resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==, tarball: https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-scale@4.0.2:
+ resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, tarball: https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz}
+ engines: {node: '>=12'}
+
+ d3-selection@3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==, tarball: https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-shape@3.2.0:
+ resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, tarball: https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-time-format@4.1.0:
+ resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, tarball: https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-time@3.1.0:
+ resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, tarball: https://registry.npmmirror.com/d3-time/-/d3-time-3.1.0.tgz}
+ engines: {node: '>=12'}
+
+ d3-timer@3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, tarball: https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz}
+ engines: {node: '>=12'}
+
+ d3-transition@3.0.1:
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==, tarball: https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz}
+ engines: {node: '>=12'}
+ peerDependencies:
+ d3-selection: 2 - 3
+
+ d3-zoom@3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==, tarball: https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz}
+ engines: {node: '>=12'}
+
+ d3@7.9.0:
+ resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==, tarball: https://registry.npmmirror.com/d3/-/d3-7.9.0.tgz}
+ engines: {node: '>=12'}
+
+ d@1.0.2:
+ resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==, tarball: https://registry.npmmirror.com/d/-/d-1.0.2.tgz}
+ engines: {node: '>=0.12'}
+
+ dargs@8.1.0:
+ resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==, tarball: https://registry.npmmirror.com/dargs/-/dargs-8.1.0.tgz}
+ engines: {node: '>=12'}
+
+ data-view-buffer@1.0.1:
+ resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==, tarball: https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.1:
+ resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==, tarball: https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.0:
+ resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==, tarball: https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz}
+ engines: {node: '>= 0.4'}
+
+ dayjs@1.11.11:
+ resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz}
+
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, tarball: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, tarball: https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==, tarball: https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz}
+ engines: {node: '>=0.10'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, tarball: https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, tarball: https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, tarball: https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ define-property@0.2.5:
+ resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==, tarball: https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz}
+ engines: {node: '>=0.10.0'}
+
+ define-property@1.0.0:
+ resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==, tarball: https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ define-property@2.0.2:
+ resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==, tarball: https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==, tarball: https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz}
+
+ delaunator@5.0.1:
+ resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==, tarball: https://registry.npmmirror.com/delaunator/-/delaunator-5.0.1.tgz}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz}
+ engines: {node: '>=0.4.0'}
+
+ destr@2.0.3:
+ resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==, tarball: https://registry.npmmirror.com/destr/-/destr-2.0.3.tgz}
+
+ diagram-js-direct-editing@1.8.0:
+ resolution: {integrity: sha512-B4Xj+PJfgBjbPEzT3uZQEkZI5xHFB0Izc+7BhDFuHidzrEMzQKZrFGdA3PqfWhReHf3dp+iB6Tt11G9eGNjKMw==, tarball: https://registry.npmmirror.com/diagram-js-direct-editing/-/diagram-js-direct-editing-1.8.0.tgz}
+ peerDependencies:
+ diagram-js: '*'
+
+ diagram-js@12.8.1:
+ resolution: {integrity: sha512-LF9BiwjbOPpZd0ez5VSlYRbdbEA59YQX43bWvNDp1rLMv0xwZ5yIg4oaYDK82nIQ0kH1tjvoQRpNevMTCgQVyw==, tarball: https://registry.npmmirror.com/diagram-js/-/diagram-js-12.8.1.tgz}
+
+ diagram-js@7.9.0:
+ resolution: {integrity: sha512-o1yUtX5TXV1pmpevP55gxU/AEG6nCidOXGs/HLuxNXG0zMZ3jQta7kMqRxTK93rNw/XuHmP1eMOwdvdJ2RP5qA==, tarball: https://registry.npmmirror.com/diagram-js/-/diagram-js-7.9.0.tgz}
+
+ didi@5.2.1:
+ resolution: {integrity: sha512-IKNnajUlD4lWMy/Q9Emkk7H1qnzREgY4UyE3IhmOi/9IKua0JYtYldk928bOdt1yNxN8EiOy1sqtSozEYsmjCg==, tarball: https://registry.npmmirror.com/didi/-/didi-5.2.1.tgz}
+
+ didi@9.0.2:
+ resolution: {integrity: sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==, tarball: https://registry.npmmirror.com/didi/-/didi-9.0.2.tgz}
+
+ dijkstrajs@1.0.3:
+ resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==, tarball: https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz}
+ engines: {node: '>=8'}
+
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, tarball: https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz}
+
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, tarball: https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz}
+ engines: {node: '>=6.0.0'}
+
+ dom-serializer@0.2.2:
+ resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz}
+
+ dom-serializer@1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, tarball: https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz}
+
+ dom-walk@0.1.2:
+ resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==, tarball: https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz}
+
+ dom-zindex@1.0.6:
+ resolution: {integrity: sha512-FKWIhiU96bi3xpP9ewRMgANsoVmMUBnMnmpCT6dPMZOunVYJQmJhSRruoI0XSPoHeIif3kyEuiHbFrOJwEJaEA==}
+
+ dom7@3.0.0:
+ resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==, tarball: https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz}
+
+ domelementtype@1.3.1:
+ resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, tarball: https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz}
+
+ domhandler@2.4.2:
+ resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz}
+
+ domhandler@4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz}
+ engines: {node: '>= 4'}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, tarball: https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz}
+ engines: {node: '>= 4'}
+
+ domify@1.4.2:
+ resolution: {integrity: sha512-m4yreHcUWHBncGVV7U+yQzc12vIlq0jMrtHZ5mW6dQMiL/7skSYNVX9wqKwOtyO9SGCgevrAFEgOCAHmamHTUA==, tarball: https://registry.npmmirror.com/domify/-/domify-1.4.2.tgz}
+
+ dompurify@3.1.1:
+ resolution: {integrity: sha512-tVP8C/GJwnABOn/7cx/ymx/hXpmBfWIPihC1aOEvS8GbMqy3pgeYtJk1HXN3CO7tu+8bpY18f6isjR5Cymj0TQ==, tarball: https://registry.npmmirror.com/dompurify/-/dompurify-3.1.1.tgz}
+
+ domutils@1.7.0:
+ resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==, tarball: https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz}
+
+ domutils@2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, tarball: https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz}
+
+ domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==, tarball: https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz}
+
+ dot-prop@5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, tarball: https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz}
+ engines: {node: '>=8'}
+
+ driver.js@1.3.1:
+ resolution: {integrity: sha512-MvUdXbqSgEsgS/H9KyWb5Rxy0aE6BhOVT4cssi2x2XjmXea6qQfgdx32XKVLLSqTaIw7q/uxU5Xl3NV7+cN6FQ==, tarball: https://registry.npmmirror.com/driver.js/-/driver.js-1.3.1.tgz}
+
+ duplexer@0.1.2:
+ resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, tarball: https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, tarball: https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz}
+
+ echarts-wordcloud@2.1.0:
+ resolution: {integrity: sha512-Kt1JmbcROgb+3IMI48KZECK2AP5lG6bSsOEs+AsuwaWJxQom31RTNd6NFYI01E/YaI1PFZeueaupjlmzSQasjQ==, tarball: https://registry.npmmirror.com/echarts-wordcloud/-/echarts-wordcloud-2.1.0.tgz}
+ peerDependencies:
+ echarts: ^5.0.1
+
+ echarts@5.5.0:
+ resolution: {integrity: sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz}
+
+ ejs@3.1.10:
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==, tarball: https://registry.npmmirror.com/ejs/-/ejs-3.1.10.tgz}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ electron-to-chromium@1.4.750:
+ resolution: {integrity: sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz}
+
+ element-plus@2.8.0:
+ resolution: {integrity: sha512-7ngapVlVlQAjocVqD4MUKvKXlBneT9DSDk2mmBOSLRFWNm/HLDT15ozmsvUBfy18sajnyUeSIHTtINE8gfrGMg==}
+ peerDependencies:
+ vue: ^3.2.0
+
+ emoji-regex@10.3.0:
+ resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.3.0.tgz}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, tarball: https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz}
+
+ emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz}
+ engines: {node: '>= 4'}
+
+ encode-utf8@1.0.3:
+ resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==, tarball: https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz}
+
+ entities@1.1.2:
+ resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==, tarball: https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz}
+
+ entities@2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, tarball: https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, tarball: https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz}
+ engines: {node: '>=0.12'}
+
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, tarball: https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz}
+ engines: {node: '>=6'}
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz}
+
+ es-abstract@1.23.3:
+ resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==, tarball: https://registry.npmmirror.com/es-abstract/-/es-abstract-1.23.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==, tarball: https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, tarball: https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz}
+ engines: {node: '>= 0.4'}
+
+ es-module-lexer@1.5.2:
+ resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==, tarball: https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.5.2.tgz}
+
+ es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==, tarball: https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.0.3:
+ resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==, tarball: https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ es-to-primitive@1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, tarball: https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ es5-ext@0.10.64:
+ resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==, tarball: https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz}
+ engines: {node: '>=0.10'}
+
+ es6-iterator@2.0.3:
+ resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==, tarball: https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz}
+
+ es6-symbol@3.1.4:
+ resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==, tarball: https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz}
+ engines: {node: '>=0.12'}
+
+ esbuild@0.19.12:
+ resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.19.12.tgz}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, tarball: https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz}
+ engines: {node: '>=12'}
+
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, tarball: https://registry.npmmirror.com/escodegen/-/escodegen-2.1.0.tgz}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
+ eslint-config-prettier@9.1.0:
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==, tarball: https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-define-config@2.1.0:
+ resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==, tarball: https://registry.npmmirror.com/eslint-define-config/-/eslint-define-config-2.1.0.tgz}
+ engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'}
+
+ eslint-plugin-prettier@5.1.3:
+ resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==, tarball: https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '*'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+
+ eslint-plugin-vue@9.25.0:
+ resolution: {integrity: sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==, tarball: https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
+
+ eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, tarball: https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==, tarball: https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+
+ esniff@2.0.1:
+ resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==, tarball: https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz}
+ engines: {node: '>=0.10'}
+
+ espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, tarball: https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, tarball: https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz}
+ engines: {node: '>=4.0'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, tarball: https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz}
+ engines: {node: '>=0.10.0'}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, tarball: https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz}
+ engines: {node: '>= 0.6'}
+
+ event-emitter@0.3.5:
+ resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==, tarball: https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, tarball: https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz}
+ engines: {node: '>=10'}
+
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==, tarball: https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz}
+ engines: {node: '>=16.17'}
+
+ expand-brackets@2.1.4:
+ resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==, tarball: https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz}
+ engines: {node: '>=0.10.0'}
+
+ ext@1.7.0:
+ resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==, tarball: https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz}
+
+ extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ extend-shallow@3.0.2:
+ resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ extglob@2.0.4:
+ resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==, tarball: https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz}
+ engines: {node: '>=0.10.0'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz}
+
+ fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, tarball: https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz}
+
+ fast-xml-parser@4.3.6:
+ resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==, tarball: https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz}
+ hasBin: true
+
+ fastest-levenshtein@1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==, tarball: https://registry.npmmirror.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz}
+ engines: {node: '>= 4.9.1'}
+
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz}
+
+ file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz}
+ engines: {node: '>=16.0.0'}
+
+ filelist@1.0.4:
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==, tarball: https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz}
+
+ fill-range@4.0.0:
+ resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz}
+ engines: {node: '>=8'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, tarball: https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, tarball: https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz}
+ engines: {node: '>=10'}
+
+ find-up@7.0.0:
+ resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==, tarball: https://registry.npmmirror.com/find-up/-/find-up-7.0.0.tgz}
+ engines: {node: '>=18'}
+
+ flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==, tarball: https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, tarball: https://registry.npmmirror.com/flat-cache/-/flat-cache-4.0.1.tgz}
+ engines: {node: '>=16'}
+
+ flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, tarball: https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz}
+
+ follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, tarball: https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz}
+
+ for-in@1.0.2:
+ resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==, tarball: https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ foreground-child@3.1.1:
+ resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==, tarball: https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz}
+ engines: {node: '>=14'}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, tarball: https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz}
+ engines: {node: '>= 6'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, tarball: https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz}
+
+ fragment-cache@0.2.1:
+ resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==, tarball: https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz}
+ engines: {node: '>=12'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz}
+
+ 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==, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz}
+
+ function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==, tarball: https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, tarball: https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, tarball: https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.2.0:
+ resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==, tarball: https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz}
+ engines: {node: '>=18'}
+
+ get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==, tarball: https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz}
+ engines: {node: '>= 0.4'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz}
+ engines: {node: '>=10'}
+
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, tarball: https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz}
+ engines: {node: '>=16'}
+
+ get-symbol-description@1.0.2:
+ resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==, tarball: https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ get-value@2.0.6:
+ resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==, tarball: https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz}
+ engines: {node: '>=0.10.0'}
+
+ git-raw-commits@4.0.0:
+ resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==, tarball: https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz}
+ engines: {node: '>=10.13.0'}
+
+ glob@10.3.12:
+ resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==, tarball: https://registry.npmmirror.com/glob/-/glob-10.3.12.tgz}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz}
+
+ global-directory@4.0.1:
+ resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==, tarball: https://registry.npmmirror.com/global-directory/-/global-directory-4.0.1.tgz}
+ engines: {node: '>=18'}
+
+ global-modules@2.0.0:
+ resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==, tarball: https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz}
+ engines: {node: '>=6'}
+
+ global-object@1.0.0:
+ resolution: {integrity: sha512-mSPSkY6UsHv6hgW0V2dfWBWTS8TnPnLx3ECVNoWp6rBI2Bg66VYoqGoTFlH/l7XhAZ/l+StYlntXlt87BEeCcg==, tarball: https://registry.npmmirror.com/global-object/-/global-object-1.0.0.tgz}
+
+ global-prefix@3.0.0:
+ resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==, tarball: https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz}
+ engines: {node: '>=6'}
+
+ global@4.4.0:
+ resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==, tarball: https://registry.npmmirror.com/global/-/global-4.4.0.tgz}
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz}
+ engines: {node: '>=4'}
+
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==, tarball: https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz}
+ engines: {node: '>=8'}
+
+ globalthis@1.0.3:
+ resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, tarball: https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, tarball: https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz}
+ engines: {node: '>=10'}
+
+ globjoin@0.1.4:
+ resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==, tarball: https://registry.npmmirror.com/globjoin/-/globjoin-0.1.4.tgz}
+
+ gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, tarball: https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz}
+
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, tarball: https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz}
+
+ gzip-size@6.0.0:
+ resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, tarball: https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz}
+ engines: {node: '>=10'}
+
+ hammerjs@2.0.8:
+ resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==, tarball: https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz}
+ engines: {node: '>=0.8.0'}
+
+ has-ansi@2.0.0:
+ resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==, tarball: https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ has-bigints@1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, tarball: https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz}
+
+ has-flag@1.0.0:
+ resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz}
+ engines: {node: '>=4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, tarball: https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz}
+
+ has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==, tarball: https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, tarball: https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, tarball: https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ has-value@0.3.1:
+ resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==, tarball: https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ has-value@1.0.0:
+ resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==, tarball: https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ has-values@0.1.4:
+ resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==, tarball: https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz}
+ engines: {node: '>=0.10.0'}
+
+ has-values@1.0.0:
+ resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==, tarball: https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, tarball: https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz}
+ hasBin: true
+
+ highlight.js@11.9.0:
+ resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-11.9.0.tgz}
+ engines: {node: '>=12.0.0'}
+
+ htm@3.1.1:
+ resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==, tarball: https://registry.npmmirror.com/htm/-/htm-3.1.1.tgz}
+
+ html-tags@3.3.1:
+ resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz}
+ engines: {node: '>=8'}
+
+ html-void-elements@2.0.1:
+ resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==, tarball: https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz}
+
+ htmlparser2@3.10.1:
+ resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz}
+
+ htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==, tarball: https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.2.tgz}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz}
+ engines: {node: '>=10.17.0'}
+
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==, tarball: https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz}
+ engines: {node: '>=16.17.0'}
+
+ i18next@20.6.1:
+ resolution: {integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==, tarball: https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz}
+ engines: {node: '>=0.10.0'}
+
+ ids@1.0.5:
+ resolution: {integrity: sha512-XQ0yom/4KWTL29sLG+tyuycy7UmeaM/79GRtSJq6IG9cJGIPeBz5kwDCguie3TwxaMNIc3WtPi0cTa1XYHicpw==, tarball: https://registry.npmmirror.com/ids/-/ids-1.0.5.tgz}
+
+ ignore@5.3.1:
+ resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==, tarball: https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz}
+ engines: {node: '>= 4'}
+
+ image-size@0.5.5:
+ resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ immer@9.0.21:
+ resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==, tarball: https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz}
+
+ immutable@4.3.5:
+ resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.3.5.tgz}
+
+ import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz}
+ engines: {node: '>=6'}
+
+ import-meta-resolve@4.0.0:
+ resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==, tarball: https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, tarball: https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz}
+ engines: {node: '>=8'}
+
+ indexof@0.0.1:
+ resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==, tarball: https://registry.npmmirror.com/indexof/-/indexof-0.0.1.tgz}
+
+ individual@2.0.0:
+ resolution: {integrity: sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==, tarball: https://registry.npmmirror.com/individual/-/individual-2.0.0.tgz}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz}
+
+ inherits-browser@0.1.0:
+ resolution: {integrity: sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==, tarball: https://registry.npmmirror.com/inherits-browser/-/inherits-browser-0.1.0.tgz}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, tarball: https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz}
+
+ ini@4.1.1:
+ resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==, tarball: https://registry.npmmirror.com/ini/-/ini-4.1.1.tgz}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ internal-slot@1.0.7:
+ resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==, tarball: https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.7.tgz}
+ engines: {node: '>= 0.4'}
+
+ internmap@2.0.3:
+ resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, tarball: https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz}
+ engines: {node: '>=12'}
+
+ is-accessor-descriptor@1.0.1:
+ resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==, tarball: https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz}
+ engines: {node: '>= 0.10'}
+
+ is-array-buffer@3.0.4:
+ resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==, tarball: https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz}
+
+ is-bigint@1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, tarball: https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz}
+ engines: {node: '>=8'}
+
+ is-boolean-object@1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, tarball: https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, tarball: https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.13.1:
+ resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz}
+
+ is-data-descriptor@1.0.1:
+ resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==, tarball: https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.1:
+ resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==, tarball: https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, tarball: https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-descriptor@0.1.7:
+ resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.7.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-descriptor@1.0.3:
+ resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==, tarball: https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-extendable@1.0.1:
+ resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz}
+ engines: {node: '>=12'}
+
+ is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==, tarball: https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz}
+ engines: {node: '>=18'}
+
+ is-function@1.0.2:
+ resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==, tarball: https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-hotkey@0.2.0:
+ resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==, tarball: https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, tarball: https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, tarball: https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-number@3.0.0:
+ resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, tarball: https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz}
+ engines: {node: '>=0.12.0'}
+
+ is-obj@2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, tarball: https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz}
+ engines: {node: '>=8'}
+
+ is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, tarball: https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz}
+ engines: {node: '>=8'}
+
+ is-plain-obj@1.1.0:
+ resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, tarball: https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, tarball: https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ is-regex@1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, tarball: https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==, tarball: https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz}
+ engines: {node: '>=8'}
+
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ is-string@1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, tarball: https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, tarball: https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-text-path@2.0.0:
+ resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==, tarball: https://registry.npmmirror.com/is-text-path/-/is-text-path-2.0.0.tgz}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==, tarball: https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.13.tgz}
+ engines: {node: '>= 0.4'}
+
+ is-url@1.2.4:
+ resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==, tarball: https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz}
+
+ is-weakref@1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, tarball: https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz}
+
+ is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, tarball: https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, tarball: https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, tarball: https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, tarball: https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz}
+
+ isobject@2.1.0:
+ resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==, tarball: https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, tarball: https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ jackspeak@2.3.6:
+ resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==, tarball: https://registry.npmmirror.com/jackspeak/-/jackspeak-2.3.6.tgz}
+ engines: {node: '>=14'}
+
+ jake@10.8.7:
+ resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==, tarball: https://registry.npmmirror.com/jake/-/jake-10.8.7.tgz}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ jiti@1.21.0:
+ resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==, tarball: https://registry.npmmirror.com/jiti/-/jiti-1.21.0.tgz}
+ hasBin: true
+
+ js-base64@2.6.4:
+ resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==, tarball: https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}
+
+ js-tokens@8.0.3:
+ resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-8.0.3.tgz}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz}
+ hasBin: true
+
+ jsencrypt@3.3.2:
+ resolution: {integrity: sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==, tarball: https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.2.tgz}
+
+ jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz}
+ hasBin: true
+
+ jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, tarball: https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz}
+
+ json-source-map@0.6.1:
+ resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==, tarball: https://registry.npmmirror.com/json-source-map/-/json-source-map-0.6.1.tgz}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, tarball: https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, tarball: https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonc-eslint-parser@2.4.0:
+ resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==, tarball: https://registry.npmmirror.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz}
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==, tarball: https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz}
+ engines: {'0': node >= 0.2.0}
+
+ katex@0.16.11:
+ resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==, tarball: https://registry.npmmirror.com/katex/-/katex-0.16.11.tgz}
+ hasBin: true
+
+ keycode@2.2.1:
+ resolution: {integrity: sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==, tarball: https://registry.npmmirror.com/keycode/-/keycode-2.2.1.tgz}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, tarball: https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz}
+
+ kind-of@3.2.2:
+ resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ kind-of@4.0.0:
+ resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ kind-of@5.1.0:
+ resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz}
+ engines: {node: '>=0.10.0'}
+
+ known-css-properties@0.30.0:
+ resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==, tarball: https://registry.npmmirror.com/known-css-properties/-/known-css-properties-0.30.0.tgz}
+
+ kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==, tarball: https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, tarball: https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz}
+ engines: {node: '>= 0.8.0'}
+
+ lilconfig@3.0.0:
+ resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==, tarball: https://registry.npmmirror.com/lilconfig/-/lilconfig-3.0.0.tgz}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, tarball: https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz}
+
+ linkify-it@5.0.0:
+ resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==, tarball: https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz}
+
+ lint-staged@15.2.2:
+ resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==, tarball: https://registry.npmmirror.com/lint-staged/-/lint-staged-15.2.2.tgz}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+
+ listr2@8.0.1:
+ resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==, tarball: https://registry.npmmirror.com/listr2/-/listr2-8.0.1.tgz}
+ engines: {node: '>=18.0.0'}
+
+ loader-utils@1.4.2:
+ resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz}
+ engines: {node: '>=4.0.0'}
+
+ local-pkg@0.4.3:
+ resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==, tarball: https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz}
+ engines: {node: '>=14'}
+
+ local-pkg@0.5.0:
+ resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==, tarball: https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz}
+ engines: {node: '>=14'}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz}
+ engines: {node: '>=10'}
+
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==, tarball: https://registry.npmmirror.com/locate-path/-/locate-path-7.2.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz}
+
+ lodash-unified@1.0.3:
+ resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
+ peerDependencies:
+ '@types/lodash-es': '*'
+ lodash: '*'
+ lodash-es: '*'
+
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==, tarball: https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz}
+
+ lodash.clonedeep@4.5.0:
+ resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==, tarball: https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz}
+
+ lodash.foreach@4.5.0:
+ resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==, tarball: https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz}
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, tarball: https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, tarball: https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz}
+
+ lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==, tarball: https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, tarball: https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz}
+
+ lodash.mergewith@4.6.2:
+ resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==, tarball: https://registry.npmmirror.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz}
+
+ lodash.snakecase@4.1.1:
+ resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==, tarball: https://registry.npmmirror.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, tarball: https://registry.npmmirror.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz}
+
+ lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==, tarball: https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz}
+
+ lodash.toarray@4.4.0:
+ resolution: {integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==, tarball: https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz}
+
+ lodash.truncate@4.4.2:
+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, tarball: https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, tarball: https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz}
+
+ lodash.upperfirst@4.3.1:
+ resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==, tarball: https://registry.npmmirror.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
+
+ log-update@6.0.0:
+ resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==, tarball: https://registry.npmmirror.com/log-update/-/log-update-6.0.0.tgz}
+ engines: {node: '>=18'}
+
+ loglevel-colored-level-prefix@1.0.0:
+ resolution: {integrity: sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==, tarball: https://registry.npmmirror.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz}
+
+ loglevel@1.9.1:
+ resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==, tarball: https://registry.npmmirror.com/loglevel/-/loglevel-1.9.1.tgz}
+ engines: {node: '>= 0.6.0'}
+
+ lru-cache@10.2.2:
+ resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-10.2.2.tgz}
+ engines: {node: 14 || >=16.14}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz}
+ engines: {node: '>=10'}
+
+ m3u8-parser@4.8.0:
+ resolution: {integrity: sha512-UqA2a/Pw3liR6Df3gwxrqghCP17OpPlQj6RBPLYygf/ZSQ4MoSgvdvhvt35qV+3NaaA0FSZx93Ix+2brT1U7cA==, tarball: https://registry.npmmirror.com/m3u8-parser/-/m3u8-parser-4.8.0.tgz}
+
+ magic-string@0.30.10:
+ resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz}
+
+ map-cache@0.2.2:
+ resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==, tarball: https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ map-visit@1.0.0:
+ resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==, tarball: https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ markdown-it@14.1.0:
+ resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==, tarball: https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.0.tgz}
+ hasBin: true
+
+ markmap-common@0.16.0:
+ resolution: {integrity: sha512-q3nlNDMKuWXTm3VwZFY9V5zteL/+iBLZanUK5vS+e26bUbzTSG5VtAzsyJbmgJm1WhwmIIAxbXEnp6JdvtTduA==, tarball: https://registry.npmmirror.com/markmap-common/-/markmap-common-0.16.0.tgz}
+
+ markmap-html-parser@0.16.1:
+ resolution: {integrity: sha512-/Mgm4g1qMQ8uEOz8h8K+jPspdgjfw29NqmfTLZSt8yG+vW7fWWduPjGRFc5axAZxCzP7PTzZLEuOxAqOwEg8Bg==, tarball: https://registry.npmmirror.com/markmap-html-parser/-/markmap-html-parser-0.16.1.tgz}
+ peerDependencies:
+ markmap-common: '*'
+
+ markmap-lib@0.16.1:
+ resolution: {integrity: sha512-jD8VsB67m677IRehGSwwVJDlC6PS+xzDKsJOwdvjZ+ndfXrHa1lyqfvR6mIwvGGUIciF86YEITSKL9hQTHE4Rw==, tarball: https://registry.npmmirror.com/markmap-lib/-/markmap-lib-0.16.1.tgz}
+ peerDependencies:
+ markmap-common: '*'
+
+ markmap-toolbar@0.17.0:
+ resolution: {integrity: sha512-zRkg+pYtjDefJ4lSG0KownAN3eqkJcrTei+HbobBWsWTsc7qdUMn2Ewd97SFHCkGoo1nrG0aW7dzDP6lHWuDkw==, tarball: https://registry.npmmirror.com/markmap-toolbar/-/markmap-toolbar-0.17.0.tgz}
+ peerDependencies:
+ markmap-common: '*'
+
+ markmap-view@0.16.0:
+ resolution: {integrity: sha512-JOiSEThs8B4bAP9E6rcCWOz2SsMwCBFaR76wLARRVb04C/qLiLmvrm675kNPq4lRBAwtugHCYvjG0otpSlB4Cw==, tarball: https://registry.npmmirror.com/markmap-view/-/markmap-view-0.16.0.tgz}
+ peerDependencies:
+ markmap-common: '*'
+
+ matches-selector@1.2.0:
+ resolution: {integrity: sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==, tarball: https://registry.npmmirror.com/matches-selector/-/matches-selector-1.2.0.tgz}
+
+ mathml-tag-names@2.1.3:
+ resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==, tarball: https://registry.npmmirror.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz}
+
+ mdn-data@2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz}
+
+ mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==, tarball: https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.30.tgz}
+
+ mdurl@2.0.0:
+ resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==, tarball: https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz}
+
+ memoize-one@6.0.0:
+ resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
+
+ meow@12.1.1:
+ resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==, tarball: https://registry.npmmirror.com/meow/-/meow-12.1.1.tgz}
+ engines: {node: '>=16.10'}
+
+ meow@13.2.0:
+ resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==, tarball: https://registry.npmmirror.com/meow/-/meow-13.2.0.tgz}
+ engines: {node: '>=18'}
+
+ merge-options@1.0.1:
+ resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==, tarball: https://registry.npmmirror.com/merge-options/-/merge-options-1.0.1.tgz}
+ engines: {node: '>=4'}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz}
+ engines: {node: '>= 8'}
+
+ micromatch@3.1.0:
+ resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-3.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz}
+ engines: {node: '>= 0.6'}
+
+ mime-match@1.0.2:
+ resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==, tarball: https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz}
+ engines: {node: '>= 0.6'}
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz}
+ engines: {node: '>=6'}
+
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz}
+ engines: {node: '>=12'}
+
+ min-dash@3.8.1:
+ resolution: {integrity: sha512-evumdlmIlg9mbRVPbC4F5FuRhNmcMS5pvuBUbqb1G9v09Ro0ImPEgz5n3khir83lFok1inKqVDjnKEg3GpDxQg==, tarball: https://registry.npmmirror.com/min-dash/-/min-dash-3.8.1.tgz}
+
+ min-dash@4.2.1:
+ resolution: {integrity: sha512-to+unsToePnm7cUeR9TrMzFlETHd/UXmU+ELTRfWZj5XGT41KF6X3L233o3E/GdEs3sk2Tbw/lOLD1avmWkg8A==, tarball: https://registry.npmmirror.com/min-dash/-/min-dash-4.2.1.tgz}
+
+ min-document@2.19.0:
+ resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==, tarball: https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz}
+
+ min-dom@0.2.0:
+ resolution: {integrity: sha512-VmxugbnAcVZGqvepjhOA4d4apmrpX8mMaRS+/jo0dI5Yorzrr4Ru9zc9KVALlY/+XakVCb8iQ+PYXljihQcsNw==, tarball: https://registry.npmmirror.com/min-dom/-/min-dom-0.2.0.tgz}
+
+ min-dom@3.2.1:
+ resolution: {integrity: sha512-v6YCmnDzxk4rRJntWTUiwggLupPw/8ZSRqUq0PDaBwVZEO/wYzCH4SKVBV+KkEvf3u0XaWHly5JEosPtqRATZA==, tarball: https://registry.npmmirror.com/min-dom/-/min-dom-3.2.1.tgz}
+
+ min-dom@4.1.0:
+ resolution: {integrity: sha512-1lj1EyoSwY/UmTeT/hhPiZTsq+vK9D+8FAJ/53iK5jT1otkG9rJTixSKdjmTieEvdfES+sKbbTptzaQJhnacjA==, tarball: https://registry.npmmirror.com/min-dom/-/min-dom-4.1.0.tgz}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.3:
+ resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimatch@9.0.4:
+ resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-9.0.4.tgz}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz}
+
+ minipass@7.0.4:
+ resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==, tarball: https://registry.npmmirror.com/minipass/-/minipass-7.0.4.tgz}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mitt@1.2.0:
+ resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==, tarball: https://registry.npmmirror.com/mitt/-/mitt-1.2.0.tgz}
+
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==, tarball: https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz}
+
+ mixin-deep@1.3.2:
+ resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==, tarball: https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ mlly@1.6.1:
+ resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==, tarball: https://registry.npmmirror.com/mlly/-/mlly-1.6.1.tgz}
+
+ moddle-xml@9.0.6:
+ resolution: {integrity: sha512-tl0reHpsY/aKlLGhXeFlQWlYAQHFxTkFqC8tq8jXRYpQSnLVw13T6swMaourLd7EXqHdWsc+5ggsB+fEep6xZQ==, tarball: https://registry.npmmirror.com/moddle-xml/-/moddle-xml-9.0.6.tgz}
+
+ moddle@5.0.4:
+ resolution: {integrity: sha512-Kjb+hjuzO+YlojNGxEUXvdhLYTHTtAABDlDcJTtTcn5MbJF9Zkv4I1Fyvp3Ypmfgg1EfHDZ3PsCQTuML9JD6wg==, tarball: https://registry.npmmirror.com/moddle/-/moddle-5.0.4.tgz}
+
+ mpd-parser@0.22.1:
+ resolution: {integrity: sha512-fwBebvpyPUU8bOzvhX0VQZgSohncbgYwUyJJoTSNpmy7ccD2ryiCvM7oRkn/xQH5cv73/xU7rJSNCLjdGFor0Q==, tarball: https://registry.npmmirror.com/mpd-parser/-/mpd-parser-0.22.1.tgz}
+ hasBin: true
+
+ mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==, tarball: https://registry.npmmirror.com/mrmime/-/mrmime-2.0.0.tgz}
+ engines: {node: '>=10'}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz}
+
+ muggle-string@0.3.1:
+ resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==, tarball: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz}
+
+ mux.js@6.0.1:
+ resolution: {integrity: sha512-22CHb59rH8pWGcPGW5Og7JngJ9s+z4XuSlYvnxhLuc58cA1WqGDQPzuG8I+sPm1/p0CdgpzVTaKW408k5DNn8w==, tarball: https://registry.npmmirror.com/mux.js/-/mux.js-6.0.1.tgz}
+ engines: {node: '>=8', npm: '>=5'}
+ hasBin: true
+
+ namespace-emitter@2.0.1:
+ resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==, tarball: https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz}
+
+ nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ nanomatch@1.2.13:
+ resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, tarball: https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz}
+ engines: {node: '>=0.10.0'}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, tarball: https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz}
+
+ next-tick@1.1.0:
+ resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==, tarball: https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz}
+
+ node-fetch-native@1.6.4:
+ resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==, tarball: https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, tarball: https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ normalize-wheel-es@1.2.0:
+ resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz}
+ engines: {node: '>=8'}
+
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==, tarball: https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.3.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ npm2url@0.2.4:
+ resolution: {integrity: sha512-arzGp/hQz0Ey+ZGhF64XVH7Xqwd+1Q/po5uGiBbzph8ebX6T0uvt3N7c1nBHQNsQVykQgHhqoRTX7JFcHecGuw==, tarball: https://registry.npmmirror.com/npm2url/-/npm2url-0.2.4.tgz}
+
+ nprogress@0.2.0:
+ resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==, tarball: https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, tarball: https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, tarball: https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ object-copy@0.1.0:
+ resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==, tarball: https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ object-inspect@1.13.1:
+ resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==, tarball: https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, tarball: https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ object-refs@0.3.0:
+ resolution: {integrity: sha512-eP0ywuoWOaDoiake/6kTJlPJhs+k0qNm4nYRzXLNHj6vh+5M3i9R1epJTdxIPGlhWc4fNRQ7a6XJNCX+/L4FOQ==, tarball: https://registry.npmmirror.com/object-refs/-/object-refs-0.3.0.tgz}
+
+ object-visit@1.0.1:
+ resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==, tarball: https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==, tarball: https://registry.npmmirror.com/object.assign/-/object.assign-4.1.5.tgz}
+ engines: {node: '>= 0.4'}
+
+ object.pick@1.3.0:
+ resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==, tarball: https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ ofetch@1.3.4:
+ resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==, tarball: https://registry.npmmirror.com/ofetch/-/ofetch-1.3.4.tgz}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz}
+ engines: {node: '>=6'}
+
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, tarball: https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz}
+ engines: {node: '>=12'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz}
+ engines: {node: '>= 0.8.0'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz}
+ engines: {node: '>=10'}
+
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==, tarball: https://registry.npmmirror.com/p-limit/-/p-limit-4.0.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz}
+ engines: {node: '>=8'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz}
+ engines: {node: '>=10'}
+
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==, tarball: https://registry.npmmirror.com/p-locate/-/p-locate-6.0.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, tarball: https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz}
+ engines: {node: '>=6'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, tarball: https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz}
+ engines: {node: '>=6'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, tarball: https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz}
+ engines: {node: '>=8'}
+
+ parse5-htmlparser2-tree-adapter@7.0.0:
+ resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==, tarball: https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz}
+
+ parse5@7.1.2:
+ resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, tarball: https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz}
+
+ pascalcase@0.1.1:
+ resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==, tarball: https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==, tarball: https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz}
+ engines: {node: '>=8'}
+
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==, tarball: https://registry.npmmirror.com/path-exists/-/path-exists-5.0.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-intersection@2.2.1:
+ resolution: {integrity: sha512-9u8xvMcSfuOiStv9bPdnRJQhGQXLKurew94n4GPQCdH1nj9QKC9ObbNoIpiRq8skiOBxKkt277PgOoFgAt3/rA==, tarball: https://registry.npmmirror.com/path-intersection/-/path-intersection-2.2.1.tgz}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, tarball: https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz}
+ engines: {node: '>=8'}
+
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, tarball: https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz}
+ engines: {node: '>=12'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz}
+
+ path-scurry@1.10.2:
+ resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==, tarball: https://registry.npmmirror.com/path-scurry/-/path-scurry-1.10.2.tgz}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, tarball: https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz}
+ engines: {node: '>=8'}
+
+ pathe@0.2.0:
+ resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==, tarball: https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, tarball: https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz}
+
+ perfect-debounce@1.0.0:
+ resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==, tarball: https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz}
+
+ picocolors@1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz}
+ engines: {node: '>=8.6'}
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, tarball: https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pinia-plugin-persistedstate@3.2.1:
+ resolution: {integrity: sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==, tarball: https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.1.tgz}
+ peerDependencies:
+ pinia: ^2.0.0
+
+ pinia@2.1.7:
+ resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.1.7.tgz}
+ peerDependencies:
+ '@vue/composition-api': ^1.4.0
+ typescript: '>=4.4.4'
+ vue: ^2.6.14 || ^3.3.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ typescript:
+ optional: true
+
+ pkcs7@1.0.4:
+ resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==, tarball: https://registry.npmmirror.com/pkcs7/-/pkcs7-1.0.4.tgz}
+ hasBin: true
+
+ pkg-types@1.1.0:
+ resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==, tarball: https://registry.npmmirror.com/pkg-types/-/pkg-types-1.1.0.tgz}
+
+ pngjs@5.0.0:
+ resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==, tarball: https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz}
+ engines: {node: '>=10.13.0'}
+
+ posix-character-classes@0.1.1:
+ resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==, tarball: https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==, tarball: https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz}
+ engines: {node: '>= 0.4'}
+
+ postcss-html@1.6.0:
+ resolution: {integrity: sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==, tarball: https://registry.npmmirror.com/postcss-html/-/postcss-html-1.6.0.tgz}
+ engines: {node: ^12 || >=14}
+
+ postcss-prefix-selector@1.16.1:
+ resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==, tarball: https://registry.npmmirror.com/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz}
+ peerDependencies:
+ postcss: '>4 <9'
+
+ postcss-resolve-nested-selector@0.1.1:
+ resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==, tarball: https://registry.npmmirror.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz}
+
+ postcss-safe-parser@6.0.0:
+ resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==, tarball: https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.3.3
+
+ postcss-safe-parser@7.0.0:
+ resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==, tarball: https://registry.npmmirror.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz}
+ engines: {node: '>=18.0'}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-scss@4.0.9:
+ resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==, tarball: https://registry.npmmirror.com/postcss-scss/-/postcss-scss-4.0.9.tgz}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.4.29
+
+ postcss-selector-parser@6.0.16:
+ resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz}
+ engines: {node: '>=4'}
+
+ postcss-sorting@8.0.2:
+ resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==, tarball: https://registry.npmmirror.com/postcss-sorting/-/postcss-sorting-8.0.2.tgz}
+ peerDependencies:
+ postcss: ^8.4.20
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, tarball: https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz}
+
+ postcss@5.2.18:
+ resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==, tarball: https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz}
+ engines: {node: '>=0.12'}
+
+ postcss@8.4.38:
+ resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz}
+ engines: {node: ^10 || ^12 || >=14}
+
+ posthtml-parser@0.2.1:
+ resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==, tarball: https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz}
+
+ posthtml-rename-id@1.0.12:
+ resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==, tarball: https://registry.npmmirror.com/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz}
+
+ posthtml-render@1.4.0:
+ resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==, tarball: https://registry.npmmirror.com/posthtml-render/-/posthtml-render-1.4.0.tgz}
+ engines: {node: '>=10'}
+
+ posthtml-svg-mode@1.0.3:
+ resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==, tarball: https://registry.npmmirror.com/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz}
+
+ posthtml@0.9.2:
+ resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==, tarball: https://registry.npmmirror.com/posthtml/-/posthtml-0.9.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ preact@10.20.2:
+ resolution: {integrity: sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==, tarball: https://registry.npmmirror.com/preact/-/preact-10.20.2.tgz}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, tarball: https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz}
+ engines: {node: '>= 0.8.0'}
+
+ prettier-eslint@16.3.0:
+ resolution: {integrity: sha512-Lh102TIFCr11PJKUMQ2kwNmxGhTsv/KzUg9QYF2Gkw259g/kPgndZDWavk7/ycbRvj2oz4BPZ1gCU8bhfZH/Xg==, tarball: https://registry.npmmirror.com/prettier-eslint/-/prettier-eslint-16.3.0.tgz}
+ engines: {node: '>=16.10.0'}
+ peerDependencies:
+ prettier-plugin-svelte: ^3.0.0
+ svelte-eslint-parser: '*'
+ peerDependenciesMeta:
+ prettier-plugin-svelte:
+ optional: true
+ svelte-eslint-parser:
+ optional: true
+
+ prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, tarball: https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz}
+ engines: {node: '>=6.0.0'}
+
+ prettier@3.2.5:
+ resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==, tarball: https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ prismjs@1.29.0:
+ resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==, tarball: https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz}
+ engines: {node: '>=6'}
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, tarball: https://registry.npmmirror.com/process/-/process-0.11.10.tgz}
+ engines: {node: '>= 0.6.0'}
+
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, tarball: https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz}
+ engines: {node: '>=0.4.0'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, tarball: https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz}
+
+ punycode.js@2.3.1:
+ resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==, tarball: https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz}
+ engines: {node: '>=6'}
+
+ punycode@1.4.1:
+ resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz}
+ engines: {node: '>=6'}
+
+ qrcode@1.5.3:
+ resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==, tarball: https://registry.npmmirror.com/qrcode/-/qrcode-1.5.3.tgz}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ qs@6.12.1:
+ resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==, tarball: https://registry.npmmirror.com/qs/-/qs-6.12.1.tgz}
+ engines: {node: '>=0.6'}
+
+ query-string@4.3.4:
+ resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==, tarball: https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz}
+ engines: {node: '>=0.10.0'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz}
+
+ rd@2.0.1:
+ resolution: {integrity: sha512-/XdKU4UazUZTXFmI0dpABt8jSXPWcEyaGdk340KdHnsEOdkTctlX23aAK7ChQDn39YGNlAJr1M5uvaKt4QnpNw==, tarball: https://registry.npmmirror.com/rd/-/rd-2.0.1.tgz}
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, tarball: https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, tarball: https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
+ engines: {node: '>=8.10.0'}
+
+ regenerate-unicode-properties@10.1.1:
+ resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==, tarball: https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, tarball: https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz}
+
+ regenerator-transform@0.15.2:
+ resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, tarball: https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz}
+
+ regex-not@1.0.2:
+ resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==, tarball: https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ regexp.prototype.flags@1.5.2:
+ resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==, tarball: https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ regexpu-core@5.3.2:
+ resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==, tarball: https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz}
+ engines: {node: '>=4'}
+
+ regjsparser@0.9.1:
+ resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==, tarball: https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz}
+ hasBin: true
+
+ remarkable-katex@1.2.1:
+ resolution: {integrity: sha512-Y1VquJBZnaVsfsVcKW2hmjT+pDL7mp8l5WAVlvuvViltrdok2m1AIKmJv8SsH+mBY84PoMw67t3kTWw1dIm8+g==, tarball: https://registry.npmmirror.com/remarkable-katex/-/remarkable-katex-1.2.1.tgz}
+
+ remarkable@2.0.1:
+ resolution: {integrity: sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==, tarball: https://registry.npmmirror.com/remarkable/-/remarkable-2.0.1.tgz}
+ engines: {node: '>= 6.0.0'}
+ hasBin: true
+
+ repeat-element@1.1.4:
+ resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==, tarball: https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz}
+ engines: {node: '>=0.10.0'}
+
+ repeat-string@1.6.1:
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz}
+ engines: {node: '>=0.10'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, tarball: https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, tarball: https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ require-main-filename@2.0.0:
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, tarball: https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz}
+
+ require-relative@0.8.7:
+ resolution: {integrity: sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==, tarball: https://registry.npmmirror.com/require-relative/-/require-relative-0.8.7.tgz}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz}
+ engines: {node: '>=8'}
+
+ resolve-url@0.2.1:
+ resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==, tarball: https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz}
+ deprecated: https://github.com/lydell/resolve-url#deprecated
+
+ resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz}
+ hasBin: true
+
+ restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, tarball: https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ ret@0.1.15:
+ resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==, tarball: https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz}
+ engines: {node: '>=0.12'}
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.3.1:
+ resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==, tarball: https://registry.npmmirror.com/rfdc/-/rfdc-1.3.1.tgz}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz}
+ hasBin: true
+
+ rimraf@5.0.5:
+ resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==, tarball: https://registry.npmmirror.com/rimraf/-/rimraf-5.0.5.tgz}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ robust-predicates@3.0.2:
+ resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==, tarball: https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.2.tgz}
+
+ rollup-plugin-purge-icons@0.10.0:
+ resolution: {integrity: sha512-GD2ftg4L9G/sagIhtCmBn5vdyzePOisniythubpbywP0Q3ix9rZuDeFvgXTPemOsc22pvH7t22ryYQIl0rwGog==, tarball: https://registry.npmmirror.com/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.10.0.tgz}
+ engines: {node: '>= 12'}
+
+ rollup@2.79.1:
+ resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ rollup@4.17.1:
+ resolution: {integrity: sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==, tarball: https://registry.npmmirror.com/rollup/-/rollup-4.17.1.tgz}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz}
+
+ rust-result@1.0.0:
+ resolution: {integrity: sha512-6cJzSBU+J/RJCF063onnQf0cDUOHs9uZI1oroSGnHOph+CQTIJ5Pp2hK5kEQq1+7yE/EEWfulSNXAQ2jikPthA==, tarball: https://registry.npmmirror.com/rust-result/-/rust-result-1.0.0.tgz}
+
+ rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, tarball: https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz}
+
+ safe-array-concat@1.1.2:
+ resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==, tarball: https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz}
+ engines: {node: '>=0.4'}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz}
+
+ safe-json-parse@4.0.0:
+ resolution: {integrity: sha512-RjZPPHugjK0TOzFrLZ8inw44s9bKox99/0AZW9o/BEQVrJfhI+fIHMErnPyRa89/yRXUUr93q+tiN6zhoVV4wQ==, tarball: https://registry.npmmirror.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz}
+
+ safe-regex-test@1.0.3:
+ resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==, tarball: https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ safe-regex@1.1.0:
+ resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==, tarball: https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz}
+
+ sass@1.75.0:
+ resolution: {integrity: sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==, tarball: https://registry.npmmirror.com/sass/-/sass-1.75.0.tgz}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ sax@1.3.0:
+ resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==, tarball: https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz}
+
+ saxen@8.1.2:
+ resolution: {integrity: sha512-xUOiiFbc3Ow7p8KMxwsGICPx46ZQvy3+qfNVhrkwfz3Vvq45eGt98Ft5IQaA1R/7Tb5B5MKh9fUR9x3c3nDTxw==, tarball: https://registry.npmmirror.com/saxen/-/saxen-8.1.2.tgz}
+
+ scroll-into-view-if-needed@2.2.31:
+ resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==, tarball: https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz}
+
+ scroll-tabs@1.0.1:
+ resolution: {integrity: sha512-W4xjEwNS4QAyQnaJ450vQTcKpbnalBAfsTDV926WrxEMOqjyj2To8uv2d0Cp0oxMdk5TkygtzXmctPNc2zgBcg==, tarball: https://registry.npmmirror.com/scroll-tabs/-/scroll-tabs-1.0.1.tgz}
+
+ scule@1.3.0:
+ resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==, tarball: https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz}
+
+ selection-update@0.1.2:
+ resolution: {integrity: sha512-4jzoJNh7VT2s2tvm/kUSskSw7pD0BVcrrGccbfOMK+3AXLBPz6nIy1yo+pbXgvNoTNII96Pq92+sAY+rF0LUAA==, tarball: https://registry.npmmirror.com/selection-update/-/selection-update-0.1.2.tgz}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz}
+ hasBin: true
+
+ semver@7.6.0:
+ resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==, tarball: https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, tarball: https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, tarball: https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, tarball: https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ set-value@2.0.1:
+ resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==, tarball: https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, tarball: https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz}
+ engines: {node: '>=8'}
+
+ side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, tarball: https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz}
+ engines: {node: '>=14'}
+
+ sirv@2.0.4:
+ resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==, tarball: https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz}
+ engines: {node: '>= 10'}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, tarball: https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz}
+ engines: {node: '>=8'}
+
+ slate-history@0.66.0:
+ resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==, tarball: https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz}
+ peerDependencies:
+ slate: '>=0.65.3'
+
+ slate@0.72.8:
+ resolution: {integrity: sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==, tarball: https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz}
+
+ slice-ansi@4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz}
+ engines: {node: '>=10'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz}
+ engines: {node: '>=12'}
+
+ slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==, tarball: https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.0.tgz}
+ engines: {node: '>=18'}
+
+ snabbdom@3.6.2:
+ resolution: {integrity: sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==, tarball: https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.2.tgz}
+ engines: {node: '>=12.17.0'}
+
+ snapdragon-node@2.1.1:
+ resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==, tarball: https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ snapdragon-util@3.0.1:
+ resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==, tarball: https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ snapdragon@0.8.2:
+ resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==, tarball: https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ sortablejs@1.14.0:
+ resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==, tarball: https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz}
+
+ source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ source-map-resolve@0.5.3:
+ resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==, tarball: https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz}
+ deprecated: See https://github.com/lydell/source-map-resolve#deprecated
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz}
+
+ source-map-url@0.4.1:
+ resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==, tarball: https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz}
+ deprecated: See https://github.com/lydell/source-map-url#deprecated
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ split-string@3.1.0:
+ resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==, tarball: https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==, tarball: https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz}
+ engines: {node: '>= 10.x'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz}
+
+ ssr-window@3.0.0:
+ resolution: {integrity: sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==, tarball: https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz}
+
+ stable@0.1.8:
+ resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, tarball: https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz}
+ deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
+
+ static-extend@0.1.2:
+ resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==, tarball: https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ steady-xml@0.1.0:
+ resolution: {integrity: sha512-5sk17qO2wWRtonTNoBhoKAB35OSsGJOa3+NEa6D+1GS+de+ujDWxnflMkXBrviOfkNrPTUqduAdXhrMJs89nAw==, tarball: https://registry.npmmirror.com/steady-xml/-/steady-xml-0.1.0.tgz}
+ engines: {node: '>=12.0.0'}
+
+ strict-uri-encode@1.1.0:
+ resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==, tarball: https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, tarball: https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz}
+ engines: {node: '>=0.6.19'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, tarball: https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, tarball: https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz}
+ engines: {node: '>=12'}
+
+ string-width@7.1.0:
+ resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==, tarball: https://registry.npmmirror.com/string-width/-/string-width-7.1.0.tgz}
+ engines: {node: '>=18'}
+
+ string.prototype.trim@1.2.9:
+ resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==, tarball: https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.8:
+ resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==, tarball: https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, tarball: https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz}
+ engines: {node: '>= 0.4'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, tarball: https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz}
+
+ strip-ansi@3.0.1:
+ resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz}
+ engines: {node: '>=12'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz}
+ engines: {node: '>=6'}
+
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, tarball: https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz}
+ engines: {node: '>=12'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz}
+ engines: {node: '>=8'}
+
+ strip-literal@1.3.0:
+ resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==, tarball: https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz}
+
+ strnum@1.0.5:
+ resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, tarball: https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz}
+
+ stylelint-config-html@1.1.0:
+ resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==, tarball: https://registry.npmmirror.com/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz}
+ engines: {node: ^12 || >=14}
+ peerDependencies:
+ postcss-html: ^1.0.0
+ stylelint: '>=14.0.0'
+
+ stylelint-config-recommended@14.0.0:
+ resolution: {integrity: sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==, tarball: https://registry.npmmirror.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ stylelint: ^16.0.0
+
+ stylelint-config-standard@36.0.0:
+ resolution: {integrity: sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==, tarball: https://registry.npmmirror.com/stylelint-config-standard/-/stylelint-config-standard-36.0.0.tgz}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ stylelint: ^16.1.0
+
+ stylelint-order@6.0.4:
+ resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==, tarball: https://registry.npmmirror.com/stylelint-order/-/stylelint-order-6.0.4.tgz}
+ peerDependencies:
+ stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1
+
+ stylelint@16.4.0:
+ resolution: {integrity: sha512-uSx7VMuXwLuYcNSIg+0/fFNv0WinsfLAqsVVy7h7p80clKOHiGE8pfY6UjqwylTHiJrRIahTl6a8FPxGezhWoA==, tarball: https://registry.npmmirror.com/stylelint/-/stylelint-16.4.0.tgz}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+
+ supports-color@2.0.0:
+ resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz}
+ engines: {node: '>=0.8.0'}
+
+ supports-color@3.2.3:
+ resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz}
+ engines: {node: '>=0.8.0'}
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz}
+ engines: {node: '>=8'}
+
+ supports-hyperlinks@3.0.0:
+ resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==, tarball: https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz}
+ engines: {node: '>=14.18'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz}
+ engines: {node: '>= 0.4'}
+
+ svg-baker@1.7.0:
+ resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==, tarball: https://registry.npmmirror.com/svg-baker/-/svg-baker-1.7.0.tgz}
+
+ svg-tags@1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==, tarball: https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz}
+
+ svg.js@2.7.1:
+ resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==, tarball: https://registry.npmmirror.com/svg.js/-/svg.js-2.7.1.tgz}
+
+ svgo@2.8.0:
+ resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==, tarball: https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ synckit@0.8.8:
+ resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==, tarball: https://registry.npmmirror.com/synckit/-/synckit-0.8.8.tgz}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ systemjs@6.15.1:
+ resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==, tarball: https://registry.npmmirror.com/systemjs/-/systemjs-6.15.1.tgz}
+
+ table@6.8.2:
+ resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==, tarball: https://registry.npmmirror.com/table/-/table-6.8.2.tgz}
+ engines: {node: '>=10.0.0'}
+
+ terser@5.30.4:
+ resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==, tarball: https://registry.npmmirror.com/terser/-/terser-5.30.4.tgz}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ text-extensions@2.4.0:
+ resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==, tarball: https://registry.npmmirror.com/text-extensions/-/text-extensions-2.4.0.tgz}
+ engines: {node: '>=8'}
+
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, tarball: https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, tarball: https://registry.npmmirror.com/through/-/through-2.3.8.tgz}
+
+ tiny-svg@2.2.4:
+ resolution: {integrity: sha512-NOi39lBknf4UdDEahNkbEAJnzhu1ZcN2j75IS2vLRmIhsfxdZpTChfLKBcN1ShplVmPIXJAIafk6YY5/Aa80lQ==, tarball: https://registry.npmmirror.com/tiny-svg/-/tiny-svg-2.2.4.tgz}
+
+ tiny-svg@3.0.1:
+ resolution: {integrity: sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==, tarball: https://registry.npmmirror.com/tiny-svg/-/tiny-svg-3.0.1.tgz}
+
+ tiny-warning@1.0.3:
+ resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==, tarball: https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz}
+
+ to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
+ engines: {node: '>=4'}
+
+ to-object-path@0.3.0:
+ resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==, tarball: https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ to-regex-range@2.1.1:
+ resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz}
+ engines: {node: '>=8.0'}
+
+ to-regex@3.0.2:
+ resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==, tarball: https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz}
+ engines: {node: '>=0.10.0'}
+
+ totalist@3.0.1:
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, tarball: https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz}
+ engines: {node: '>=6'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, tarball: https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz}
+
+ traverse@0.6.9:
+ resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==, tarball: https://registry.npmmirror.com/traverse/-/traverse-0.6.9.tgz}
+ engines: {node: '>= 0.4'}
+
+ ts-api-utils@1.3.0:
+ resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==, tarball: https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+
+ tslib@2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, tarball: https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz}
+ engines: {node: '>= 0.8.0'}
+
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, tarball: https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz}
+ engines: {node: '>=10'}
+
+ type@2.7.2:
+ resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==, tarball: https://registry.npmmirror.com/type/-/type-2.7.2.tgz}
+
+ typed-array-buffer@1.0.2:
+ resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==, tarball: https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.1:
+ resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==, tarball: https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.2:
+ resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==, tarball: https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.6:
+ resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==, tarball: https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.6.tgz}
+ engines: {node: '>= 0.4'}
+
+ typedarray.prototype.slice@1.0.3:
+ resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==, tarball: https://registry.npmmirror.com/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz}
+ engines: {node: '>= 0.4'}
+
+ typescript@5.3.3:
+ resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==, tarball: https://registry.npmmirror.com/typescript/-/typescript-5.3.3.tgz}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ uc.micro@2.1.0:
+ resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==, tarball: https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz}
+
+ ufo@1.5.3:
+ resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==, tarball: https://registry.npmmirror.com/ufo/-/ufo-1.5.3.tgz}
+
+ unbox-primitive@1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, tarball: https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz}
+
+ unconfig@0.3.13:
+ resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==, tarball: https://registry.npmmirror.com/unconfig/-/unconfig-0.3.13.tgz}
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, tarball: https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz}
+
+ unicode-canonical-property-names-ecmascript@2.0.0:
+ resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, tarball: https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, tarball: https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz}
+ engines: {node: '>=4'}
+
+ unicode-match-property-value-ecmascript@2.1.0:
+ resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==, tarball: https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz}
+ engines: {node: '>=4'}
+
+ unicode-property-aliases-ecmascript@2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, tarball: https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz}
+ engines: {node: '>=4'}
+
+ unicorn-magic@0.1.0:
+ resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==, tarball: https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz}
+ engines: {node: '>=18'}
+
+ unimport@3.7.1:
+ resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==, tarball: https://registry.npmmirror.com/unimport/-/unimport-3.7.1.tgz}
+
+ union-value@1.0.1:
+ resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==, tarball: https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz}
+ engines: {node: '>= 10.0.0'}
+
+ unocss@0.58.9:
+ resolution: {integrity: sha512-aqANXXP0RrtN4kSaTLn/7I6wh8o45LUdVgPzGu7Fan2DfH2+wpIs6frlnlHlOymnb+52dp6kXluQinddaUKW1A==, tarball: https://registry.npmmirror.com/unocss/-/unocss-0.58.9.tgz}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@unocss/webpack': 0.58.9
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
+ peerDependenciesMeta:
+ '@unocss/webpack':
+ optional: true
+ vite:
+ optional: true
+
+ unplugin-auto-import@0.16.7:
+ resolution: {integrity: sha512-w7XmnRlchq6YUFJVFGSvG1T/6j8GrdYN6Em9Wf0Ye+HXgD/22kont+WnuCAA0UaUoxtuvRR1u/mXKy63g/hfqQ==, tarball: https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.16.7.tgz}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@nuxt/kit': ^3.2.2
+ '@vueuse/core': '*'
+ peerDependenciesMeta:
+ '@nuxt/kit':
+ optional: true
+ '@vueuse/core':
+ optional: true
+
+ unplugin-element-plus@0.8.0:
+ resolution: {integrity: sha512-jByUGY3FG2B8RJKFryqxx4eNtSTj+Hjlo8edcOdJymewndDQjThZ1pRUQHRjQsbKhTV2jEctJV7t7RJ405UL4g==, tarball: https://registry.npmmirror.com/unplugin-element-plus/-/unplugin-element-plus-0.8.0.tgz}
+ engines: {node: '>=14.19.0'}
+
+ unplugin-vue-components@0.25.2:
+ resolution: {integrity: sha512-OVmLFqILH6w+eM8fyt/d/eoJT9A6WO51NZLf1vC5c1FZ4rmq2bbGxTy8WP2Jm7xwFdukaIdv819+UI7RClPyCA==, tarball: https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.25.2.tgz}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/parser': ^7.15.8
+ '@nuxt/kit': ^3.2.2
+ vue: 2 || 3
+ peerDependenciesMeta:
+ '@babel/parser':
+ optional: true
+ '@nuxt/kit':
+ optional: true
+
+ unplugin@1.10.1:
+ resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==, tarball: https://registry.npmmirror.com/unplugin/-/unplugin-1.10.1.tgz}
+ engines: {node: '>=14.0.0'}
+
+ unset-value@1.0.0:
+ resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==, tarball: https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz}
+ engines: {node: '>=0.10.0'}
+
+ update-browserslist-db@1.0.13:
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz}
+
+ urix@0.1.0:
+ resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==, tarball: https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz}
+ deprecated: Please see https://github.com/lydell/urix#deprecated
+
+ url-toolkit@2.2.5:
+ resolution: {integrity: sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg==, tarball: https://registry.npmmirror.com/url-toolkit/-/url-toolkit-2.2.5.tgz}
+
+ url@0.11.3:
+ resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==, tarball: https://registry.npmmirror.com/url/-/url-0.11.3.tgz}
+
+ use@3.1.1:
+ resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==, tarball: https://registry.npmmirror.com/use/-/use-3.1.1.tgz}
+ engines: {node: '>=0.10.0'}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz}
+
+ utility-types@3.11.0:
+ resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
+ engines: {node: '>= 4'}
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, tarball: https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz}
+ hasBin: true
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, tarball: https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz}
+ engines: {node: '>= 0.8'}
+
+ video.js@7.21.5:
+ resolution: {integrity: sha512-WRq86tXZKrThA9mK+IR+v4tIQVVvnb5LhvL71fD2AX7TxVOPdaeK1X/wyuUruBqWaOG3w2sZXoMY6HF2Jlo9qA==, tarball: https://registry.npmmirror.com/video.js/-/video.js-7.21.5.tgz}
+
+ videojs-font@3.2.0:
+ resolution: {integrity: sha512-g8vHMKK2/JGorSfqAZQUmYYNnXmfec4MLhwtEFS+mMs2IDY398GLysy6BH6K+aS1KMNu/xWZ8Sue/X/mdQPliA==, tarball: https://registry.npmmirror.com/videojs-font/-/videojs-font-3.2.0.tgz}
+
+ videojs-vtt.js@0.15.5:
+ resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==, tarball: https://registry.npmmirror.com/videojs-vtt.js/-/videojs-vtt.js-0.15.5.tgz}
+
+ vite-plugin-compression@0.5.1:
+ resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==, tarball: https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz}
+ peerDependencies:
+ vite: '>=2.0.0'
+
+ vite-plugin-ejs@1.7.0:
+ resolution: {integrity: sha512-JNP3zQDC4mSbfoJ3G73s5mmZITD8NGjUmLkq4swxyahy/W0xuokK9U9IJGXw7KCggq6UucT6hJ0p+tQrNtqTZw==, tarball: https://registry.npmmirror.com/vite-plugin-ejs/-/vite-plugin-ejs-1.7.0.tgz}
+ peerDependencies:
+ vite: '>=5.0.0'
+
+ vite-plugin-eslint@1.8.1:
+ resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==, tarball: https://registry.npmmirror.com/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz}
+ peerDependencies:
+ eslint: '>=7'
+ vite: '>=2'
+
+ vite-plugin-progress@0.0.7:
+ resolution: {integrity: sha512-zyvKdcc/X+6hnw3J1HVV1TKrlFKC4Rh8GnDnWG/2qhRXjqytTcM++xZ+SAPnoDsSyWl8O93ymK0wZRgHAoglEQ==, tarball: https://registry.npmmirror.com/vite-plugin-progress/-/vite-plugin-progress-0.0.7.tgz}
+ engines: {node: '>=14', pnpm: '>=7.0.0'}
+ peerDependencies:
+ vite: '>2.0.0-0'
+
+ vite-plugin-purge-icons@0.10.0:
+ resolution: {integrity: sha512-4fMJKQuBu9lAPJWjqGEytRaxty1pP9bWgQLA68dwbbaCXu6NBrOUb/3kMaUc7TP09kerEk+qTriCk05OZXpjwA==, tarball: https://registry.npmmirror.com/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.10.0.tgz}
+ engines: {node: '>= 12'}
+ peerDependencies:
+ vite: '>=2'
+
+ vite-plugin-svg-icons@2.0.1:
+ resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==, tarball: https://registry.npmmirror.com/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz}
+ peerDependencies:
+ vite: '>=2.0.0'
+
+ vite-plugin-top-level-await@1.4.1:
+ resolution: {integrity: sha512-hogbZ6yT7+AqBaV6lK9JRNvJDn4/IJvHLu6ET06arNfo0t2IsyCaon7el9Xa8OumH+ESuq//SDf8xscZFE0rWw==, tarball: https://registry.npmmirror.com/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.4.1.tgz}
+ peerDependencies:
+ vite: '>=2.8'
+
+ vite@5.1.4:
+ resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==, tarball: https://registry.npmmirror.com/vite/-/vite-5.1.4.tgz}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-demi@0.14.7:
+ resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-dompurify-html@4.1.4:
+ resolution: {integrity: sha512-K0XDSZA4dmMMvAgW8yaCx1kAYQldmgXeHJaLPS0mlSKOu8B+onE06X4KfB5LGyX4jR3rlVosyWJczRBzR0sZ/g==, tarball: https://registry.npmmirror.com/vue-dompurify-html/-/vue-dompurify-html-4.1.4.tgz}
+ peerDependencies:
+ vue: ^2.7.0 || ^3.0.0
+
+ vue-eslint-parser@9.4.2:
+ resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==, tarball: https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+
+ vue-i18n@9.10.2:
+ resolution: {integrity: sha512-ECJ8RIFd+3c1d3m1pctQ6ywG5Yj8Efy1oYoAKQ9neRdkLbuKLVeW4gaY5HPkD/9ssf1pOnUrmIFjx2/gkGxmEw==, tarball: https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.10.2.tgz}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ vue: ^3.0.0
+
+ vue-router@4.3.2:
+ resolution: {integrity: sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.3.2.tgz}
+ peerDependencies:
+ vue: ^3.2.0
+
+ vue-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==, tarball: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz}
+
+ vue-tsc@1.8.27:
+ resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==, tarball: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz}
+ hasBin: true
+ peerDependencies:
+ typescript: '*'
+
+ vue-types@5.1.1:
+ resolution: {integrity: sha512-FMY/JCLWePXgGIcMDqYdJsQm1G0CDxEjq6W0+tZMJZlX37q/61eSGSIa/XFRwa9T7kkKXuxxl94/2kgxyWQqKw==, tarball: https://registry.npmmirror.com/vue-types/-/vue-types-5.1.1.tgz}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ vue: ^2.0.0 || ^3.0.0
+ peerDependenciesMeta:
+ vue:
+ optional: true
+
+ vue@3.4.21:
+ resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==, tarball: https://registry.npmmirror.com/vue/-/vue-3.4.21.tgz}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ vuedraggable@4.1.0:
+ resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==, tarball: https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz}
+ peerDependencies:
+ vue: ^3.0.1
+
+ vxe-pc-ui@4.1.30:
+ resolution: {integrity: sha512-saJBZNUBFcmbG4TVUAkI4pMri0uTw5l2A6oecRVBSKIFAdGzZhLyjnFGYWbBMIjN5cq8haMSwKDvWfL2+0ZjCA==}
+
+ vxe-table@4.7.80:
+ resolution: {integrity: sha512-Ur5khOnqvVPcyi6EZlqRCuStHUHczEC9QqUSc2MeaDCchUlIH+drAW1IYowmuIprt8q242hLNHhDi0TWqMrIZQ==}
+
+ wangeditor@4.7.15:
+ resolution: {integrity: sha512-aPTdREd8BxXVyJ5MI+LU83FQ7u1EPd341iXIorRNYSOvoimNoZ4nPg+yn3FGbB93/owEa6buLw8wdhYnMCJQLg==, tarball: https://registry.npmmirror.com/wangeditor/-/wangeditor-4.7.15.tgz}
+
+ web-storage-cache@1.1.1:
+ resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==, tarball: https://registry.npmmirror.com/web-storage-cache/-/web-storage-cache-1.1.1.tgz}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz}
+
+ webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz}
+ engines: {node: '>=10.13.0'}
+
+ webpack-virtual-modules@0.6.1:
+ resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==, tarball: https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz}
+
+ which-boxed-primitive@1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, tarball: https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz}
+
+ which-module@2.0.1:
+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, tarball: https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz}
+
+ which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==, tarball: https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.15.tgz}
+ engines: {node: '>= 0.4'}
+
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, tarball: https://registry.npmmirror.com/which/-/which-1.3.1.tgz}
+ hasBin: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, tarball: https://registry.npmmirror.com/which/-/which-2.0.2.tgz}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wildcard@1.1.2:
+ resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==, tarball: https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz}
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, tarball: https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz}
+ engines: {node: '>=8'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz}
+ engines: {node: '>=18'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz}
+
+ write-file-atomic@5.0.1:
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ xe-utils@3.5.30:
+ resolution: {integrity: sha512-5Ez6JUANpMakduiTLxrNObzqMebnM4697KvHW5okedkUjXvYgGvkbg0tABTkvwDW/Pb09v7vT68dzBOeAuOu0g==}
+
+ xml-js@1.6.11:
+ resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==, tarball: https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz}
+ hasBin: true
+
+ xml-name-validator@4.0.0:
+ resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==, tarball: https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz}
+ engines: {node: '>=12'}
+
+ y18n@4.0.3:
+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, tarball: https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, tarball: https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, tarball: https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}
+
+ yaml-eslint-parser@1.2.2:
+ resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==, tarball: https://registry.npmmirror.com/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz}
+ engines: {node: ^14.17.0 || >=16.0.0}
+
+ yaml@2.3.4:
+ resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==, tarball: https://registry.npmmirror.com/yaml/-/yaml-2.3.4.tgz}
+ engines: {node: '>= 14'}
+
+ yaml@2.4.2:
+ resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==, tarball: https://registry.npmmirror.com/yaml/-/yaml-2.4.2.tgz}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+ yargs-parser@18.1.3:
+ resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz}
+ engines: {node: '>=6'}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, tarball: https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz}
+ engines: {node: '>=12'}
+
+ yargs@15.4.1:
+ resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, tarball: https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz}
+ engines: {node: '>=8'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, tarball: https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz}
+ engines: {node: '>=10'}
+
+ yocto-queue@1.0.0:
+ resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==, tarball: https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.0.0.tgz}
+ engines: {node: '>=12.20'}
+
+ zrender@5.5.0:
+ resolution: {integrity: sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz}
+
+snapshots:
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@antfu/install-pkg@0.1.1':
+ dependencies:
+ execa: 5.1.1
+ find-up: 5.0.0
+
+ '@antfu/utils@0.7.7': {}
+
+ '@antv/x6-common@2.0.17':
+ dependencies:
+ lodash-es: 4.17.21
+ utility-types: 3.11.0
+
+ '@antv/x6-geometry@2.0.5': {}
+
+ '@antv/x6-vue-shape@2.1.2(@antv/x6@2.18.1)(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@antv/x6': 2.18.1
+ vue: 3.4.21(typescript@5.3.3)
+ vue-demi: 0.14.10(vue@3.4.21(typescript@5.3.3))
+
+ '@antv/x6@2.18.1':
+ dependencies:
+ '@antv/x6-common': 2.0.17
+ '@antv/x6-geometry': 2.0.5
+ utility-types: 3.11.0
+
+ '@babel/code-frame@7.24.2':
+ dependencies:
+ '@babel/highlight': 7.24.2
+ picocolors: 1.0.0
+
+ '@babel/compat-data@7.24.4': {}
+
+ '@babel/core@7.24.4':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.24.2
+ '@babel/generator': 7.24.4
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4)
+ '@babel/helpers': 7.24.4
+ '@babel/parser': 7.24.4
+ '@babel/template': 7.24.0
+ '@babel/traverse': 7.24.1
+ '@babel/types': 7.24.0
+ convert-source-map: 2.0.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.24.4':
+ dependencies:
+ '@babel/types': 7.24.0
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 2.5.2
+
+ '@babel/helper-annotate-as-pure@7.22.5':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-compilation-targets@7.23.6':
+ dependencies:
+ '@babel/compat-data': 7.24.4
+ '@babel/helper-validator-option': 7.23.5
+ browserslist: 4.23.0
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ semver: 6.3.1
+
+ '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-annotate-as-pure': 7.22.5
+ regexpu-core: 5.3.2
+ semver: 6.3.1
+
+ '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-plugin-utils': 7.24.0
+ debug: 4.3.4
+ lodash.debounce: 4.0.8
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-environment-visitor@7.22.20': {}
+
+ '@babel/helper-function-name@7.23.0':
+ dependencies:
+ '@babel/template': 7.24.0
+ '@babel/types': 7.24.0
+
+ '@babel/helper-hoist-variables@7.22.5':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-member-expression-to-functions@7.23.0':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-module-imports@7.22.15':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-module-imports@7.24.3':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-module-imports': 7.24.3
+ '@babel/helper-simple-access': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/helper-validator-identifier': 7.22.20
+
+ '@babel/helper-optimise-call-expression@7.22.5':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-plugin-utils@7.24.0': {}
+
+ '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-wrap-function': 7.22.20
+
+ '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+
+ '@babel/helper-simple-access@7.22.5':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.22.5':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-split-export-declaration@7.22.6':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/helper-string-parser@7.24.1': {}
+
+ '@babel/helper-validator-identifier@7.22.20': {}
+
+ '@babel/helper-validator-option@7.23.5': {}
+
+ '@babel/helper-wrap-function@7.22.20':
+ dependencies:
+ '@babel/helper-function-name': 7.23.0
+ '@babel/template': 7.24.0
+ '@babel/types': 7.24.0
+
+ '@babel/helpers@7.24.4':
+ dependencies:
+ '@babel/template': 7.24.0
+ '@babel/traverse': 7.24.1
+ '@babel/types': 7.24.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/highlight@7.24.2':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.22.20
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ picocolors: 1.0.0
+
+ '@babel/parser@7.24.4':
+ dependencies:
+ '@babel/types': 7.24.0
+
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4)
+
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-module-imports': 7.24.3
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4)
+ '@babel/helper-split-export-declaration': 7.22.6
+ globals: 11.12.0
+
+ '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/template': 7.24.0
+
+ '@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+
+ '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-simple-access': 7.22.5
+
+ '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-validator-identifier': 7.22.20
+
+ '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ regenerator-transform: 0.15.2
+
+ '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+
+ '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4)
+
+ '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4)
+ '@babel/helper-plugin-utils': 7.24.0
+
+ '@babel/preset-env@7.24.4(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/compat-data': 7.24.4
+ '@babel/core': 7.24.4
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4)
+ '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4)
+ '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4)
+ '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4)
+ '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4)
+ '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4)
+ babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.4)
+ babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4)
+ babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.4)
+ core-js-compat: 3.37.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/types': 7.24.0
+ esutils: 2.0.3
+
+ '@babel/preset-typescript@7.24.1(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4)
+ '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4)
+
+ '@babel/regjsgen@0.8.0': {}
+
+ '@babel/runtime-corejs3@7.24.4':
+ dependencies:
+ core-js-pure: 3.37.0
+ regenerator-runtime: 0.14.1
+
+ '@babel/runtime@7.24.4':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@babel/template@7.24.0':
+ dependencies:
+ '@babel/code-frame': 7.24.2
+ '@babel/parser': 7.24.4
+ '@babel/types': 7.24.0
+
+ '@babel/traverse@7.24.1':
+ dependencies:
+ '@babel/code-frame': 7.24.2
+ '@babel/generator': 7.24.4
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/parser': 7.24.4
+ '@babel/types': 7.24.0
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.24.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.24.1
+ '@babel/helper-validator-identifier': 7.22.20
+ to-fast-properties: 2.0.0
+
+ '@bpmn-io/diagram-js-ui@0.2.3':
+ dependencies:
+ htm: 3.1.1
+ preact: 10.20.2
+
+ '@bpmn-io/element-templates-validator@0.2.0':
+ dependencies:
+ '@camunda/element-templates-json-schema': 0.4.0
+ json-source-map: 0.6.1
+ min-dash: 3.8.1
+
+ '@bpmn-io/extract-process-variables@0.4.5':
+ dependencies:
+ min-dash: 3.8.1
+
+ '@camunda/element-templates-json-schema@0.4.0': {}
+
+ '@commitlint/cli@19.3.0(@types/node@20.12.7)(typescript@5.3.3)':
+ dependencies:
+ '@commitlint/format': 19.3.0
+ '@commitlint/lint': 19.2.2
+ '@commitlint/load': 19.2.0(@types/node@20.12.7)(typescript@5.3.3)
+ '@commitlint/read': 19.2.1
+ '@commitlint/types': 19.0.3
+ execa: 8.0.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ '@commitlint/config-conventional@19.2.2':
+ dependencies:
+ '@commitlint/types': 19.0.3
+ conventional-changelog-conventionalcommits: 7.0.2
+
+ '@commitlint/config-validator@19.0.3':
+ dependencies:
+ '@commitlint/types': 19.0.3
+ ajv: 8.12.0
+
+ '@commitlint/ensure@19.0.3':
+ dependencies:
+ '@commitlint/types': 19.0.3
+ lodash.camelcase: 4.3.0
+ lodash.kebabcase: 4.1.1
+ lodash.snakecase: 4.1.1
+ lodash.startcase: 4.4.0
+ lodash.upperfirst: 4.3.1
+
+ '@commitlint/execute-rule@19.0.0': {}
+
+ '@commitlint/format@19.3.0':
+ dependencies:
+ '@commitlint/types': 19.0.3
+ chalk: 5.3.0
+
+ '@commitlint/is-ignored@19.2.2':
+ dependencies:
+ '@commitlint/types': 19.0.3
+ semver: 7.6.0
+
+ '@commitlint/lint@19.2.2':
+ dependencies:
+ '@commitlint/is-ignored': 19.2.2
+ '@commitlint/parse': 19.0.3
+ '@commitlint/rules': 19.0.3
+ '@commitlint/types': 19.0.3
+
+ '@commitlint/load@19.2.0(@types/node@20.12.7)(typescript@5.3.3)':
+ dependencies:
+ '@commitlint/config-validator': 19.0.3
+ '@commitlint/execute-rule': 19.0.0
+ '@commitlint/resolve-extends': 19.1.0
+ '@commitlint/types': 19.0.3
+ chalk: 5.3.0
+ cosmiconfig: 9.0.0(typescript@5.3.3)
+ cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.7)(cosmiconfig@9.0.0(typescript@5.3.3))(typescript@5.3.3)
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ lodash.uniq: 4.5.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ '@commitlint/message@19.0.0': {}
+
+ '@commitlint/parse@19.0.3':
+ dependencies:
+ '@commitlint/types': 19.0.3
+ conventional-changelog-angular: 7.0.0
+ conventional-commits-parser: 5.0.0
+
+ '@commitlint/read@19.2.1':
+ dependencies:
+ '@commitlint/top-level': 19.0.0
+ '@commitlint/types': 19.0.3
+ execa: 8.0.1
+ git-raw-commits: 4.0.0
+ minimist: 1.2.8
+
+ '@commitlint/resolve-extends@19.1.0':
+ dependencies:
+ '@commitlint/config-validator': 19.0.3
+ '@commitlint/types': 19.0.3
+ global-directory: 4.0.1
+ import-meta-resolve: 4.0.0
+ lodash.mergewith: 4.6.2
+ resolve-from: 5.0.0
+
+ '@commitlint/rules@19.0.3':
+ dependencies:
+ '@commitlint/ensure': 19.0.3
+ '@commitlint/message': 19.0.0
+ '@commitlint/to-lines': 19.0.0
+ '@commitlint/types': 19.0.3
+ execa: 8.0.1
+
+ '@commitlint/to-lines@19.0.0': {}
+
+ '@commitlint/top-level@19.0.0':
+ dependencies:
+ find-up: 7.0.0
+
+ '@commitlint/types@19.0.3':
+ dependencies:
+ '@types/conventional-commits-parser': 5.0.0
+ chalk: 5.3.0
+
+ '@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4)':
+ dependencies:
+ '@csstools/css-tokenizer': 2.2.4
+
+ '@csstools/css-tokenizer@2.2.4': {}
+
+ '@csstools/media-query-list-parser@2.1.9(@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4))(@csstools/css-tokenizer@2.2.4)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+
+ '@csstools/selector-specificity@3.0.3(postcss-selector-parser@6.0.16)':
+ dependencies:
+ postcss-selector-parser: 6.0.16
+
+ '@ctrl/tinycolor@3.6.1': {}
+
+ '@dual-bundle/import-meta-resolve@4.0.0': {}
+
+ '@element-plus/icons-vue@2.3.1(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ vue: 3.4.21(typescript@5.3.3)
+
+ '@esbuild/aix-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm@0.19.12':
+ optional: true
+
+ '@esbuild/android-x64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.19.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.19.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.19.12':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
+ dependencies:
+ eslint: 8.57.0
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.10.0': {}
+
+ '@eslint/eslintrc@2.1.4':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@8.57.0': {}
+
+ '@floating-ui/core@1.6.1':
+ dependencies:
+ '@floating-ui/utils': 0.2.2
+
+ '@floating-ui/dom@1.6.4':
+ dependencies:
+ '@floating-ui/core': 1.6.1
+ '@floating-ui/utils': 0.2.2
+
+ '@floating-ui/utils@0.2.2': {}
+
+ '@form-create/component-elm-checkbox@3.1.29':
+ dependencies:
+ '@form-create/utils': 3.1.29
+
+ '@form-create/component-elm-frame@3.1.29':
+ dependencies:
+ '@form-create/utils': 3.1.29
+
+ '@form-create/component-elm-group@3.1.29':
+ dependencies:
+ '@form-create/utils': 3.1.29
+
+ '@form-create/component-elm-radio@3.1.29':
+ dependencies:
+ '@form-create/utils': 3.1.29
+
+ '@form-create/component-elm-select@3.1.29':
+ dependencies:
+ '@form-create/utils': 3.1.29
+
+ '@form-create/component-elm-tree@3.1.29':
+ dependencies:
+ '@form-create/utils': 3.1.29
+
+ '@form-create/component-elm-upload@3.1.29':
+ dependencies:
+ '@form-create/utils': 3.1.29
+
+ '@form-create/component-subform@3.1.5': {}
+
+ '@form-create/component-wangeditor@3.1.20':
+ dependencies:
+ wangeditor: 4.7.15
+
+ '@form-create/core@3.1.29(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@form-create/utils': 3.1.29
+ vue: 3.4.21(typescript@5.3.3)
+
+ '@form-create/designer@3.1.5(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@form-create/component-wangeditor': 3.1.20
+ '@form-create/element-ui': 3.1.29(vue@3.4.21(typescript@5.3.3))
+ '@form-create/utils': 3.1.29
+ vuedraggable: 4.1.0(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - vue
+
+ '@form-create/element-ui@3.1.29(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@form-create/component-elm-checkbox': 3.1.29
+ '@form-create/component-elm-frame': 3.1.29
+ '@form-create/component-elm-group': 3.1.29
+ '@form-create/component-elm-radio': 3.1.29
+ '@form-create/component-elm-select': 3.1.29
+ '@form-create/component-elm-tree': 3.1.29
+ '@form-create/component-elm-upload': 3.1.29
+ '@form-create/component-subform': 3.1.5
+ '@form-create/core': 3.1.29(vue@3.4.21(typescript@5.3.3))
+ '@form-create/utils': 3.1.29
+ vue: 3.4.21(typescript@5.3.3)
+
+ '@form-create/utils@3.1.29': {}
+
+ '@gera2ld/jsx-dom@2.2.2':
+ dependencies:
+ '@babel/runtime': 7.24.4
+
+ '@humanwhocodes/config-array@0.11.14':
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.3
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/object-schema@2.0.3': {}
+
+ '@iconify/iconify@2.1.2':
+ dependencies:
+ cross-fetch: 3.1.8
+ transitivePeerDependencies:
+ - encoding
+
+ '@iconify/iconify@3.1.1':
+ dependencies:
+ '@iconify/types': 2.0.0
+
+ '@iconify/json@2.2.205':
+ dependencies:
+ '@iconify/types': 2.0.0
+ pathe: 1.1.2
+
+ '@iconify/types@2.0.0': {}
+
+ '@iconify/utils@2.1.23':
+ dependencies:
+ '@antfu/install-pkg': 0.1.1
+ '@antfu/utils': 0.7.7
+ '@iconify/types': 2.0.0
+ debug: 4.3.4
+ kolorist: 1.8.0
+ local-pkg: 0.5.0
+ mlly: 1.6.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@intlify/bundle-utils@7.5.1(vue-i18n@9.10.2(vue@3.4.21(typescript@5.3.3)))':
+ dependencies:
+ '@intlify/message-compiler': 9.13.1
+ '@intlify/shared': 9.13.1
+ acorn: 8.11.3
+ escodegen: 2.1.0
+ estree-walker: 2.0.2
+ jsonc-eslint-parser: 2.4.0
+ magic-string: 0.30.10
+ mlly: 1.6.1
+ source-map-js: 1.2.0
+ yaml-eslint-parser: 1.2.2
+ optionalDependencies:
+ vue-i18n: 9.10.2(vue@3.4.21(typescript@5.3.3))
+
+ '@intlify/core-base@9.10.2':
+ dependencies:
+ '@intlify/message-compiler': 9.10.2
+ '@intlify/shared': 9.10.2
+
+ '@intlify/message-compiler@9.10.2':
+ dependencies:
+ '@intlify/shared': 9.10.2
+ source-map-js: 1.2.0
+
+ '@intlify/message-compiler@9.13.1':
+ dependencies:
+ '@intlify/shared': 9.13.1
+ source-map-js: 1.2.0
+
+ '@intlify/shared@9.10.2': {}
+
+ '@intlify/shared@9.13.1': {}
+
+ '@intlify/unplugin-vue-i18n@2.0.0(rollup@4.17.1)(vue-i18n@9.10.2(vue@3.4.21(typescript@5.3.3)))':
+ dependencies:
+ '@intlify/bundle-utils': 7.5.1(vue-i18n@9.10.2(vue@3.4.21(typescript@5.3.3)))
+ '@intlify/shared': 9.13.1
+ '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+ '@vue/compiler-sfc': 3.4.26
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ js-yaml: 4.1.0
+ json5: 2.2.3
+ pathe: 1.1.2
+ picocolors: 1.0.0
+ source-map-js: 1.2.0
+ unplugin: 1.10.1
+ optionalDependencies:
+ vue-i18n: 9.10.2(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/source-map@0.3.6':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@microsoft/fetch-event-source@2.0.1': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@pkgr/core@0.1.1': {}
+
+ '@polka/url@1.0.0-next.25': {}
+
+ '@purge-icons/core@0.10.0':
+ dependencies:
+ '@iconify/iconify': 2.1.2
+ axios: 0.26.1(debug@4.3.4)
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ fs-extra: 10.1.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ '@purge-icons/generated@0.10.0':
+ dependencies:
+ '@iconify/iconify': 3.1.1
+
+ '@purge-icons/generated@0.9.0':
+ dependencies:
+ '@iconify/iconify': 3.1.1
+
+ '@rollup/plugin-virtual@3.0.2(rollup@4.17.1)':
+ optionalDependencies:
+ rollup: 4.17.1
+
+ '@rollup/pluginutils@4.2.1':
+ dependencies:
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+
+ '@rollup/pluginutils@5.1.0(rollup@4.17.1)':
+ dependencies:
+ '@types/estree': 1.0.5
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ optionalDependencies:
+ rollup: 4.17.1
+
+ '@rollup/rollup-android-arm-eabi@4.17.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.17.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.17.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.17.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.17.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.17.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.17.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.17.1':
+ optional: true
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@swc/core-darwin-arm64@1.4.17':
+ optional: true
+
+ '@swc/core-darwin-x64@1.4.17':
+ optional: true
+
+ '@swc/core-linux-arm-gnueabihf@1.4.17':
+ optional: true
+
+ '@swc/core-linux-arm64-gnu@1.4.17':
+ optional: true
+
+ '@swc/core-linux-arm64-musl@1.4.17':
+ optional: true
+
+ '@swc/core-linux-x64-gnu@1.4.17':
+ optional: true
+
+ '@swc/core-linux-x64-musl@1.4.17':
+ optional: true
+
+ '@swc/core-win32-arm64-msvc@1.4.17':
+ optional: true
+
+ '@swc/core-win32-ia32-msvc@1.4.17':
+ optional: true
+
+ '@swc/core-win32-x64-msvc@1.4.17':
+ optional: true
+
+ '@swc/core@1.4.17':
+ dependencies:
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.6
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.4.17
+ '@swc/core-darwin-x64': 1.4.17
+ '@swc/core-linux-arm-gnueabihf': 1.4.17
+ '@swc/core-linux-arm64-gnu': 1.4.17
+ '@swc/core-linux-arm64-musl': 1.4.17
+ '@swc/core-linux-x64-gnu': 1.4.17
+ '@swc/core-linux-x64-musl': 1.4.17
+ '@swc/core-win32-arm64-msvc': 1.4.17
+ '@swc/core-win32-ia32-msvc': 1.4.17
+ '@swc/core-win32-x64-msvc': 1.4.17
+
+ '@swc/counter@0.1.3': {}
+
+ '@swc/types@0.1.6':
+ dependencies:
+ '@swc/counter': 0.1.3
+
+ '@sxzz/popperjs-es@2.11.7': {}
+
+ '@transloadit/prettier-bytes@0.0.7': {}
+
+ '@trysound/sax@0.2.0': {}
+
+ '@types/conventional-commits-parser@5.0.0':
+ dependencies:
+ '@types/node': 20.12.7
+
+ '@types/d3-array@3.2.1': {}
+
+ '@types/d3-axis@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.10
+
+ '@types/d3-brush@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.10
+
+ '@types/d3-chord@3.0.6': {}
+
+ '@types/d3-color@3.1.3': {}
+
+ '@types/d3-contour@3.0.6':
+ dependencies:
+ '@types/d3-array': 3.2.1
+ '@types/geojson': 7946.0.14
+
+ '@types/d3-delaunay@6.0.4': {}
+
+ '@types/d3-dispatch@3.0.6': {}
+
+ '@types/d3-drag@3.0.7':
+ dependencies:
+ '@types/d3-selection': 3.0.10
+
+ '@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.14
+
+ '@types/d3-hierarchy@3.1.7': {}
+
+ '@types/d3-interpolate@3.0.4':
+ dependencies:
+ '@types/d3-color': 3.1.3
+
+ '@types/d3-path@3.1.0': {}
+
+ '@types/d3-polygon@3.0.2': {}
+
+ '@types/d3-quadtree@3.0.6': {}
+
+ '@types/d3-random@3.0.3': {}
+
+ '@types/d3-scale-chromatic@3.0.3': {}
+
+ '@types/d3-scale@4.0.8':
+ dependencies:
+ '@types/d3-time': 3.0.3
+
+ '@types/d3-selection@3.0.10': {}
+
+ '@types/d3-shape@3.1.6':
+ dependencies:
+ '@types/d3-path': 3.1.0
+
+ '@types/d3-time-format@4.0.3': {}
+
+ '@types/d3-time@3.0.3': {}
+
+ '@types/d3-timer@3.0.2': {}
+
+ '@types/d3-transition@3.0.8':
+ dependencies:
+ '@types/d3-selection': 3.0.10
+
+ '@types/d3-zoom@3.0.8':
+ dependencies:
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-selection': 3.0.10
+
+ '@types/d3@7.4.3':
+ dependencies:
+ '@types/d3-array': 3.2.1
+ '@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.6
+ '@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.0
+ '@types/d3-polygon': 3.0.2
+ '@types/d3-quadtree': 3.0.6
+ '@types/d3-random': 3.0.3
+ '@types/d3-scale': 4.0.8
+ '@types/d3-scale-chromatic': 3.0.3
+ '@types/d3-selection': 3.0.10
+ '@types/d3-shape': 3.1.6
+ '@types/d3-time': 3.0.3
+ '@types/d3-time-format': 4.0.3
+ '@types/d3-timer': 3.0.2
+ '@types/d3-transition': 3.0.8
+ '@types/d3-zoom': 3.0.8
+
+ '@types/eslint@8.56.10':
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/json-schema': 7.0.15
+
+ '@types/estree@1.0.5': {}
+
+ '@types/event-emitter@0.3.5': {}
+
+ '@types/geojson@7946.0.14': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/lodash-es@4.17.12':
+ dependencies:
+ '@types/lodash': 4.17.0
+
+ '@types/lodash@4.17.0': {}
+
+ '@types/node@10.17.60': {}
+
+ '@types/node@20.12.7':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/nprogress@0.2.3': {}
+
+ '@types/qrcode@1.5.5':
+ dependencies:
+ '@types/node': 20.12.7
+
+ '@types/qs@6.9.15': {}
+
+ '@types/semver@7.5.8': {}
+
+ '@types/svgo@2.6.4':
+ dependencies:
+ '@types/node': 20.12.7
+
+ '@types/video.js@7.3.58': {}
+
+ '@types/web-bluetooth@0.0.16': {}
+
+ '@types/web-bluetooth@0.0.20': {}
+
+ '@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/scope-manager': 7.7.1
+ '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/visitor-keys': 7.7.1
+ debug: 4.3.4
+ eslint: 8.57.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ natural-compare: 1.4.0
+ semver: 7.6.0
+ ts-api-utils: 1.3.0(typescript@5.3.3)
+ optionalDependencies:
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.3.4
+ eslint: 8.57.0
+ optionalDependencies:
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 7.7.1
+ '@typescript-eslint/types': 7.7.1
+ '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.3.3)
+ '@typescript-eslint/visitor-keys': 7.7.1
+ debug: 4.3.4
+ eslint: 8.57.0
+ optionalDependencies:
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@6.21.0':
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/visitor-keys': 6.21.0
+
+ '@typescript-eslint/scope-manager@7.7.1':
+ dependencies:
+ '@typescript-eslint/types': 7.7.1
+ '@typescript-eslint/visitor-keys': 7.7.1
+
+ '@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.3.3)
+ '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.3.3)
+ debug: 4.3.4
+ eslint: 8.57.0
+ ts-api-utils: 1.3.0(typescript@5.3.3)
+ optionalDependencies:
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@6.21.0': {}
+
+ '@typescript-eslint/types@7.7.1': {}
+
+ '@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3)':
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.3
+ semver: 7.6.0
+ ts-api-utils: 1.3.0(typescript@5.3.3)
+ optionalDependencies:
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/typescript-estree@7.7.1(typescript@5.3.3)':
+ dependencies:
+ '@typescript-eslint/types': 7.7.1
+ '@typescript-eslint/visitor-keys': 7.7.1
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.4
+ semver: 7.6.0
+ ts-api-utils: 1.3.0(typescript@5.3.3)
+ optionalDependencies:
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.8
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3)
+ eslint: 8.57.0
+ semver: 7.6.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.8
+ '@typescript-eslint/scope-manager': 7.7.1
+ '@typescript-eslint/types': 7.7.1
+ '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.3.3)
+ eslint: 8.57.0
+ semver: 7.6.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/visitor-keys@6.21.0':
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ eslint-visitor-keys: 3.4.3
+
+ '@typescript-eslint/visitor-keys@7.7.1':
+ dependencies:
+ '@typescript-eslint/types': 7.7.1
+ eslint-visitor-keys: 3.4.3
+
+ '@ungap/structured-clone@1.2.0': {}
+
+ '@unocss/astro@0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))':
+ dependencies:
+ '@unocss/core': 0.58.9
+ '@unocss/reset': 0.58.9
+ '@unocss/vite': 0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ optionalDependencies:
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - rollup
+
+ '@unocss/cli@0.58.9(rollup@4.17.1)':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+ '@unocss/config': 0.58.9
+ '@unocss/core': 0.58.9
+ '@unocss/preset-uno': 0.58.9
+ cac: 6.7.14
+ chokidar: 3.6.0
+ colorette: 2.0.20
+ consola: 3.2.3
+ fast-glob: 3.3.2
+ magic-string: 0.30.10
+ pathe: 1.1.2
+ perfect-debounce: 1.0.0
+ transitivePeerDependencies:
+ - rollup
+
+ '@unocss/config@0.57.7':
+ dependencies:
+ '@unocss/core': 0.57.7
+ unconfig: 0.3.13
+
+ '@unocss/config@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ unconfig: 0.3.13
+
+ '@unocss/core@0.57.7': {}
+
+ '@unocss/core@0.58.9': {}
+
+ '@unocss/eslint-config@0.57.7(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@unocss/eslint-plugin': 0.57.7(eslint@8.57.0)(typescript@5.3.3)
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
+ - typescript
+
+ '@unocss/eslint-plugin@0.57.7(eslint@8.57.0)(typescript@5.3.3)':
+ dependencies:
+ '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
+ '@unocss/config': 0.57.7
+ '@unocss/core': 0.57.7
+ magic-string: 0.30.10
+ synckit: 0.8.8
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
+ - typescript
+
+ '@unocss/extractor-arbitrary-variants@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+
+ '@unocss/inspector@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ '@unocss/rule-utils': 0.58.9
+ gzip-size: 6.0.0
+ sirv: 2.0.4
+
+ '@unocss/postcss@0.58.9(postcss@8.4.38)':
+ dependencies:
+ '@unocss/config': 0.58.9
+ '@unocss/core': 0.58.9
+ '@unocss/rule-utils': 0.58.9
+ css-tree: 2.3.1
+ fast-glob: 3.3.2
+ magic-string: 0.30.10
+ postcss: 8.4.38
+
+ '@unocss/preset-attributify@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+
+ '@unocss/preset-icons@0.58.9':
+ dependencies:
+ '@iconify/utils': 2.1.23
+ '@unocss/core': 0.58.9
+ ofetch: 1.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@unocss/preset-mini@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ '@unocss/extractor-arbitrary-variants': 0.58.9
+ '@unocss/rule-utils': 0.58.9
+
+ '@unocss/preset-tagify@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+
+ '@unocss/preset-typography@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ '@unocss/preset-mini': 0.58.9
+
+ '@unocss/preset-uno@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ '@unocss/preset-mini': 0.58.9
+ '@unocss/preset-wind': 0.58.9
+ '@unocss/rule-utils': 0.58.9
+
+ '@unocss/preset-web-fonts@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ ofetch: 1.3.4
+
+ '@unocss/preset-wind@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ '@unocss/preset-mini': 0.58.9
+ '@unocss/rule-utils': 0.58.9
+
+ '@unocss/reset@0.58.9': {}
+
+ '@unocss/rule-utils@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ magic-string: 0.30.10
+
+ '@unocss/scope@0.58.9': {}
+
+ '@unocss/transformer-attributify-jsx-babel@0.58.9':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4)
+ '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4)
+ '@unocss/core': 0.58.9
+ transitivePeerDependencies:
+ - supports-color
+
+ '@unocss/transformer-attributify-jsx@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+
+ '@unocss/transformer-compile-class@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+
+ '@unocss/transformer-directives@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+ '@unocss/rule-utils': 0.58.9
+ css-tree: 2.3.1
+
+ '@unocss/transformer-variant-group@0.58.9':
+ dependencies:
+ '@unocss/core': 0.58.9
+
+ '@unocss/vite@0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+ '@unocss/config': 0.58.9
+ '@unocss/core': 0.58.9
+ '@unocss/inspector': 0.58.9
+ '@unocss/scope': 0.58.9
+ '@unocss/transformer-directives': 0.58.9
+ chokidar: 3.6.0
+ fast-glob: 3.3.2
+ magic-string: 0.30.10
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - rollup
+
+ '@uppy/companion-client@2.2.2':
+ dependencies:
+ '@uppy/utils': 4.1.3
+ namespace-emitter: 2.0.1
+
+ '@uppy/core@2.3.4':
+ dependencies:
+ '@transloadit/prettier-bytes': 0.0.7
+ '@uppy/store-default': 2.1.1
+ '@uppy/utils': 4.1.3
+ lodash.throttle: 4.1.1
+ mime-match: 1.0.2
+ namespace-emitter: 2.0.1
+ nanoid: 3.3.7
+ preact: 10.20.2
+
+ '@uppy/store-default@2.1.1': {}
+
+ '@uppy/utils@4.1.3':
+ dependencies:
+ lodash.throttle: 4.1.1
+
+ '@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4)':
+ dependencies:
+ '@uppy/companion-client': 2.2.2
+ '@uppy/core': 2.3.4
+ '@uppy/utils': 4.1.3
+ nanoid: 3.3.7
+
+ '@videojs-player/vue@1.0.0(@types/video.js@7.3.58)(video.js@7.21.5)(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@types/video.js': 7.3.58
+ video.js: 7.21.5
+ vue: 3.4.21(typescript@5.3.3)
+
+ '@videojs/http-streaming@2.16.2(video.js@7.21.5)':
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@videojs/vhs-utils': 3.0.5
+ aes-decrypter: 3.1.3
+ global: 4.4.0
+ m3u8-parser: 4.8.0
+ mpd-parser: 0.22.1
+ mux.js: 6.0.1
+ video.js: 7.21.5
+
+ '@videojs/vhs-utils@3.0.5':
+ dependencies:
+ '@babel/runtime': 7.24.4
+ global: 4.4.0
+ url-toolkit: 2.2.5
+
+ '@videojs/xhr@2.6.0':
+ dependencies:
+ '@babel/runtime': 7.24.4
+ global: 4.4.0
+ is-function: 1.0.2
+
+ '@vitejs/plugin-legacy@5.3.2(terser@5.30.4)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/preset-env': 7.24.4(@babel/core@7.24.4)
+ browserslist: 4.23.0
+ browserslist-to-esbuild: 2.1.1(browserslist@4.23.0)
+ core-js: 3.37.0
+ magic-string: 0.30.10
+ regenerator-runtime: 0.14.1
+ systemjs: 6.15.1
+ terser: 5.30.4
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitejs/plugin-vue-jsx@3.1.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4)
+ '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.4)
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ vue: 3.4.21(typescript@5.3.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitejs/plugin-vue@5.0.4(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ vue: 3.4.21(typescript@5.3.3)
+
+ '@volar/language-core@1.11.1':
+ dependencies:
+ '@volar/source-map': 1.11.1
+
+ '@volar/source-map@1.11.1':
+ dependencies:
+ muggle-string: 0.3.1
+
+ '@volar/typescript@1.11.1':
+ dependencies:
+ '@volar/language-core': 1.11.1
+ path-browserify: 1.0.1
+
+ '@vue/babel-helper-vue-transform-on@1.2.2': {}
+
+ '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4)
+ '@babel/template': 7.24.0
+ '@babel/traverse': 7.24.1
+ '@babel/types': 7.24.0
+ '@vue/babel-helper-vue-transform-on': 1.2.2
+ '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.4)
+ camelcase: 6.3.0
+ html-tags: 3.3.1
+ svg-tags: 1.0.0
+ optionalDependencies:
+ '@babel/core': 7.24.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.4)':
+ dependencies:
+ '@babel/code-frame': 7.24.2
+ '@babel/core': 7.24.4
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.24.0
+ '@babel/parser': 7.24.4
+ '@vue/compiler-sfc': 3.4.26
+
+ '@vue/compiler-core@3.4.21':
+ dependencies:
+ '@babel/parser': 7.24.4
+ '@vue/shared': 3.4.21
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.0
+
+ '@vue/compiler-core@3.4.26':
+ dependencies:
+ '@babel/parser': 7.24.4
+ '@vue/shared': 3.4.26
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.0
+
+ '@vue/compiler-dom@3.4.21':
+ dependencies:
+ '@vue/compiler-core': 3.4.21
+ '@vue/shared': 3.4.21
+
+ '@vue/compiler-dom@3.4.26':
+ dependencies:
+ '@vue/compiler-core': 3.4.26
+ '@vue/shared': 3.4.26
+
+ '@vue/compiler-sfc@3.4.21':
+ dependencies:
+ '@babel/parser': 7.24.4
+ '@vue/compiler-core': 3.4.21
+ '@vue/compiler-dom': 3.4.21
+ '@vue/compiler-ssr': 3.4.21
+ '@vue/shared': 3.4.21
+ estree-walker: 2.0.2
+ magic-string: 0.30.10
+ postcss: 8.4.38
+ source-map-js: 1.2.0
+
+ '@vue/compiler-sfc@3.4.26':
+ dependencies:
+ '@babel/parser': 7.24.4
+ '@vue/compiler-core': 3.4.26
+ '@vue/compiler-dom': 3.4.26
+ '@vue/compiler-ssr': 3.4.26
+ '@vue/shared': 3.4.26
+ estree-walker: 2.0.2
+ magic-string: 0.30.10
+ postcss: 8.4.38
+ source-map-js: 1.2.0
+
+ '@vue/compiler-ssr@3.4.21':
+ dependencies:
+ '@vue/compiler-dom': 3.4.21
+ '@vue/shared': 3.4.21
+
+ '@vue/compiler-ssr@3.4.26':
+ dependencies:
+ '@vue/compiler-dom': 3.4.26
+ '@vue/shared': 3.4.26
+
+ '@vue/devtools-api@6.6.1': {}
+
+ '@vue/language-core@1.8.27(typescript@5.3.3)':
+ dependencies:
+ '@volar/language-core': 1.11.1
+ '@volar/source-map': 1.11.1
+ '@vue/compiler-dom': 3.4.26
+ '@vue/shared': 3.4.26
+ computeds: 0.0.1
+ minimatch: 9.0.4
+ muggle-string: 0.3.1
+ path-browserify: 1.0.1
+ vue-template-compiler: 2.7.16
+ optionalDependencies:
+ typescript: 5.3.3
+
+ '@vue/reactivity@3.4.21':
+ dependencies:
+ '@vue/shared': 3.4.21
+
+ '@vue/runtime-core@3.4.21':
+ dependencies:
+ '@vue/reactivity': 3.4.21
+ '@vue/shared': 3.4.21
+
+ '@vue/runtime-dom@3.4.21':
+ dependencies:
+ '@vue/runtime-core': 3.4.21
+ '@vue/shared': 3.4.21
+ csstype: 3.1.3
+
+ '@vue/server-renderer@3.4.21(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@vue/compiler-ssr': 3.4.21
+ '@vue/shared': 3.4.21
+ vue: 3.4.21(typescript@5.3.3)
+
+ '@vue/shared@3.4.21': {}
+
+ '@vue/shared@3.4.26': {}
+
+ '@vueuse/core@10.9.0(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 10.9.0
+ '@vueuse/shared': 10.9.0(vue@3.4.21(typescript@5.3.3))
+ vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ '@vueuse/core@9.13.0(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@types/web-bluetooth': 0.0.16
+ '@vueuse/metadata': 9.13.0
+ '@vueuse/shared': 9.13.0(vue@3.4.21(typescript@5.3.3))
+ vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ '@vueuse/metadata@10.9.0': {}
+
+ '@vueuse/metadata@9.13.0': {}
+
+ '@vueuse/shared@10.9.0(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ '@vueuse/shared@9.13.0(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ '@vxe-ui/core@4.0.12':
+ dependencies:
+ dom-zindex: 1.0.6
+ xe-utils: 3.5.30
+
+ '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)':
+ dependencies:
+ '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ dom7: 3.0.0
+ is-url: 1.2.4
+ lodash.throttle: 4.1.1
+ nanoid: 3.3.7
+ slate: 0.72.8
+ snabbdom: 3.6.2
+
+ '@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)':
+ dependencies:
+ '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ dom7: 3.0.0
+ prismjs: 1.29.0
+ slate: 0.72.8
+ snabbdom: 3.6.2
+
+ '@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)':
+ dependencies:
+ '@types/event-emitter': 0.3.5
+ '@uppy/core': 2.3.4
+ '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+ dom7: 3.0.0
+ event-emitter: 0.3.5
+ html-void-elements: 2.0.1
+ i18next: 20.6.1
+ is-hotkey: 0.2.0
+ lodash.camelcase: 4.3.0
+ lodash.clonedeep: 4.5.0
+ lodash.debounce: 4.0.8
+ lodash.foreach: 4.5.0
+ lodash.isequal: 4.5.0
+ lodash.throttle: 4.1.1
+ lodash.toarray: 4.4.0
+ nanoid: 3.3.7
+ scroll-into-view-if-needed: 2.2.31
+ slate: 0.72.8
+ slate-history: 0.66.0(slate@0.72.8)
+ snabbdom: 3.6.2
+
+ '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.4.21(typescript@5.3.3))':
+ dependencies:
+ '@wangeditor/editor': 5.1.23
+ vue: 3.4.21(typescript@5.3.3)
+
+ '@wangeditor/editor@5.1.23':
+ dependencies:
+ '@uppy/core': 2.3.4
+ '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+ '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
+ '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)
+ '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)
+ '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ dom7: 3.0.0
+ is-hotkey: 0.2.0
+ lodash.camelcase: 4.3.0
+ lodash.clonedeep: 4.5.0
+ lodash.debounce: 4.0.8
+ lodash.foreach: 4.5.0
+ lodash.isequal: 4.5.0
+ lodash.throttle: 4.1.1
+ lodash.toarray: 4.4.0
+ nanoid: 3.3.7
+ slate: 0.72.8
+ snabbdom: 3.6.2
+
+ '@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)':
+ dependencies:
+ '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ dom7: 3.0.0
+ slate: 0.72.8
+ snabbdom: 3.6.2
+
+ '@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)':
+ dependencies:
+ '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ dom7: 3.0.0
+ lodash.isequal: 4.5.0
+ lodash.throttle: 4.1.1
+ nanoid: 3.3.7
+ slate: 0.72.8
+ snabbdom: 3.6.2
+
+ '@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)':
+ dependencies:
+ '@uppy/core': 2.3.4
+ '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+ '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ dom7: 3.0.0
+ lodash.foreach: 4.5.0
+ slate: 0.72.8
+ snabbdom: 3.6.2
+
+ '@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)':
+ dependencies:
+ '@uppy/core': 2.3.4
+ '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
+ '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.6.2)
+ dom7: 3.0.0
+ nanoid: 3.3.7
+ slate: 0.72.8
+ snabbdom: 3.6.2
+
+ '@xmldom/xmldom@0.8.10': {}
+
+ '@zxcvbn-ts/core@3.0.4':
+ dependencies:
+ fastest-levenshtein: 1.0.16
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ acorn-jsx@5.3.2(acorn@8.11.3):
+ dependencies:
+ acorn: 8.11.3
+
+ acorn@8.11.3: {}
+
+ aes-decrypter@3.1.3:
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@videojs/vhs-utils': 3.0.5
+ global: 4.4.0
+ pkcs7: 1.0.4
+
+ ajv@6.12.6:
+ 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
+
+ ajv@8.12.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+
+ animate.css@4.1.1: {}
+
+ ansi-escapes@6.2.1: {}
+
+ ansi-regex@2.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.0.1: {}
+
+ ansi-styles@2.2.1: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ ansi-styles@6.2.1: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ arr-diff@4.0.0: {}
+
+ arr-flatten@1.1.0: {}
+
+ arr-union@3.1.0: {}
+
+ array-buffer-byte-length@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ is-array-buffer: 3.0.4
+
+ array-ify@1.0.0: {}
+
+ array-union@2.1.0: {}
+
+ array-unique@0.3.2: {}
+
+ arraybuffer.prototype.slice@1.0.3:
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ is-array-buffer: 3.0.4
+ is-shared-array-buffer: 1.0.3
+
+ assign-symbols@1.0.0: {}
+
+ astral-regex@2.0.0: {}
+
+ async-validator@4.2.5: {}
+
+ async@3.2.5: {}
+
+ asynckit@0.4.0: {}
+
+ atob@2.1.2: {}
+
+ autolinker@3.16.2:
+ dependencies:
+ tslib: 2.6.2
+
+ autoprefixer@10.4.19(postcss@8.4.38):
+ dependencies:
+ browserslist: 4.23.0
+ caniuse-lite: 1.0.30001614
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.38
+ postcss-value-parser: 4.2.0
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ axios@0.26.1(debug@4.3.4):
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ transitivePeerDependencies:
+ - debug
+
+ axios@1.6.8:
+ dependencies:
+ follow-redirects: 1.15.6(debug@4.3.4)
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.4):
+ dependencies:
+ '@babel/compat-data': 7.24.4
+ '@babel/core': 7.24.4
+ '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4):
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4)
+ core-js-compat: 3.37.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.4):
+ dependencies:
+ '@babel/core': 7.24.4
+ '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ balanced-match@1.0.2: {}
+
+ balanced-match@2.0.0: {}
+
+ base@0.11.2:
+ dependencies:
+ cache-base: 1.0.1
+ class-utils: 0.3.6
+ component-emitter: 1.3.1
+ define-property: 1.0.0
+ isobject: 3.0.1
+ mixin-deep: 1.3.2
+ pascalcase: 0.1.1
+
+ benz-amr-recorder@1.1.5:
+ dependencies:
+ benz-recorderjs: 1.0.5
+
+ benz-recorderjs@1.0.5: {}
+
+ big.js@5.2.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ bluebird@3.7.2: {}
+
+ boolbase@1.0.0: {}
+
+ bpmn-js-properties-panel@0.46.0(bpmn-js@8.9.0):
+ dependencies:
+ '@bpmn-io/element-templates-validator': 0.2.0
+ '@bpmn-io/extract-process-variables': 0.4.5
+ bpmn-js: 8.9.0
+ ids: 1.0.5
+ inherits: 2.0.4
+ lodash: 4.17.21
+ min-dom: 3.2.1
+ scroll-tabs: 1.0.1
+ selection-update: 0.1.2
+ semver: 6.3.1
+
+ bpmn-js-token-simulation@0.10.0:
+ dependencies:
+ min-dash: 3.8.1
+ min-dom: 0.2.0
+ svg.js: 2.7.1
+
+ bpmn-js@8.9.0:
+ dependencies:
+ bpmn-moddle: 7.1.3
+ css.escape: 1.5.1
+ diagram-js: 7.9.0
+ diagram-js-direct-editing: 1.8.0(diagram-js@7.9.0)
+ ids: 1.0.5
+ inherits: 2.0.4
+ min-dash: 3.8.1
+ min-dom: 3.2.1
+ object-refs: 0.3.0
+ tiny-svg: 2.2.4
+
+ bpmn-moddle@7.1.3:
+ dependencies:
+ min-dash: 3.8.1
+ moddle: 5.0.4
+ moddle-xml: 9.0.6
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@2.3.2:
+ dependencies:
+ arr-flatten: 1.1.0
+ array-unique: 0.3.2
+ extend-shallow: 2.0.1
+ fill-range: 4.0.0
+ isobject: 3.0.1
+ repeat-element: 1.1.4
+ snapdragon: 0.8.2
+ snapdragon-node: 2.1.1
+ split-string: 3.1.0
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ browserslist-to-esbuild@2.1.1(browserslist@4.23.0):
+ dependencies:
+ browserslist: 4.23.0
+ meow: 13.2.0
+
+ browserslist@4.23.0:
+ dependencies:
+ caniuse-lite: 1.0.30001614
+ electron-to-chromium: 1.4.750
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.13(browserslist@4.23.0)
+
+ buffer-from@1.1.2: {}
+
+ cac@6.7.14: {}
+
+ cache-base@1.0.1:
+ dependencies:
+ collection-visit: 1.0.0
+ component-emitter: 1.3.1
+ get-value: 2.0.6
+ has-value: 1.0.0
+ isobject: 3.0.1
+ set-value: 2.0.1
+ to-object-path: 0.3.0
+ union-value: 1.0.1
+ unset-value: 1.0.0
+
+ call-bind@1.0.7:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ callsites@3.1.0: {}
+
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ camunda-bpmn-moddle@7.0.1: {}
+
+ caniuse-lite@1.0.30001614: {}
+
+ chalk@1.1.3:
+ dependencies:
+ ansi-styles: 2.2.1
+ escape-string-regexp: 1.0.5
+ has-ansi: 2.0.0
+ strip-ansi: 3.0.1
+ supports-color: 2.0.0
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ cheerio-select@2.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-select: 5.1.0
+ css-what: 6.1.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+
+ cheerio@1.0.0-rc.12:
+ dependencies:
+ cheerio-select: 2.1.0
+ dom-serializer: 2.0.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ htmlparser2: 8.0.2
+ parse5: 7.1.2
+ parse5-htmlparser2-tree-adapter: 7.0.0
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ class-utils@0.3.6:
+ dependencies:
+ arr-union: 3.1.0
+ define-property: 0.2.5
+ isobject: 3.0.1
+ static-extend: 0.1.2
+
+ cli-cursor@4.0.0:
+ dependencies:
+ restore-cursor: 4.0.0
+
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.1.0
+
+ cliui@6.0.0:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone@2.1.2: {}
+
+ clsx@2.1.1: {}
+
+ collection-visit@1.0.0:
+ dependencies:
+ map-visit: 1.0.0
+ object-visit: 1.0.1
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ colord@2.9.3: {}
+
+ colorette@2.0.20: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@11.1.0: {}
+
+ commander@2.20.3: {}
+
+ commander@7.2.0: {}
+
+ commander@8.3.0: {}
+
+ common-tags@1.8.2: {}
+
+ compare-func@2.0.0:
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+
+ component-classes@1.2.6:
+ dependencies:
+ component-indexof: 0.0.3
+
+ component-closest@0.1.4:
+ dependencies:
+ component-matches-selector: 0.1.7
+
+ component-delegate@0.2.4:
+ dependencies:
+ component-closest: 0.1.4
+ component-event: 0.1.4
+
+ component-emitter@1.3.1: {}
+
+ component-event@0.1.4: {}
+
+ component-event@0.2.1: {}
+
+ component-indexof@0.0.3: {}
+
+ component-matches-selector@0.1.7:
+ dependencies:
+ component-query: 0.0.3
+ global-object: 1.0.0
+
+ component-query@0.0.3: {}
+
+ compute-scroll-into-view@1.0.20: {}
+
+ computeds@0.0.1: {}
+
+ concat-map@0.0.1: {}
+
+ confbox@0.1.7: {}
+
+ consola@3.2.3: {}
+
+ conventional-changelog-angular@7.0.0:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-changelog-conventionalcommits@7.0.2:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-commits-parser@5.0.0:
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 2.0.0
+ meow: 12.1.1
+ split2: 4.2.0
+
+ convert-source-map@2.0.0: {}
+
+ copy-descriptor@0.1.1: {}
+
+ core-js-compat@3.37.0:
+ dependencies:
+ browserslist: 4.23.0
+
+ core-js-pure@3.37.0: {}
+
+ core-js@3.37.0: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.7)(cosmiconfig@9.0.0(typescript@5.3.3))(typescript@5.3.3):
+ dependencies:
+ '@types/node': 20.12.7
+ cosmiconfig: 9.0.0(typescript@5.3.3)
+ jiti: 1.21.0
+ typescript: 5.3.3
+
+ cosmiconfig@9.0.0(typescript@5.3.3):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.3.3
+
+ cropperjs@1.6.2: {}
+
+ cross-fetch@3.1.8:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crypto-js@4.2.0: {}
+
+ css-functions-list@3.2.2: {}
+
+ css-select@4.3.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+
+ css-select@5.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+
+ css-tree@1.1.3:
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+
+ css-tree@2.3.1:
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.2.0
+
+ css-what@6.1.0: {}
+
+ css.escape@1.5.1: {}
+
+ cssesc@3.0.0: {}
+
+ csso@4.2.0:
+ dependencies:
+ css-tree: 1.1.3
+
+ csstype@3.1.3: {}
+
+ 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-flextree@2.1.2:
+ dependencies:
+ d3-hierarchy: 1.1.9
+
+ 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.0: {}
+
+ d3-geo@3.1.1:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-hierarchy@1.1.9: {}
+
+ d3-hierarchy@3.1.2: {}
+
+ d3-interpolate@3.0.1:
+ dependencies:
+ d3-color: 3.1.0
+
+ d3-path@3.1.0: {}
+
+ d3-polygon@3.0.1: {}
+
+ d3-quadtree@3.0.1: {}
+
+ d3-random@3.0.1: {}
+
+ 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.0
+ d3-interpolate: 3.0.1
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+
+ d3-selection@3.0.0: {}
+
+ 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.0
+ 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
+
+ d@1.0.2:
+ dependencies:
+ es5-ext: 0.10.64
+ type: 2.7.2
+
+ dargs@8.1.0: {}
+
+ data-view-buffer@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ data-view-byte-length@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ data-view-byte-offset@1.0.0:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ dayjs@1.11.11: {}
+
+ de-indent@1.0.2: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ decamelize@1.2.0: {}
+
+ decode-uri-component@0.2.2: {}
+
+ deep-is@0.1.4: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ define-property@0.2.5:
+ dependencies:
+ is-descriptor: 0.1.7
+
+ define-property@1.0.0:
+ dependencies:
+ is-descriptor: 1.0.3
+
+ define-property@2.0.2:
+ dependencies:
+ is-descriptor: 1.0.3
+ isobject: 3.0.1
+
+ defu@6.1.4: {}
+
+ delaunator@5.0.1:
+ dependencies:
+ robust-predicates: 3.0.2
+
+ delayed-stream@1.0.0: {}
+
+ destr@2.0.3: {}
+
+ diagram-js-direct-editing@1.8.0(diagram-js@7.9.0):
+ dependencies:
+ diagram-js: 7.9.0
+ min-dash: 3.8.1
+ min-dom: 3.2.1
+
+ diagram-js@12.8.1:
+ dependencies:
+ '@bpmn-io/diagram-js-ui': 0.2.3
+ clsx: 2.1.1
+ didi: 9.0.2
+ hammerjs: 2.0.8
+ inherits-browser: 0.1.0
+ min-dash: 4.2.1
+ min-dom: 4.1.0
+ object-refs: 0.3.0
+ path-intersection: 2.2.1
+ tiny-svg: 3.0.1
+
+ diagram-js@7.9.0:
+ dependencies:
+ css.escape: 1.5.1
+ didi: 5.2.1
+ hammerjs: 2.0.8
+ inherits: 2.0.4
+ min-dash: 3.8.1
+ min-dom: 3.2.1
+ object-refs: 0.3.0
+ path-intersection: 2.2.1
+ tiny-svg: 2.2.4
+
+ didi@5.2.1: {}
+
+ didi@9.0.2: {}
+
+ dijkstrajs@1.0.3: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ dlv@1.1.3: {}
+
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dom-serializer@0.2.2:
+ dependencies:
+ domelementtype: 2.3.0
+ entities: 2.2.0
+
+ dom-serializer@1.4.1:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ dom-walk@0.1.2: {}
+
+ dom-zindex@1.0.6: {}
+
+ dom7@3.0.0:
+ dependencies:
+ ssr-window: 3.0.0
+
+ domelementtype@1.3.1: {}
+
+ domelementtype@2.3.0: {}
+
+ domhandler@2.4.2:
+ dependencies:
+ domelementtype: 1.3.1
+
+ domhandler@4.3.1:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domify@1.4.2: {}
+
+ dompurify@3.1.1: {}
+
+ domutils@1.7.0:
+ dependencies:
+ dom-serializer: 0.2.2
+ domelementtype: 1.3.1
+
+ domutils@2.8.0:
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+
+ domutils@3.1.0:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dot-prop@5.3.0:
+ dependencies:
+ is-obj: 2.0.0
+
+ driver.js@1.3.1: {}
+
+ duplexer@0.1.2: {}
+
+ eastasianwidth@0.2.0: {}
+
+ echarts-wordcloud@2.1.0(echarts@5.5.0):
+ dependencies:
+ echarts: 5.5.0
+
+ echarts@5.5.0:
+ dependencies:
+ tslib: 2.3.0
+ zrender: 5.5.0
+
+ ejs@3.1.10:
+ dependencies:
+ jake: 10.8.7
+
+ electron-to-chromium@1.4.750: {}
+
+ element-plus@2.8.0(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ '@ctrl/tinycolor': 3.6.1
+ '@element-plus/icons-vue': 2.3.1(vue@3.4.21(typescript@5.3.3))
+ '@floating-ui/dom': 1.6.4
+ '@popperjs/core': '@sxzz/popperjs-es@2.11.7'
+ '@types/lodash': 4.17.0
+ '@types/lodash-es': 4.17.12
+ '@vueuse/core': 9.13.0(vue@3.4.21(typescript@5.3.3))
+ async-validator: 4.2.5
+ dayjs: 1.11.11
+ escape-html: 1.0.3
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21)
+ memoize-one: 6.0.0
+ normalize-wheel-es: 1.2.0
+ vue: 3.4.21(typescript@5.3.3)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+
+ emoji-regex@10.3.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ emojis-list@3.0.0: {}
+
+ encode-utf8@1.0.3: {}
+
+ entities@1.1.2: {}
+
+ entities@2.2.0: {}
+
+ entities@4.5.0: {}
+
+ env-paths@2.2.1: {}
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-abstract@1.23.3:
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ arraybuffer.prototype.slice: 1.0.3
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ data-view-buffer: 1.0.1
+ data-view-byte-length: 1.0.1
+ data-view-byte-offset: 1.0.0
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-set-tostringtag: 2.0.3
+ es-to-primitive: 1.2.1
+ function.prototype.name: 1.1.6
+ get-intrinsic: 1.2.4
+ get-symbol-description: 1.0.2
+ globalthis: 1.0.3
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ internal-slot: 1.0.7
+ is-array-buffer: 3.0.4
+ is-callable: 1.2.7
+ is-data-view: 1.0.1
+ is-negative-zero: 2.0.3
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.3
+ is-string: 1.0.7
+ is-typed-array: 1.1.13
+ is-weakref: 1.0.2
+ object-inspect: 1.13.1
+ object-keys: 1.1.1
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ safe-array-concat: 1.1.2
+ safe-regex-test: 1.0.3
+ string.prototype.trim: 1.2.9
+ string.prototype.trimend: 1.0.8
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.2
+ typed-array-byte-length: 1.0.1
+ typed-array-byte-offset: 1.0.2
+ typed-array-length: 1.0.6
+ unbox-primitive: 1.0.2
+ which-typed-array: 1.1.15
+
+ es-define-property@1.0.0:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@1.5.2: {}
+
+ es-object-atoms@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.0.3:
+ dependencies:
+ get-intrinsic: 1.2.4
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-to-primitive@1.2.1:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+
+ es5-ext@0.10.64:
+ dependencies:
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.4
+ esniff: 2.0.1
+ next-tick: 1.1.0
+
+ es6-iterator@2.0.3:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-symbol: 3.1.4
+
+ es6-symbol@3.1.4:
+ dependencies:
+ d: 1.0.2
+ ext: 1.7.0
+
+ esbuild@0.19.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.19.12
+ '@esbuild/android-arm': 0.19.12
+ '@esbuild/android-arm64': 0.19.12
+ '@esbuild/android-x64': 0.19.12
+ '@esbuild/darwin-arm64': 0.19.12
+ '@esbuild/darwin-x64': 0.19.12
+ '@esbuild/freebsd-arm64': 0.19.12
+ '@esbuild/freebsd-x64': 0.19.12
+ '@esbuild/linux-arm': 0.19.12
+ '@esbuild/linux-arm64': 0.19.12
+ '@esbuild/linux-ia32': 0.19.12
+ '@esbuild/linux-loong64': 0.19.12
+ '@esbuild/linux-mips64el': 0.19.12
+ '@esbuild/linux-ppc64': 0.19.12
+ '@esbuild/linux-riscv64': 0.19.12
+ '@esbuild/linux-s390x': 0.19.12
+ '@esbuild/linux-x64': 0.19.12
+ '@esbuild/netbsd-x64': 0.19.12
+ '@esbuild/openbsd-x64': 0.19.12
+ '@esbuild/sunos-x64': 0.19.12
+ '@esbuild/win32-arm64': 0.19.12
+ '@esbuild/win32-ia32': 0.19.12
+ '@esbuild/win32-x64': 0.19.12
+
+ escalade@3.1.2: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
+ eslint-config-prettier@9.1.0(eslint@8.57.0):
+ dependencies:
+ eslint: 8.57.0
+
+ eslint-define-config@2.1.0: {}
+
+ eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5):
+ dependencies:
+ eslint: 8.57.0
+ prettier: 3.2.5
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.8.8
+ optionalDependencies:
+ '@types/eslint': 8.56.10
+ eslint-config-prettier: 9.1.0(eslint@8.57.0)
+
+ eslint-plugin-vue@9.25.0(eslint@8.57.0):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ eslint: 8.57.0
+ globals: 13.24.0
+ natural-compare: 1.4.0
+ nth-check: 2.1.1
+ postcss-selector-parser: 6.0.16
+ semver: 7.6.0
+ vue-eslint-parser: 9.4.2(eslint@8.57.0)
+ xml-name-validator: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-scope@7.2.2:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint@8.57.0:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.10.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ esniff@2.0.1:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ event-emitter: 0.3.5
+ type: 2.7.2
+
+ espree@9.6.1:
+ dependencies:
+ acorn: 8.11.3
+ acorn-jsx: 5.3.2(acorn@8.11.3)
+ eslint-visitor-keys: 3.4.3
+
+ esprima@4.0.1: {}
+
+ esquery@1.5.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.5
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ event-emitter@0.3.5:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+
+ eventemitter3@5.0.1: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ execa@8.0.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+
+ expand-brackets@2.1.4:
+ dependencies:
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ posix-character-classes: 0.1.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ ext@1.7.0:
+ dependencies:
+ type: 2.7.2
+
+ extend-shallow@2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+
+ extend-shallow@3.0.2:
+ dependencies:
+ assign-symbols: 1.0.0
+ is-extendable: 1.0.1
+
+ extglob@2.0.4:
+ dependencies:
+ array-unique: 0.3.2
+ define-property: 1.0.0
+ expand-brackets: 2.1.4
+ extend-shallow: 2.0.1
+ fragment-cache: 0.2.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-diff@1.3.0: {}
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-xml-parser@4.3.6:
+ dependencies:
+ strnum: 1.0.5
+
+ fastest-levenshtein@1.0.16: {}
+
+ fastq@1.17.1:
+ dependencies:
+ reusify: 1.0.4
+
+ file-entry-cache@6.0.1:
+ dependencies:
+ flat-cache: 3.2.0
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ filelist@1.0.4:
+ dependencies:
+ minimatch: 5.1.6
+
+ fill-range@4.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ to-regex-range: 2.1.1
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ find-up@7.0.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+ unicorn-magic: 0.1.0
+
+ flat-cache@3.2.0:
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+ rimraf: 3.0.2
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+
+ flatted@3.3.1: {}
+
+ follow-redirects@1.15.6(debug@4.3.4):
+ optionalDependencies:
+ debug: 4.3.4
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ for-in@1.0.2: {}
+
+ foreground-child@3.1.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ signal-exit: 4.1.0
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ fraction.js@4.3.7: {}
+
+ fragment-cache@0.2.1:
+ dependencies:
+ map-cache: 0.2.2
+
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ function.prototype.name@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ functions-have-names: 1.2.3
+
+ functions-have-names@1.2.3: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.2.0: {}
+
+ get-intrinsic@1.2.4:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+
+ get-stream@6.0.1: {}
+
+ get-stream@8.0.1: {}
+
+ get-symbol-description@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+
+ get-value@2.0.6: {}
+
+ git-raw-commits@4.0.0:
+ dependencies:
+ dargs: 8.1.0
+ meow: 12.1.1
+ split2: 4.2.0
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.3.12:
+ dependencies:
+ foreground-child: 3.1.1
+ jackspeak: 2.3.6
+ minimatch: 9.0.4
+ minipass: 7.0.4
+ path-scurry: 1.10.2
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ global-directory@4.0.1:
+ dependencies:
+ ini: 4.1.1
+
+ global-modules@2.0.0:
+ dependencies:
+ global-prefix: 3.0.0
+
+ global-object@1.0.0: {}
+
+ global-prefix@3.0.0:
+ dependencies:
+ ini: 1.3.8
+ kind-of: 6.0.3
+ which: 1.3.1
+
+ global@4.4.0:
+ dependencies:
+ min-document: 2.19.0
+ process: 0.11.10
+
+ globals@11.12.0: {}
+
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
+ globalthis@1.0.3:
+ dependencies:
+ define-properties: 1.2.1
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.1
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ globjoin@0.1.4: {}
+
+ gopd@1.0.1:
+ dependencies:
+ get-intrinsic: 1.2.4
+
+ graceful-fs@4.2.11: {}
+
+ graphemer@1.4.0: {}
+
+ gzip-size@6.0.0:
+ dependencies:
+ duplexer: 0.1.2
+
+ hammerjs@2.0.8: {}
+
+ has-ansi@2.0.0:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ has-bigints@1.0.2: {}
+
+ has-flag@1.0.0: {}
+
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.0
+
+ has-proto@1.0.3: {}
+
+ has-symbols@1.0.3: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
+ has-value@0.3.1:
+ dependencies:
+ get-value: 2.0.6
+ has-values: 0.1.4
+ isobject: 2.1.0
+
+ has-value@1.0.0:
+ dependencies:
+ get-value: 2.0.6
+ has-values: 1.0.0
+ isobject: 3.0.1
+
+ has-values@0.1.4: {}
+
+ has-values@1.0.0:
+ dependencies:
+ is-number: 3.0.0
+ kind-of: 4.0.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ highlight.js@11.9.0: {}
+
+ htm@3.1.1: {}
+
+ html-tags@3.3.1: {}
+
+ html-void-elements@2.0.1: {}
+
+ htmlparser2@3.10.1:
+ dependencies:
+ domelementtype: 1.3.1
+ domhandler: 2.4.2
+ domutils: 1.7.0
+ entities: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ htmlparser2@8.0.2:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ entities: 4.5.0
+
+ human-signals@2.1.0: {}
+
+ human-signals@5.0.0: {}
+
+ i18next@20.6.1:
+ dependencies:
+ '@babel/runtime': 7.24.4
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ids@1.0.5: {}
+
+ ignore@5.3.1: {}
+
+ image-size@0.5.5: {}
+
+ immer@9.0.21: {}
+
+ immutable@4.3.5: {}
+
+ import-fresh@3.3.0:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-meta-resolve@4.0.0: {}
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@4.0.0: {}
+
+ indexof@0.0.1: {}
+
+ individual@2.0.0: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits-browser@0.1.0: {}
+
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
+ ini@4.1.1: {}
+
+ internal-slot@1.0.7:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.0.6
+
+ internmap@2.0.3: {}
+
+ is-accessor-descriptor@1.0.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-array-buffer@3.0.4:
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+
+ is-arrayish@0.2.1: {}
+
+ is-bigint@1.0.4:
+ dependencies:
+ has-bigints: 1.0.2
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-boolean-object@1.1.2:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-buffer@1.1.6: {}
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.13.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-descriptor@1.0.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-view@1.0.1:
+ dependencies:
+ is-typed-array: 1.1.13
+
+ is-date-object@1.0.5:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-descriptor@0.1.7:
+ dependencies:
+ is-accessor-descriptor: 1.0.1
+ is-data-descriptor: 1.0.1
+
+ is-descriptor@1.0.3:
+ dependencies:
+ is-accessor-descriptor: 1.0.1
+ is-data-descriptor: 1.0.1
+
+ is-extendable@0.1.1: {}
+
+ is-extendable@1.0.1:
+ dependencies:
+ is-plain-object: 2.0.4
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-fullwidth-code-point@5.0.0:
+ dependencies:
+ get-east-asian-width: 1.2.0
+
+ is-function@1.0.2: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-hotkey@0.2.0: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.0.7:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-number@3.0.0:
+ dependencies:
+ kind-of: 3.2.2
+
+ is-number@7.0.0: {}
+
+ is-obj@2.0.0: {}
+
+ is-path-inside@3.0.3: {}
+
+ is-plain-obj@1.1.0: {}
+
+ is-plain-object@2.0.4:
+ dependencies:
+ isobject: 3.0.1
+
+ is-plain-object@5.0.0: {}
+
+ is-regex@1.1.4:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
+ is-shared-array-buffer@1.0.3:
+ dependencies:
+ call-bind: 1.0.7
+
+ is-stream@2.0.1: {}
+
+ is-stream@3.0.0: {}
+
+ is-string@1.0.7:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.0.4:
+ dependencies:
+ has-symbols: 1.0.3
+
+ is-text-path@2.0.0:
+ dependencies:
+ text-extensions: 2.4.0
+
+ is-typed-array@1.1.13:
+ dependencies:
+ which-typed-array: 1.1.15
+
+ is-url@1.2.4: {}
+
+ is-weakref@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+
+ is-windows@1.0.2: {}
+
+ isarray@1.0.0: {}
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ isobject@2.1.0:
+ dependencies:
+ isarray: 1.0.0
+
+ isobject@3.0.1: {}
+
+ jackspeak@2.3.6:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jake@10.8.7:
+ dependencies:
+ async: 3.2.5
+ chalk: 4.1.2
+ filelist: 1.0.4
+ minimatch: 3.1.2
+
+ jiti@1.21.0: {}
+
+ js-base64@2.6.4: {}
+
+ js-tokens@4.0.0: {}
+
+ js-tokens@8.0.3: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsencrypt@3.3.2: {}
+
+ jsesc@0.5.0: {}
+
+ jsesc@2.5.2: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json-source-map@0.6.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+
+ json5@2.2.3: {}
+
+ jsonc-eslint-parser@2.4.0:
+ dependencies:
+ acorn: 8.11.3
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ semver: 7.6.0
+
+ jsonfile@6.1.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonparse@1.3.1: {}
+
+ katex@0.16.11:
+ dependencies:
+ commander: 8.3.0
+
+ keycode@2.2.1: {}
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kind-of@3.2.2:
+ dependencies:
+ is-buffer: 1.1.6
+
+ kind-of@4.0.0:
+ dependencies:
+ is-buffer: 1.1.6
+
+ kind-of@5.1.0: {}
+
+ kind-of@6.0.3: {}
+
+ known-css-properties@0.30.0: {}
+
+ kolorist@1.8.0: {}
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ lilconfig@3.0.0: {}
+
+ lines-and-columns@1.2.4: {}
+
+ linkify-it@5.0.0:
+ dependencies:
+ uc.micro: 2.1.0
+
+ lint-staged@15.2.2:
+ dependencies:
+ chalk: 5.3.0
+ commander: 11.1.0
+ debug: 4.3.4
+ execa: 8.0.1
+ lilconfig: 3.0.0
+ listr2: 8.0.1
+ micromatch: 4.0.5
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.3.4
+ transitivePeerDependencies:
+ - supports-color
+
+ listr2@8.0.1:
+ dependencies:
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.0.0
+ rfdc: 1.3.1
+ wrap-ansi: 9.0.0
+
+ loader-utils@1.4.2:
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 1.0.2
+
+ local-pkg@0.4.3: {}
+
+ local-pkg@0.5.0:
+ dependencies:
+ mlly: 1.6.1
+ pkg-types: 1.1.0
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ locate-path@7.2.0:
+ dependencies:
+ p-locate: 6.0.0
+
+ lodash-es@4.17.21: {}
+
+ lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
+ dependencies:
+ '@types/lodash-es': 4.17.12
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+
+ lodash.camelcase@4.3.0: {}
+
+ lodash.clonedeep@4.5.0: {}
+
+ lodash.debounce@4.0.8: {}
+
+ lodash.foreach@4.5.0: {}
+
+ lodash.isequal@4.5.0: {}
+
+ lodash.isplainobject@4.0.6: {}
+
+ lodash.kebabcase@4.1.1: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.mergewith@4.6.2: {}
+
+ lodash.snakecase@4.1.1: {}
+
+ lodash.startcase@4.4.0: {}
+
+ lodash.throttle@4.1.1: {}
+
+ lodash.toarray@4.4.0: {}
+
+ lodash.truncate@4.4.2: {}
+
+ lodash.uniq@4.5.0: {}
+
+ lodash.upperfirst@4.3.1: {}
+
+ lodash@4.17.21: {}
+
+ log-update@6.0.0:
+ dependencies:
+ ansi-escapes: 6.2.1
+ cli-cursor: 4.0.0
+ slice-ansi: 7.1.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 9.0.0
+
+ loglevel-colored-level-prefix@1.0.0:
+ dependencies:
+ chalk: 1.1.3
+ loglevel: 1.9.1
+
+ loglevel@1.9.1: {}
+
+ lru-cache@10.2.2: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
+ m3u8-parser@4.8.0:
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@videojs/vhs-utils': 3.0.5
+ global: 4.4.0
+
+ magic-string@0.30.10:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ map-cache@0.2.2: {}
+
+ map-visit@1.0.0:
+ dependencies:
+ object-visit: 1.0.1
+
+ markdown-it@14.1.0:
+ dependencies:
+ argparse: 2.0.1
+ entities: 4.5.0
+ linkify-it: 5.0.0
+ mdurl: 2.0.0
+ punycode.js: 2.3.1
+ uc.micro: 2.1.0
+
+ markmap-common@0.16.0:
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@gera2ld/jsx-dom': 2.2.2
+ npm2url: 0.2.4
+
+ markmap-html-parser@0.16.1(markmap-common@0.16.0):
+ dependencies:
+ '@babel/runtime': 7.24.4
+ cheerio: 1.0.0-rc.12
+ markmap-common: 0.16.0
+
+ markmap-lib@0.16.1(markmap-common@0.16.0):
+ dependencies:
+ '@babel/runtime': 7.24.4
+ highlight.js: 11.9.0
+ js-yaml: 4.1.0
+ katex: 0.16.11
+ markmap-common: 0.16.0
+ markmap-html-parser: 0.16.1(markmap-common@0.16.0)
+ markmap-view: 0.16.0(markmap-common@0.16.0)
+ prismjs: 1.29.0
+ remarkable: 2.0.1
+ remarkable-katex: 1.2.1
+
+ markmap-toolbar@0.17.0(markmap-common@0.16.0):
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@gera2ld/jsx-dom': 2.2.2
+ markmap-common: 0.16.0
+
+ markmap-view@0.16.0(markmap-common@0.16.0):
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@gera2ld/jsx-dom': 2.2.2
+ '@types/d3': 7.4.3
+ d3: 7.9.0
+ d3-flextree: 2.1.2
+ markmap-common: 0.16.0
+
+ matches-selector@1.2.0: {}
+
+ mathml-tag-names@2.1.3: {}
+
+ mdn-data@2.0.14: {}
+
+ mdn-data@2.0.30: {}
+
+ mdurl@2.0.0: {}
+
+ memoize-one@6.0.0: {}
+
+ meow@12.1.1: {}
+
+ meow@13.2.0: {}
+
+ merge-options@1.0.1:
+ dependencies:
+ is-plain-obj: 1.1.0
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@3.1.0:
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ braces: 2.3.2
+ define-property: 1.0.0
+ extend-shallow: 2.0.1
+ extglob: 2.0.4
+ fragment-cache: 0.2.1
+ kind-of: 5.1.0
+ nanomatch: 1.2.13
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ micromatch@4.0.5:
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-match@1.0.2:
+ dependencies:
+ wildcard: 1.1.2
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mimic-fn@2.1.0: {}
+
+ mimic-fn@4.0.0: {}
+
+ min-dash@3.8.1: {}
+
+ min-dash@4.2.1: {}
+
+ min-document@2.19.0:
+ dependencies:
+ dom-walk: 0.1.2
+
+ min-dom@0.2.0:
+ dependencies:
+ component-classes: 1.2.6
+ component-closest: 0.1.4
+ component-delegate: 0.2.4
+ component-event: 0.1.4
+ component-matches-selector: 0.1.7
+ component-query: 0.0.3
+ domify: 1.4.2
+
+ min-dom@3.2.1:
+ dependencies:
+ component-event: 0.1.4
+ domify: 1.4.2
+ indexof: 0.0.1
+ matches-selector: 1.2.0
+ min-dash: 3.8.1
+
+ min-dom@4.1.0:
+ dependencies:
+ component-event: 0.2.1
+ domify: 1.4.2
+ min-dash: 4.2.1
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimatch@9.0.3:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimatch@9.0.4:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ minipass@7.0.4: {}
+
+ mitt@1.2.0: {}
+
+ mitt@3.0.1: {}
+
+ mixin-deep@1.3.2:
+ dependencies:
+ for-in: 1.0.2
+ is-extendable: 1.0.1
+
+ mlly@1.6.1:
+ dependencies:
+ acorn: 8.11.3
+ pathe: 1.1.2
+ pkg-types: 1.1.0
+ ufo: 1.5.3
+
+ moddle-xml@9.0.6:
+ dependencies:
+ min-dash: 3.8.1
+ moddle: 5.0.4
+ saxen: 8.1.2
+
+ moddle@5.0.4:
+ dependencies:
+ min-dash: 3.8.1
+
+ mpd-parser@0.22.1:
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@videojs/vhs-utils': 3.0.5
+ '@xmldom/xmldom': 0.8.10
+ global: 4.4.0
+
+ mrmime@2.0.0: {}
+
+ ms@2.0.0: {}
+
+ ms@2.1.2: {}
+
+ muggle-string@0.3.1: {}
+
+ mux.js@6.0.1:
+ dependencies:
+ '@babel/runtime': 7.24.4
+ global: 4.4.0
+
+ namespace-emitter@2.0.1: {}
+
+ nanoid@3.3.7: {}
+
+ nanomatch@1.2.13:
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ fragment-cache: 0.2.1
+ is-windows: 1.0.2
+ kind-of: 6.0.3
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ natural-compare@1.4.0: {}
+
+ next-tick@1.1.0: {}
+
+ node-fetch-native@1.6.4: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-releases@2.0.14: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ normalize-wheel-es@1.2.0: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
+
+ npm2url@0.2.4: {}
+
+ nprogress@0.2.0: {}
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ object-assign@4.1.1: {}
+
+ object-copy@0.1.0:
+ dependencies:
+ copy-descriptor: 0.1.1
+ define-property: 0.2.5
+ kind-of: 3.2.2
+
+ object-inspect@1.13.1: {}
+
+ object-keys@1.1.1: {}
+
+ object-refs@0.3.0: {}
+
+ object-visit@1.0.1:
+ dependencies:
+ isobject: 3.0.1
+
+ object.assign@4.1.5:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+
+ object.pick@1.3.0:
+ dependencies:
+ isobject: 3.0.1
+
+ ofetch@1.3.4:
+ dependencies:
+ destr: 2.0.3
+ node-fetch-native: 1.6.4
+ ufo: 1.5.3
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onetime@6.0.0:
+ dependencies:
+ mimic-fn: 4.0.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@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.0.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
+ p-try@2.2.0: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.24.2
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse5-htmlparser2-tree-adapter@7.0.0:
+ dependencies:
+ domhandler: 5.0.3
+ parse5: 7.1.2
+
+ parse5@7.1.2:
+ dependencies:
+ entities: 4.5.0
+
+ pascalcase@0.1.1: {}
+
+ path-browserify@1.0.1: {}
+
+ path-exists@4.0.0: {}
+
+ path-exists@5.0.0: {}
+
+ path-intersection@2.2.1: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-key@4.0.0: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.10.2:
+ dependencies:
+ lru-cache: 10.2.2
+ minipass: 7.0.4
+
+ path-type@4.0.0: {}
+
+ pathe@0.2.0: {}
+
+ pathe@1.1.2: {}
+
+ perfect-debounce@1.0.0: {}
+
+ picocolors@1.0.0: {}
+
+ picomatch@2.3.1: {}
+
+ pidtree@0.6.0: {}
+
+ pinia-plugin-persistedstate@3.2.1(pinia@2.1.7(typescript@5.3.3)(vue@3.4.21(typescript@5.3.3))):
+ dependencies:
+ pinia: 2.1.7(typescript@5.3.3)(vue@3.4.21(typescript@5.3.3))
+
+ pinia@2.1.7(typescript@5.3.3)(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ '@vue/devtools-api': 6.6.1
+ vue: 3.4.21(typescript@5.3.3)
+ vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3))
+ optionalDependencies:
+ typescript: 5.3.3
+
+ pkcs7@1.0.4:
+ dependencies:
+ '@babel/runtime': 7.24.4
+
+ pkg-types@1.1.0:
+ dependencies:
+ confbox: 0.1.7
+ mlly: 1.6.1
+ pathe: 1.1.2
+
+ pngjs@5.0.0: {}
+
+ posix-character-classes@0.1.1: {}
+
+ possible-typed-array-names@1.0.0: {}
+
+ postcss-html@1.6.0:
+ dependencies:
+ htmlparser2: 8.0.2
+ js-tokens: 8.0.3
+ postcss: 8.4.38
+ postcss-safe-parser: 6.0.0(postcss@8.4.38)
+
+ postcss-prefix-selector@1.16.1(postcss@5.2.18):
+ dependencies:
+ postcss: 5.2.18
+
+ postcss-resolve-nested-selector@0.1.1: {}
+
+ postcss-safe-parser@6.0.0(postcss@8.4.38):
+ dependencies:
+ postcss: 8.4.38
+
+ postcss-safe-parser@7.0.0(postcss@8.4.38):
+ dependencies:
+ postcss: 8.4.38
+
+ postcss-scss@4.0.9(postcss@8.4.38):
+ dependencies:
+ postcss: 8.4.38
+
+ postcss-selector-parser@6.0.16:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-sorting@8.0.2(postcss@8.4.38):
+ dependencies:
+ postcss: 8.4.38
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@5.2.18:
+ dependencies:
+ chalk: 1.1.3
+ js-base64: 2.6.4
+ source-map: 0.5.7
+ supports-color: 3.2.3
+
+ postcss@8.4.38:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.0
+ source-map-js: 1.2.0
+
+ posthtml-parser@0.2.1:
+ dependencies:
+ htmlparser2: 3.10.1
+ isobject: 2.1.0
+
+ posthtml-rename-id@1.0.12:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
+ posthtml-render@1.4.0: {}
+
+ posthtml-svg-mode@1.0.3:
+ dependencies:
+ merge-options: 1.0.1
+ posthtml: 0.9.2
+ posthtml-parser: 0.2.1
+ posthtml-render: 1.4.0
+
+ posthtml@0.9.2:
+ dependencies:
+ posthtml-parser: 0.2.1
+ posthtml-render: 1.4.0
+
+ preact@10.20.2: {}
+
+ prelude-ls@1.2.1: {}
+
+ prettier-eslint@16.3.0:
+ dependencies:
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3)
+ common-tags: 1.8.2
+ dlv: 1.1.3
+ eslint: 8.57.0
+ indent-string: 4.0.0
+ lodash.merge: 4.6.2
+ loglevel-colored-level-prefix: 1.0.0
+ prettier: 3.2.5
+ pretty-format: 29.7.0
+ require-relative: 0.8.7
+ typescript: 5.3.3
+ vue-eslint-parser: 9.4.2(eslint@8.57.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ prettier-linter-helpers@1.0.0:
+ dependencies:
+ fast-diff: 1.3.0
+
+ prettier@3.2.5: {}
+
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ prismjs@1.29.0: {}
+
+ process@0.11.10: {}
+
+ progress@2.0.3: {}
+
+ proxy-from-env@1.1.0: {}
+
+ punycode.js@2.3.1: {}
+
+ punycode@1.4.1: {}
+
+ punycode@2.3.1: {}
+
+ qrcode@1.5.3:
+ dependencies:
+ dijkstrajs: 1.0.3
+ encode-utf8: 1.0.3
+ pngjs: 5.0.0
+ yargs: 15.4.1
+
+ qs@6.12.1:
+ dependencies:
+ side-channel: 1.0.6
+
+ query-string@4.3.4:
+ dependencies:
+ object-assign: 4.1.1
+ strict-uri-encode: 1.1.0
+
+ queue-microtask@1.2.3: {}
+
+ rd@2.0.1:
+ dependencies:
+ '@types/node': 10.17.60
+
+ react-is@18.3.1: {}
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ regenerate-unicode-properties@10.1.1:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regenerator-runtime@0.14.1: {}
+
+ regenerator-transform@0.15.2:
+ dependencies:
+ '@babel/runtime': 7.24.4
+
+ regex-not@1.0.2:
+ dependencies:
+ extend-shallow: 3.0.2
+ safe-regex: 1.1.0
+
+ regexp.prototype.flags@1.5.2:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ set-function-name: 2.0.2
+
+ regexpu-core@5.3.2:
+ dependencies:
+ '@babel/regjsgen': 0.8.0
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.1.1
+ regjsparser: 0.9.1
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.1.0
+
+ regjsparser@0.9.1:
+ dependencies:
+ jsesc: 0.5.0
+
+ remarkable-katex@1.2.1: {}
+
+ remarkable@2.0.1:
+ dependencies:
+ argparse: 1.0.10
+ autolinker: 3.16.2
+
+ repeat-element@1.1.4: {}
+
+ repeat-string@1.6.1: {}
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ require-main-filename@2.0.0: {}
+
+ require-relative@0.8.7: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-url@0.2.1: {}
+
+ resolve@1.22.8:
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ restore-cursor@4.0.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ ret@0.1.15: {}
+
+ reusify@1.0.4: {}
+
+ rfdc@1.3.1: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ rimraf@5.0.5:
+ dependencies:
+ glob: 10.3.12
+
+ robust-predicates@3.0.2: {}
+
+ rollup-plugin-purge-icons@0.10.0:
+ dependencies:
+ '@purge-icons/core': 0.10.0
+ '@purge-icons/generated': 0.10.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ rollup@2.79.1:
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ rollup@4.17.1:
+ dependencies:
+ '@types/estree': 1.0.5
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.17.1
+ '@rollup/rollup-android-arm64': 4.17.1
+ '@rollup/rollup-darwin-arm64': 4.17.1
+ '@rollup/rollup-darwin-x64': 4.17.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.17.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.17.1
+ '@rollup/rollup-linux-arm64-gnu': 4.17.1
+ '@rollup/rollup-linux-arm64-musl': 4.17.1
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.17.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.17.1
+ '@rollup/rollup-linux-s390x-gnu': 4.17.1
+ '@rollup/rollup-linux-x64-gnu': 4.17.1
+ '@rollup/rollup-linux-x64-musl': 4.17.1
+ '@rollup/rollup-win32-arm64-msvc': 4.17.1
+ '@rollup/rollup-win32-ia32-msvc': 4.17.1
+ '@rollup/rollup-win32-x64-msvc': 4.17.1
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ rust-result@1.0.0:
+ dependencies:
+ individual: 2.0.0
+
+ rw@1.3.3: {}
+
+ safe-array-concat@1.1.2:
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ isarray: 2.0.5
+
+ safe-buffer@5.2.1: {}
+
+ safe-json-parse@4.0.0:
+ dependencies:
+ rust-result: 1.0.0
+
+ safe-regex-test@1.0.3:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-regex: 1.1.4
+
+ safe-regex@1.1.0:
+ dependencies:
+ ret: 0.1.15
+
+ safer-buffer@2.1.2: {}
+
+ sass@1.75.0:
+ dependencies:
+ chokidar: 3.6.0
+ immutable: 4.3.5
+ source-map-js: 1.2.0
+
+ sax@1.3.0: {}
+
+ saxen@8.1.2: {}
+
+ scroll-into-view-if-needed@2.2.31:
+ dependencies:
+ compute-scroll-into-view: 1.0.20
+
+ scroll-tabs@1.0.1:
+ dependencies:
+ min-dash: 3.8.1
+ min-dom: 3.2.1
+ mitt: 1.2.0
+
+ scule@1.3.0: {}
+
+ selection-update@0.1.2: {}
+
+ semver@6.3.1: {}
+
+ semver@7.6.0:
+ dependencies:
+ lru-cache: 6.0.0
+
+ set-blocking@2.0.0: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ set-value@2.0.1:
+ dependencies:
+ extend-shallow: 2.0.1
+ is-extendable: 0.1.1
+ is-plain-object: 2.0.4
+ split-string: 3.1.0
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ side-channel@1.0.6:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.1
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ sirv@2.0.4:
+ dependencies:
+ '@polka/url': 1.0.0-next.25
+ mrmime: 2.0.0
+ totalist: 3.0.1
+
+ slash@3.0.0: {}
+
+ slate-history@0.66.0(slate@0.72.8):
+ dependencies:
+ is-plain-object: 5.0.0
+ slate: 0.72.8
+
+ slate@0.72.8:
+ dependencies:
+ immer: 9.0.21
+ is-plain-object: 5.0.0
+ tiny-warning: 1.0.3
+
+ slice-ansi@4.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+
+ slice-ansi@7.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+
+ snabbdom@3.6.2: {}
+
+ snapdragon-node@2.1.1:
+ dependencies:
+ define-property: 1.0.0
+ isobject: 3.0.1
+ snapdragon-util: 3.0.1
+
+ snapdragon-util@3.0.1:
+ dependencies:
+ kind-of: 3.2.2
+
+ snapdragon@0.8.2:
+ dependencies:
+ base: 0.11.2
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ map-cache: 0.2.2
+ source-map: 0.5.7
+ source-map-resolve: 0.5.3
+ use: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ sortablejs@1.14.0: {}
+
+ source-map-js@1.2.0: {}
+
+ source-map-resolve@0.5.3:
+ dependencies:
+ atob: 2.1.2
+ decode-uri-component: 0.2.2
+ resolve-url: 0.2.1
+ source-map-url: 0.4.1
+ urix: 0.1.0
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map-url@0.4.1: {}
+
+ source-map@0.5.7: {}
+
+ source-map@0.6.1: {}
+
+ split-string@3.1.0:
+ dependencies:
+ extend-shallow: 3.0.2
+
+ split2@4.2.0: {}
+
+ sprintf-js@1.0.3: {}
+
+ ssr-window@3.0.0: {}
+
+ stable@0.1.8: {}
+
+ static-extend@0.1.2:
+ dependencies:
+ define-property: 0.2.5
+ object-copy: 0.1.0
+
+ steady-xml@0.1.0: {}
+
+ strict-uri-encode@1.1.0: {}
+
+ string-argv@0.3.2: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string-width@7.1.0:
+ dependencies:
+ emoji-regex: 10.3.0
+ get-east-asian-width: 1.2.0
+ strip-ansi: 7.1.0
+
+ string.prototype.trim@1.2.9:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+
+ string.prototype.trimend@1.0.8:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@3.0.1:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.0.1
+
+ strip-final-newline@2.0.0: {}
+
+ strip-final-newline@3.0.0: {}
+
+ strip-json-comments@3.1.1: {}
+
+ strip-literal@1.3.0:
+ dependencies:
+ acorn: 8.11.3
+
+ strnum@1.0.5: {}
+
+ stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.4.0(typescript@5.3.3)):
+ dependencies:
+ postcss-html: 1.6.0
+ stylelint: 16.4.0(typescript@5.3.3)
+
+ stylelint-config-recommended@14.0.0(stylelint@16.4.0(typescript@5.3.3)):
+ dependencies:
+ stylelint: 16.4.0(typescript@5.3.3)
+
+ stylelint-config-standard@36.0.0(stylelint@16.4.0(typescript@5.3.3)):
+ dependencies:
+ stylelint: 16.4.0(typescript@5.3.3)
+ stylelint-config-recommended: 14.0.0(stylelint@16.4.0(typescript@5.3.3))
+
+ stylelint-order@6.0.4(stylelint@16.4.0(typescript@5.3.3)):
+ dependencies:
+ postcss: 8.4.38
+ postcss-sorting: 8.0.2(postcss@8.4.38)
+ stylelint: 16.4.0(typescript@5.3.3)
+
+ stylelint@16.4.0(typescript@5.3.3):
+ dependencies:
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4))(@csstools/css-tokenizer@2.2.4)
+ '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16)
+ '@dual-bundle/import-meta-resolve': 4.0.0
+ balanced-match: 2.0.0
+ colord: 2.9.3
+ cosmiconfig: 9.0.0(typescript@5.3.3)
+ css-functions-list: 3.2.2
+ css-tree: 2.3.1
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ fastest-levenshtein: 1.0.16
+ file-entry-cache: 8.0.0
+ global-modules: 2.0.0
+ globby: 11.1.0
+ globjoin: 0.1.4
+ html-tags: 3.3.1
+ ignore: 5.3.1
+ imurmurhash: 0.1.4
+ is-plain-object: 5.0.0
+ known-css-properties: 0.30.0
+ mathml-tag-names: 2.1.3
+ meow: 13.2.0
+ micromatch: 4.0.5
+ normalize-path: 3.0.0
+ picocolors: 1.0.0
+ postcss: 8.4.38
+ postcss-resolve-nested-selector: 0.1.1
+ postcss-safe-parser: 7.0.0(postcss@8.4.38)
+ postcss-selector-parser: 6.0.16
+ postcss-value-parser: 4.2.0
+ resolve-from: 5.0.0
+ string-width: 4.2.3
+ strip-ansi: 7.1.0
+ supports-hyperlinks: 3.0.0
+ svg-tags: 1.0.0
+ table: 6.8.2
+ write-file-atomic: 5.0.1
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ supports-color@2.0.0: {}
+
+ supports-color@3.2.3:
+ dependencies:
+ has-flag: 1.0.0
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-hyperlinks@3.0.0:
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svg-baker@1.7.0:
+ dependencies:
+ bluebird: 3.7.2
+ clone: 2.1.2
+ he: 1.2.0
+ image-size: 0.5.5
+ loader-utils: 1.4.2
+ merge-options: 1.0.1
+ micromatch: 3.1.0
+ postcss: 5.2.18
+ postcss-prefix-selector: 1.16.1(postcss@5.2.18)
+ posthtml-rename-id: 1.0.12
+ posthtml-svg-mode: 1.0.3
+ query-string: 4.3.4
+ traverse: 0.6.9
+ transitivePeerDependencies:
+ - supports-color
+
+ svg-tags@1.0.0: {}
+
+ svg.js@2.7.1: {}
+
+ svgo@2.8.0:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 4.3.0
+ css-tree: 1.1.3
+ csso: 4.2.0
+ picocolors: 1.0.0
+ stable: 0.1.8
+
+ synckit@0.8.8:
+ dependencies:
+ '@pkgr/core': 0.1.1
+ tslib: 2.6.2
+
+ systemjs@6.15.1: {}
+
+ table@6.8.2:
+ dependencies:
+ ajv: 8.12.0
+ lodash.truncate: 4.4.2
+ slice-ansi: 4.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ terser@5.30.4:
+ dependencies:
+ '@jridgewell/source-map': 0.3.6
+ acorn: 8.11.3
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ text-extensions@2.4.0: {}
+
+ text-table@0.2.0: {}
+
+ through@2.3.8: {}
+
+ tiny-svg@2.2.4: {}
+
+ tiny-svg@3.0.1: {}
+
+ tiny-warning@1.0.3: {}
+
+ to-fast-properties@2.0.0: {}
+
+ to-object-path@0.3.0:
+ dependencies:
+ kind-of: 3.2.2
+
+ to-regex-range@2.1.1:
+ dependencies:
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ to-regex@3.0.2:
+ dependencies:
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ regex-not: 1.0.2
+ safe-regex: 1.1.0
+
+ totalist@3.0.1: {}
+
+ tr46@0.0.3: {}
+
+ traverse@0.6.9:
+ dependencies:
+ gopd: 1.0.1
+ typedarray.prototype.slice: 1.0.3
+ which-typed-array: 1.1.15
+
+ ts-api-utils@1.3.0(typescript@5.3.3):
+ dependencies:
+ typescript: 5.3.3
+
+ tslib@2.3.0: {}
+
+ tslib@2.6.2: {}
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-fest@0.20.2: {}
+
+ type@2.7.2: {}
+
+ typed-array-buffer@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-typed-array: 1.1.13
+
+ typed-array-byte-length@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+
+ typed-array-byte-offset@1.0.2:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+
+ typed-array-length@1.0.6:
+ dependencies:
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ possible-typed-array-names: 1.0.0
+
+ typedarray.prototype.slice@1.0.3:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ typed-array-buffer: 1.0.2
+ typed-array-byte-offset: 1.0.2
+
+ typescript@5.3.3: {}
+
+ uc.micro@2.1.0: {}
+
+ ufo@1.5.3: {}
+
+ unbox-primitive@1.0.2:
+ dependencies:
+ call-bind: 1.0.7
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+
+ unconfig@0.3.13:
+ dependencies:
+ '@antfu/utils': 0.7.7
+ defu: 6.1.4
+ jiti: 1.21.0
+
+ undici-types@5.26.5: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.0: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.0
+ unicode-property-aliases-ecmascript: 2.1.0
+
+ unicode-match-property-value-ecmascript@2.1.0: {}
+
+ unicode-property-aliases-ecmascript@2.1.0: {}
+
+ unicorn-magic@0.1.0: {}
+
+ unimport@3.7.1(rollup@4.17.1):
+ dependencies:
+ '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+ acorn: 8.11.3
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ fast-glob: 3.3.2
+ local-pkg: 0.5.0
+ magic-string: 0.30.10
+ mlly: 1.6.1
+ pathe: 1.1.2
+ pkg-types: 1.1.0
+ scule: 1.3.0
+ strip-literal: 1.3.0
+ unplugin: 1.10.1
+ transitivePeerDependencies:
+ - rollup
+
+ union-value@1.0.1:
+ dependencies:
+ arr-union: 3.1.0
+ get-value: 2.0.6
+ is-extendable: 0.1.1
+ set-value: 2.0.1
+
+ universalify@2.0.1: {}
+
+ unocss@0.58.9(postcss@8.4.38)(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ '@unocss/astro': 0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ '@unocss/cli': 0.58.9(rollup@4.17.1)
+ '@unocss/core': 0.58.9
+ '@unocss/extractor-arbitrary-variants': 0.58.9
+ '@unocss/postcss': 0.58.9(postcss@8.4.38)
+ '@unocss/preset-attributify': 0.58.9
+ '@unocss/preset-icons': 0.58.9
+ '@unocss/preset-mini': 0.58.9
+ '@unocss/preset-tagify': 0.58.9
+ '@unocss/preset-typography': 0.58.9
+ '@unocss/preset-uno': 0.58.9
+ '@unocss/preset-web-fonts': 0.58.9
+ '@unocss/preset-wind': 0.58.9
+ '@unocss/reset': 0.58.9
+ '@unocss/transformer-attributify-jsx': 0.58.9
+ '@unocss/transformer-attributify-jsx-babel': 0.58.9
+ '@unocss/transformer-compile-class': 0.58.9
+ '@unocss/transformer-directives': 0.58.9
+ '@unocss/transformer-variant-group': 0.58.9
+ '@unocss/vite': 0.58.9(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4))
+ optionalDependencies:
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - postcss
+ - rollup
+ - supports-color
+
+ unplugin-auto-import@0.16.7(@vueuse/core@10.9.0(vue@3.4.21(typescript@5.3.3)))(rollup@4.17.1):
+ dependencies:
+ '@antfu/utils': 0.7.7
+ '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+ fast-glob: 3.3.2
+ local-pkg: 0.5.0
+ magic-string: 0.30.10
+ minimatch: 9.0.4
+ unimport: 3.7.1(rollup@4.17.1)
+ unplugin: 1.10.1
+ optionalDependencies:
+ '@vueuse/core': 10.9.0(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - rollup
+
+ unplugin-element-plus@0.8.0(rollup@4.17.1):
+ dependencies:
+ '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+ es-module-lexer: 1.5.2
+ magic-string: 0.30.10
+ unplugin: 1.10.1
+ transitivePeerDependencies:
+ - rollup
+
+ unplugin-vue-components@0.25.2(@babel/parser@7.24.4)(rollup@4.17.1)(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ '@antfu/utils': 0.7.7
+ '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+ chokidar: 3.6.0
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ local-pkg: 0.4.3
+ magic-string: 0.30.10
+ minimatch: 9.0.4
+ resolve: 1.22.8
+ unplugin: 1.10.1
+ vue: 3.4.21(typescript@5.3.3)
+ optionalDependencies:
+ '@babel/parser': 7.24.4
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+
+ unplugin@1.10.1:
+ dependencies:
+ acorn: 8.11.3
+ chokidar: 3.6.0
+ webpack-sources: 3.2.3
+ webpack-virtual-modules: 0.6.1
+
+ unset-value@1.0.0:
+ dependencies:
+ has-value: 0.3.1
+ isobject: 3.0.1
+
+ update-browserslist-db@1.0.13(browserslist@4.23.0):
+ dependencies:
+ browserslist: 4.23.0
+ escalade: 3.1.2
+ picocolors: 1.0.0
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ urix@0.1.0: {}
+
+ url-toolkit@2.2.5: {}
+
+ url@0.11.3:
+ dependencies:
+ punycode: 1.4.1
+ qs: 6.12.1
+
+ use@3.1.1: {}
+
+ util-deprecate@1.0.2: {}
+
+ utility-types@3.11.0: {}
+
+ uuid@9.0.1: {}
+
+ vary@1.1.2: {}
+
+ video.js@7.21.5:
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@videojs/http-streaming': 2.16.2(video.js@7.21.5)
+ '@videojs/vhs-utils': 3.0.5
+ '@videojs/xhr': 2.6.0
+ aes-decrypter: 3.1.3
+ global: 4.4.0
+ keycode: 2.2.1
+ m3u8-parser: 4.8.0
+ mpd-parser: 0.22.1
+ mux.js: 6.0.1
+ safe-json-parse: 4.0.0
+ videojs-font: 3.2.0
+ videojs-vtt.js: 0.15.5
+
+ videojs-font@3.2.0: {}
+
+ videojs-vtt.js@0.15.5:
+ dependencies:
+ global: 4.4.0
+
+ vite-plugin-compression@0.5.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ chalk: 4.1.2
+ debug: 4.3.4
+ fs-extra: 10.1.0
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ vite-plugin-ejs@1.7.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ ejs: 3.1.10
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+
+ vite-plugin-eslint@1.8.1(eslint@8.57.0)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ '@rollup/pluginutils': 4.2.1
+ '@types/eslint': 8.56.10
+ eslint: 8.57.0
+ rollup: 2.79.1
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+
+ vite-plugin-progress@0.0.7(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ picocolors: 1.0.0
+ progress: 2.0.3
+ rd: 2.0.1
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+
+ vite-plugin-purge-icons@0.10.0(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ '@purge-icons/core': 0.10.0
+ '@purge-icons/generated': 0.10.0
+ rollup-plugin-purge-icons: 0.10.0
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ vite-plugin-svg-icons@2.0.1(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ '@types/svgo': 2.6.4
+ cors: 2.8.5
+ debug: 4.3.4
+ etag: 1.8.1
+ fs-extra: 10.1.0
+ pathe: 0.2.0
+ svg-baker: 1.7.0
+ svgo: 2.8.0
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ vite-plugin-top-level-await@1.4.1(rollup@4.17.1)(vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)):
+ dependencies:
+ '@rollup/plugin-virtual': 3.0.2(rollup@4.17.1)
+ '@swc/core': 1.4.17
+ uuid: 9.0.1
+ vite: 5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4)
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ - rollup
+
+ vite@5.1.4(@types/node@20.12.7)(sass@1.75.0)(terser@5.30.4):
+ dependencies:
+ esbuild: 0.19.12
+ postcss: 8.4.38
+ rollup: 4.17.1
+ optionalDependencies:
+ '@types/node': 20.12.7
+ fsevents: 2.3.3
+ sass: 1.75.0
+ terser: 5.30.4
+
+ vue-demi@0.14.10(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ vue: 3.4.21(typescript@5.3.3)
+
+ vue-demi@0.14.7(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ vue: 3.4.21(typescript@5.3.3)
+
+ vue-dompurify-html@4.1.4(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ dompurify: 3.1.1
+ vue: 3.4.21(typescript@5.3.3)
+ vue-demi: 0.14.7(vue@3.4.21(typescript@5.3.3))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+
+ vue-eslint-parser@9.4.2(eslint@8.57.0):
+ dependencies:
+ debug: 4.3.4
+ eslint: 8.57.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ lodash: 4.17.21
+ semver: 7.6.0
+ transitivePeerDependencies:
+ - supports-color
+
+ vue-i18n@9.10.2(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ '@intlify/core-base': 9.10.2
+ '@intlify/shared': 9.10.2
+ '@vue/devtools-api': 6.6.1
+ vue: 3.4.21(typescript@5.3.3)
+
+ vue-router@4.3.2(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ '@vue/devtools-api': 6.6.1
+ vue: 3.4.21(typescript@5.3.3)
+
+ vue-template-compiler@2.7.16:
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
+ vue-tsc@1.8.27(typescript@5.3.3):
+ dependencies:
+ '@volar/typescript': 1.11.1
+ '@vue/language-core': 1.8.27(typescript@5.3.3)
+ semver: 7.6.0
+ typescript: 5.3.3
+
+ vue-types@5.1.1(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ is-plain-object: 5.0.0
+ optionalDependencies:
+ vue: 3.4.21(typescript@5.3.3)
+
+ vue@3.4.21(typescript@5.3.3):
+ dependencies:
+ '@vue/compiler-dom': 3.4.21
+ '@vue/compiler-sfc': 3.4.21
+ '@vue/runtime-dom': 3.4.21
+ '@vue/server-renderer': 3.4.21(vue@3.4.21(typescript@5.3.3))
+ '@vue/shared': 3.4.21
+ optionalDependencies:
+ typescript: 5.3.3
+
+ vuedraggable@4.1.0(vue@3.4.21(typescript@5.3.3)):
+ dependencies:
+ sortablejs: 1.14.0
+ vue: 3.4.21(typescript@5.3.3)
+
+ vxe-pc-ui@4.1.30:
+ dependencies:
+ '@vxe-ui/core': 4.0.12
+
+ vxe-table@4.7.80:
+ dependencies:
+ vxe-pc-ui: 4.1.30
+
+ wangeditor@4.7.15:
+ dependencies:
+ '@babel/runtime': 7.24.4
+ '@babel/runtime-corejs3': 7.24.4
+ tslib: 2.6.2
+
+ web-storage-cache@1.1.1: {}
+
+ webidl-conversions@3.0.1: {}
+
+ webpack-sources@3.2.3: {}
+
+ webpack-virtual-modules@0.6.1: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which-boxed-primitive@1.0.2:
+ dependencies:
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+
+ which-module@2.0.1: {}
+
+ which-typed-array@1.1.15:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wildcard@1.1.2: {}
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrap-ansi@9.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.1.0
+ strip-ansi: 7.1.0
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@5.0.1:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 4.1.0
+
+ xe-utils@3.5.30: {}
+
+ xml-js@1.6.11:
+ dependencies:
+ sax: 1.3.0
+
+ xml-name-validator@4.0.0: {}
+
+ y18n@4.0.3: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yallist@4.0.0: {}
+
+ yaml-eslint-parser@1.2.2:
+ dependencies:
+ eslint-visitor-keys: 3.4.3
+ lodash: 4.17.21
+ yaml: 2.4.2
+
+ yaml@2.3.4: {}
+
+ yaml@2.4.2: {}
+
+ yargs-parser@18.1.3:
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+
+ yargs-parser@21.1.1: {}
+
+ yargs@15.4.1:
+ dependencies:
+ cliui: 6.0.0
+ decamelize: 1.2.0
+ find-up: 4.1.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ require-main-filename: 2.0.0
+ set-blocking: 2.0.0
+ string-width: 4.2.3
+ which-module: 2.0.1
+ y18n: 4.0.3
+ yargs-parser: 18.1.3
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.2
+ 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: {}
+
+ yocto-queue@1.0.0: {}
+
+ zrender@5.5.0:
+ dependencies:
+ tslib: 2.3.0
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..961986e
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ plugins: {
+ autoprefixer: {}
+ }
+}
diff --git a/prettier.config.js b/prettier.config.js
new file mode 100644
index 0000000..b014bbf
--- /dev/null
+++ b/prettier.config.js
@@ -0,0 +1,22 @@
+module.exports = {
+ printWidth: 100, // 每行代码长度(默认80)
+ tabWidth: 2, // 每个tab相当于多少个空格(默认2)ab进行缩进(默认false)
+ useTabs: false, // 是否使用tab
+ semi: false, // 声明结尾使用分号(默认true)
+ vueIndentScriptAndStyle: false,
+ singleQuote: true, // 使用单引号(默认false)
+ quoteProps: 'as-needed',
+ bracketSpacing: true, // 对象字面量的大括号间使用空格(默认true)
+ trailingComma: 'none', // 多行使用拖尾逗号(默认none)
+ jsxSingleQuote: false,
+ // 箭头函数参数括号 默认avoid 可选 avoid| always
+ // avoid 能省略括号的时候就省略 例如x => x
+ // always 总是有括号
+ arrowParens: 'always',
+ insertPragma: false,
+ requirePragma: false,
+ proseWrap: 'never',
+ htmlWhitespaceSensitivity: 'strict',
+ endOfLine: 'auto',
+ rangeStart: 0
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..5a7de08
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/home.png b/public/home.png
new file mode 100644
index 0000000..ccd4145
Binary files /dev/null and b/public/home.png differ
diff --git a/public/logo.gif b/public/logo.gif
new file mode 100644
index 0000000..fdbd32c
Binary files /dev/null and b/public/logo.gif differ
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..1f5f36d
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
diff --git a/src/api/ai/chat/conversation/index.ts b/src/api/ai/chat/conversation/index.ts
new file mode 100644
index 0000000..6ce4482
--- /dev/null
+++ b/src/api/ai/chat/conversation/index.ts
@@ -0,0 +1,65 @@
+import request from '@/config/axios'
+
+// AI 聊天对话 VO
+export interface ChatConversationVO {
+ id: number // ID 编号
+ userId: number // 用户编号
+ title: string // 对话标题
+ pinned: boolean // 是否置顶
+ roleId: number // 角色编号
+ modelId: number // 模型编号
+ model: string // 模型标志
+ temperature: number // 温度参数
+ maxTokens: number // 单条回复的最大 Token 数量
+ maxContexts: number // 上下文的最大 Message 数量
+ createTime?: Date // 创建时间
+ // 额外字段
+ systemMessage?: string // 角色设定
+ modelName?: string // 模型名字
+ roleAvatar?: string // 角色头像
+ modelMaxTokens?: string // 模型的单条回复的最大 Token 数量
+ modelMaxContexts?: string // 模型的上下文的最大 Message 数量
+}
+
+// AI 聊天对话 API
+export const ChatConversationApi = {
+ // 获得【我的】聊天对话
+ getChatConversationMy: async (id: number) => {
+ return await request.get({ url: `/ai/chat/conversation/get-my?id=${id}` })
+ },
+
+ // 新增【我的】聊天对话
+ createChatConversationMy: async (data?: ChatConversationVO) => {
+ return await request.post({ url: `/ai/chat/conversation/create-my`, data })
+ },
+
+ // 更新【我的】聊天对话
+ updateChatConversationMy: async (data: ChatConversationVO) => {
+ return await request.put({ url: `/ai/chat/conversation/update-my`, data })
+ },
+
+ // 删除【我的】聊天对话
+ deleteChatConversationMy: async (id: string) => {
+ return await request.delete({ url: `/ai/chat/conversation/delete-my?id=${id}` })
+ },
+
+ // 删除【我的】所有对话,置顶除外
+ deleteChatConversationMyByUnpinned: async () => {
+ return await request.delete({ url: `/ai/chat/conversation/delete-by-unpinned` })
+ },
+
+ // 获得【我的】聊天对话列表
+ getChatConversationMyList: async () => {
+ return await request.get({ url: `/ai/chat/conversation/my-list` })
+ },
+
+ // 获得对话分页
+ getChatConversationPage: async (params: any) => {
+ return await request.get({ url: `/ai/chat/conversation/page`, params })
+ },
+
+ // 管理员删除消息
+ deleteChatConversationByAdmin: async (id: number) => {
+ return await request.delete({ url: `/ai/chat/conversation/delete-by-admin?id=${id}` })
+ }
+}
diff --git a/src/api/ai/chat/message/index.ts b/src/api/ai/chat/message/index.ts
new file mode 100644
index 0000000..ef1196a
--- /dev/null
+++ b/src/api/ai/chat/message/index.ts
@@ -0,0 +1,83 @@
+import request from '@/config/axios'
+import { fetchEventSource } from '@microsoft/fetch-event-source'
+import { getAccessToken } from '@/utils/auth'
+import { config } from '@/config/axios/config'
+
+// 聊天VO
+export interface ChatMessageVO {
+ id: number // 编号
+ conversationId: number // 对话编号
+ type: string // 消息类型
+ userId: string // 用户编号
+ roleId: string // 角色编号
+ model: number // 模型标志
+ modelId: number // 模型编号
+ content: string // 聊天内容
+ tokens: number // 消耗 Token 数量
+ createTime: Date // 创建时间
+ roleAvatar: string // 角色头像
+ userAvatar: string // 创建时间
+}
+
+// AI chat 聊天
+export const ChatMessageApi = {
+ // 消息列表
+ getChatMessageListByConversationId: async (conversationId: number | null) => {
+ return await request.get({
+ url: `/ai/chat/message/list-by-conversation-id?conversationId=${conversationId}`
+ })
+ },
+
+ // 发送 Stream 消息
+ // 为什么不用 axios 呢?因为它不支持 SSE 调用
+ sendChatMessageStream: async (
+ conversationId: number,
+ content: string,
+ ctrl,
+ enableContext: boolean,
+ onMessage,
+ onError,
+ onClose
+ ) => {
+ const token = getAccessToken()
+ return fetchEventSource(`${config.base_url}/ai/chat/message/send-stream`, {
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${token}`
+ },
+ openWhenHidden: true,
+ body: JSON.stringify({
+ conversationId,
+ content,
+ useContext: enableContext
+ }),
+ onmessage: onMessage,
+ onerror: onError,
+ onclose: onClose,
+ signal: ctrl.signal
+ })
+ },
+
+ // 删除消息
+ deleteChatMessage: async (id: string) => {
+ return await request.delete({ url: `/ai/chat/message/delete?id=${id}` })
+ },
+
+ // 删除指定对话的消息
+ deleteByConversationId: async (conversationId: number) => {
+ return await request.delete({
+ url: `/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}`
+ })
+ },
+
+ // 获得消息分页
+ getChatMessagePage: async (params: any) => {
+ return await request.get({ url: '/ai/chat/message/page', params })
+ },
+
+ // 管理员删除消息
+ deleteChatMessageByAdmin: async (id: number) => {
+ return await request.delete({ url: `/ai/chat/message/delete-by-admin?id=${id}` })
+ }
+}
diff --git a/src/api/ai/image/index.ts b/src/api/ai/image/index.ts
new file mode 100644
index 0000000..2f276c7
--- /dev/null
+++ b/src/api/ai/image/index.ts
@@ -0,0 +1,103 @@
+import request from '@/config/axios'
+
+// AI 绘图 VO
+export interface ImageVO {
+ id: number // 编号
+ platform: string // 平台
+ model: string // 模型
+ prompt: string // 提示词
+ width: number // 图片宽度
+ height: number // 图片高度
+ status: number // 状态
+ publicStatus: boolean // 公开状态
+ picUrl: string // 任务地址
+ errorMessage: string // 错误信息
+ options: any // 配置 Map
+ taskId: number // 任务编号
+ buttons: ImageMidjourneyButtonsVO[] // mj 操作按钮
+ createTime: Date // 创建时间
+ finishTime: Date // 完成时间
+}
+
+export interface ImageDrawReqVO {
+ platform: string // 平台
+ prompt: string // 提示词
+ model: string // 模型
+ style: string // 图像生成的风格
+ width: string // 图片宽度
+ height: string // 图片高度
+ options: object // 绘制参数,Map
+}
+
+export interface ImageMidjourneyImagineReqVO {
+ prompt: string // 提示词
+ model: string // 模型 mj nijj
+ base64Array: string[] // size不能为空
+ width: string // 图片宽度
+ height: string // 图片高度
+ version: string // 版本
+}
+
+export interface ImageMidjourneyActionVO {
+ id: number // 图片编号
+ customId: string // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 动作标识
+}
+
+export interface ImageMidjourneyButtonsVO {
+ customId: string // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 动作标识
+ emoji: string // 图标 emoji
+ label: string // Make Variations 文本
+ style: number // 样式: 2(Primary)、3(Green)
+}
+
+// AI 图片 API
+export const ImageApi = {
+ // 获取【我的】绘图分页
+ getImagePageMy: async (params: any) => {
+ return await request.get({ url: `/ai/image/my-page`, params })
+ },
+ // 获取【我的】绘图记录
+ getImageMy: async (id: number) => {
+ return await request.get({ url: `/ai/image/get-my?id=${id}` })
+ },
+ // 获取【我的】绘图记录列表
+ getImageListMyByIds: async (ids: number[]) => {
+ return await request.get({ url: `/ai/image/my-list-by-ids`, params: { ids: ids.join(',') } })
+ },
+ // 生成图片
+ drawImage: async (data: ImageDrawReqVO) => {
+ return await request.post({ url: `/ai/image/draw`, data })
+ },
+ // 删除【我的】绘画记录
+ deleteImageMy: async (id: number) => {
+ return await request.delete({ url: `/ai/image/delete-my?id=${id}` })
+ },
+
+ // ================ midjourney 专属 ================
+
+ // 【Midjourney】生成图片
+ midjourneyImagine: async (data: ImageMidjourneyImagineReqVO) => {
+ return await request.post({ url: `/ai/image/midjourney/imagine`, data })
+ },
+ // 【Midjourney】Action 操作(二次生成图片)
+ midjourneyAction: async (data: ImageMidjourneyActionVO) => {
+ return await request.post({ url: `/ai/image/midjourney/action`, data })
+ },
+
+ // ================ 绘图管理 ================
+
+ // 查询绘画分页
+ getImagePage: async (params: any) => {
+ return await request.get({ url: `/ai/image/page`, params })
+ },
+
+ // 更新绘画发布状态
+ updateImage: async (data: any) => {
+ return await request.put({ url: '/ai/image/update', data })
+ },
+
+ // 删除绘画
+ deleteImage: async (id: number) => {
+ return await request.delete({ url: `/ai/image/delete?id=` + id })
+ }
+}
diff --git a/src/api/ai/mindmap/index.ts b/src/api/ai/mindmap/index.ts
new file mode 100644
index 0000000..1b784fa
--- /dev/null
+++ b/src/api/ai/mindmap/index.ts
@@ -0,0 +1,60 @@
+import { getAccessToken } from '@/utils/auth'
+import { fetchEventSource } from '@microsoft/fetch-event-source'
+import { config } from '@/config/axios/config'
+import request from '@/config/axios'
+
+// AI 思维导图 VO
+export interface MindMapVO {
+ id: number // 编号
+ userId: number // 用户编号
+ prompt: string // 生成内容提示
+ generatedContent: string // 生成的思维导图内容
+ platform: string // 平台
+ model: string // 模型
+ errorMessage: string // 错误信息
+}
+
+// AI 思维导图生成 VO
+export interface AiMindMapGenerateReqVO {
+ prompt: string
+}
+
+export const AiMindMapApi = {
+ generateMindMap: ({
+ data,
+ onClose,
+ onMessage,
+ onError,
+ ctrl
+ }: {
+ data: AiMindMapGenerateReqVO
+ onMessage?: (res: any) => void
+ onError?: (...args: any[]) => void
+ onClose?: (...args: any[]) => void
+ ctrl: AbortController
+ }) => {
+ const token = getAccessToken()
+ return fetchEventSource(`${config.base_url}/ai/mind-map/generate-stream`, {
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${token}`
+ },
+ openWhenHidden: true,
+ body: JSON.stringify(data),
+ onmessage: onMessage,
+ onerror: onError,
+ onclose: onClose,
+ signal: ctrl.signal
+ })
+ },
+
+ // 查询思维导图分页
+ getMindMapPage: async (params: any) => {
+ return await request.get({ url: `/ai/mind-map/page`, params })
+ },
+ // 删除思维导图
+ deleteMindMap: async (id: number) => {
+ return await request.delete({ url: `/ai/mind-map/delete?id=` + id })
+ }
+}
diff --git a/src/api/ai/model/apiKey/index.ts b/src/api/ai/model/apiKey/index.ts
new file mode 100644
index 0000000..ed94836
--- /dev/null
+++ b/src/api/ai/model/apiKey/index.ts
@@ -0,0 +1,44 @@
+import request from '@/config/axios'
+
+// AI API 密钥 VO
+export interface ApiKeyVO {
+ id: number // 编号
+ name: string // 名称
+ apiKey: string // 密钥
+ platform: string // 平台
+ url: string // 自定义 API 地址
+ status: number // 状态
+}
+
+// AI API 密钥 API
+export const ApiKeyApi = {
+ // 查询 API 密钥分页
+ getApiKeyPage: async (params: any) => {
+ return await request.get({ url: `/ai/api-key/page`, params })
+ },
+
+ // 获得 API 密钥列表
+ getApiKeySimpleList: async () => {
+ return await request.get({ url: `/ai/api-key/simple-list` })
+ },
+
+ // 查询 API 密钥详情
+ getApiKey: async (id: number) => {
+ return await request.get({ url: `/ai/api-key/get?id=` + id })
+ },
+
+ // 新增 API 密钥
+ createApiKey: async (data: ApiKeyVO) => {
+ return await request.post({ url: `/ai/api-key/create`, data })
+ },
+
+ // 修改 API 密钥
+ updateApiKey: async (data: ApiKeyVO) => {
+ return await request.put({ url: `/ai/api-key/update`, data })
+ },
+
+ // 删除 API 密钥
+ deleteApiKey: async (id: number) => {
+ return await request.delete({ url: `/ai/api-key/delete?id=` + id })
+ }
+}
diff --git a/src/api/ai/model/chatModel/index.ts b/src/api/ai/model/chatModel/index.ts
new file mode 100644
index 0000000..c2ef4c8
--- /dev/null
+++ b/src/api/ai/model/chatModel/index.ts
@@ -0,0 +1,53 @@
+import request from '@/config/axios'
+
+// AI 聊天模型 VO
+export interface ChatModelVO {
+ id: number // 编号
+ keyId: number // API 秘钥编号
+ name: string // 模型名字
+ model: string // 模型标识
+ platform: string // 模型平台
+ sort: number // 排序
+ status: number // 状态
+ temperature: number // 温度参数
+ maxTokens: number // 单条回复的最大 Token 数量
+ maxContexts: number // 上下文的最大 Message 数量
+}
+
+// AI 聊天模型 API
+export const ChatModelApi = {
+ // 查询聊天模型分页
+ getChatModelPage: async (params: any) => {
+ return await request.get({ url: `/ai/chat-model/page`, params })
+ },
+
+ // 获得聊天模型列表
+ getChatModelSimpleList: async (status?: number) => {
+ return await request.get({
+ url: `/ai/chat-model/simple-list`,
+ params: {
+ status
+ }
+ })
+ },
+
+ // 查询聊天模型详情
+ getChatModel: async (id: number) => {
+ return await request.get({ url: `/ai/chat-model/get?id=` + id })
+ },
+
+ // 新增聊天模型
+ createChatModel: async (data: ChatModelVO) => {
+ return await request.post({ url: `/ai/chat-model/create`, data })
+ },
+
+ // 修改聊天模型
+ updateChatModel: async (data: ChatModelVO) => {
+ return await request.put({ url: `/ai/chat-model/update`, data })
+ },
+
+ // 删除聊天模型
+ deleteChatModel: async (id: number) => {
+ return await request.delete({ url: `/ai/chat-model/delete?id=` + id })
+ }
+}
diff --git a/src/api/ai/model/chatRole/index.ts b/src/api/ai/model/chatRole/index.ts
new file mode 100644
index 0000000..a9fce13
--- /dev/null
+++ b/src/api/ai/model/chatRole/index.ts
@@ -0,0 +1,80 @@
+import request from '@/config/axios'
+
+// AI 聊天角色 VO
+export interface ChatRoleVO {
+ id: number // 角色编号
+ modelId: number // 模型编号
+ name: string // 角色名称
+ avatar: string // 角色头像
+ category: string // 角色类别
+ sort: number // 角色排序
+ description: string // 角色描述
+ systemMessage: string // 角色设定
+ welcomeMessage: string // 角色设定
+ publicStatus: boolean // 是否公开
+ status: number // 状态
+}
+
+// AI 聊天角色 分页请求 vo
+export interface ChatRolePageReqVO {
+ name?: string // 角色名称
+ category?: string // 角色类别
+ publicStatus: boolean // 是否公开
+ pageNo: number // 是否公开
+ pageSize: number // 是否公开
+}
+
+// AI 聊天角色 API
+export const ChatRoleApi = {
+ // 查询聊天角色分页
+ getChatRolePage: async (params: any) => {
+ return await request.get({ url: `/ai/chat-role/page`, params })
+ },
+
+ // 查询聊天角色详情
+ getChatRole: async (id: number) => {
+ return await request.get({ url: `/ai/chat-role/get?id=` + id })
+ },
+
+ // 新增聊天角色
+ createChatRole: async (data: ChatRoleVO) => {
+ return await request.post({ url: `/ai/chat-role/create`, data })
+ },
+
+ // 修改聊天角色
+ updateChatRole: async (data: ChatRoleVO) => {
+ return await request.put({ url: `/ai/chat-role/update`, data })
+ },
+
+ // 删除聊天角色
+ deleteChatRole: async (id: number) => {
+ return await request.delete({ url: `/ai/chat-role/delete?id=` + id })
+ },
+
+ // ======= chat 聊天
+
+ // 获取 my role
+ getMyPage: async (params: ChatRolePageReqVO) => {
+ return await request.get({ url: `/ai/chat-role/my-page`, params})
+ },
+
+ // 获取角色分类
+ getCategoryList: async () => {
+ return await request.get({ url: `/ai/chat-role/category-list`})
+ },
+
+ // 创建角色
+ createMy: async (data: ChatRoleVO) => {
+ return await request.post({ url: `/ai/chat-role/create-my`, data})
+ },
+
+ // 更新角色
+ updateMy: async (data: ChatRoleVO) => {
+ return await request.put({ url: `/ai/chat-role/update-my`, data})
+ },
+
+ // 删除角色 my
+ deleteMy: async (id: number) => {
+ return await request.delete({ url: `/ai/chat-role/delete-my?id=` + id })
+ },
+}
diff --git a/src/api/ai/music/index.ts b/src/api/ai/music/index.ts
new file mode 100644
index 0000000..74b8526
--- /dev/null
+++ b/src/api/ai/music/index.ts
@@ -0,0 +1,41 @@
+import request from '@/config/axios'
+
+// AI 音乐 VO
+export interface MusicVO {
+ id: number // 编号
+ userId: number // 用户编号
+ title: string // 音乐名称
+ lyric: string // 歌词
+ imageUrl: string // 图片地址
+ audioUrl: string // 音频地址
+ videoUrl: string // 视频地址
+ status: number // 音乐状态
+ gptDescriptionPrompt: string // 描述词
+ prompt: string // 提示词
+ platform: string // 模型平台
+ model: string // 模型
+ generateMode: number // 生成模式
+ tags: string // 音乐风格标签
+ duration: number // 音乐时长
+ publicStatus: boolean // 是否发布
+ taskId: string // 任务id
+ errorMessage: string // 错误信息
+}
+
+// AI 音乐 API
+export const MusicApi = {
+ // 查询音乐分页
+ getMusicPage: async (params: any) => {
+ return await request.get({ url: `/ai/music/page`, params })
+ },
+
+ // 更新音乐
+ updateMusic: async (data: any) => {
+ return await request.put({ url: '/ai/music/update', data })
+ },
+
+ // 删除音乐
+ deleteMusic: async (id: number) => {
+ return await request.delete({ url: `/ai/music/delete?id=` + id })
+ }
+}
diff --git a/src/api/ai/write/index.ts b/src/api/ai/write/index.ts
new file mode 100644
index 0000000..013f998
--- /dev/null
+++ b/src/api/ai/write/index.ts
@@ -0,0 +1,85 @@
+import { fetchEventSource } from '@microsoft/fetch-event-source'
+
+import { getAccessToken } from '@/utils/auth'
+import { config } from '@/config/axios/config'
+import { AiWriteTypeEnum } from '@/views/ai/utils/constants'
+import request from '@/config/axios'
+
+export interface WriteVO {
+ type: AiWriteTypeEnum.WRITING | AiWriteTypeEnum.REPLY // 1:撰写 2:回复
+ prompt: string // 写作内容提示 1。撰写 2回复
+ originalContent: string // 原文
+ length: number // 长度
+ format: number // 格式
+ tone: number // 语气
+ language: number // 语言
+ userId?: number // 用户编号
+ platform?: string // 平台
+ model?: string // 模型
+ generatedContent?: string // 生成的内容
+ errorMessage?: string // 错误信息
+ createTime?: Date // 创建时间
+}
+
+export interface AiWritePageReqVO extends PageParam {
+ userId?: number // 用户编号
+ type?: AiWriteTypeEnum // 写作类型
+ platform?: string // 平台
+ createTime?: [string, string] // 创建时间
+}
+
+export interface AiWriteRespVo {
+ id: number
+ userId: number
+ type: number
+ platform: string
+ model: string
+ prompt: string
+ generatedContent: string
+ originalContent: string
+ length: number
+ format: number
+ tone: number
+ language: number
+ errorMessage: string
+ createTime: string
+}
+
+export const WriteApi = {
+ writeStream: ({
+ data,
+ onClose,
+ onMessage,
+ onError,
+ ctrl
+ }: {
+ data: WriteVO
+ onMessage?: (res: any) => void
+ onError?: (...args: any[]) => void
+ onClose?: (...args: any[]) => void
+ ctrl: AbortController
+ }) => {
+ const token = getAccessToken()
+ return fetchEventSource(`${config.base_url}/ai/write/generate-stream`, {
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${token}`
+ },
+ openWhenHidden: true,
+ body: JSON.stringify(data),
+ onmessage: onMessage,
+ onerror: onError,
+ onclose: onClose,
+ signal: ctrl.signal
+ })
+ },
+ // 获取写作列表
+ getWritePage: (params: AiWritePageReqVO) => {
+ return request.get>({ url: `/ai/write/page`, params })
+ },
+ // 删除写作
+ deleteWrite(id: number) {
+ return request.delete({ url: `/ai/write/delete`, params: { id } })
+ }
+}
diff --git a/src/api/bpm/activity/index.ts b/src/api/bpm/activity/index.ts
new file mode 100644
index 0000000..870d0d6
--- /dev/null
+++ b/src/api/bpm/activity/index.ts
@@ -0,0 +1,8 @@
+import request from '@/config/axios'
+
+export const getActivityList = async (params) => {
+ return await request.get({
+ url: '/bpm/activity/list',
+ params
+ })
+}
diff --git a/src/api/bpm/category/index.ts b/src/api/bpm/category/index.ts
new file mode 100644
index 0000000..d1e109c
--- /dev/null
+++ b/src/api/bpm/category/index.ts
@@ -0,0 +1,43 @@
+import request from '@/config/axios'
+
+// BPM 流程分类 VO
+export interface CategoryVO {
+ id: number // 分类编号
+ name: string // 分类名
+ code: string // 分类标志
+ status: number // 分类状态
+ sort: number // 分类排序
+}
+
+// BPM 流程分类 API
+export const CategoryApi = {
+ // 查询流程分类分页
+ getCategoryPage: async (params: any) => {
+ return await request.get({ url: `/bpm/category/page`, params })
+ },
+
+ // 查询流程分类列表
+ getCategorySimpleList: async () => {
+ return await request.get({ url: `/bpm/category/simple-list` })
+ },
+
+ // 查询流程分类详情
+ getCategory: async (id: number) => {
+ return await request.get({ url: `/bpm/category/get?id=` + id })
+ },
+
+ // 新增流程分类
+ createCategory: async (data: CategoryVO) => {
+ return await request.post({ url: `/bpm/category/create`, data })
+ },
+
+ // 修改流程分类
+ updateCategory: async (data: CategoryVO) => {
+ return await request.put({ url: `/bpm/category/update`, data })
+ },
+
+ // 删除流程分类
+ deleteCategory: async (id: number) => {
+ return await request.delete({ url: `/bpm/category/delete?id=` + id })
+ }
+}
diff --git a/src/api/bpm/definition/index.ts b/src/api/bpm/definition/index.ts
new file mode 100644
index 0000000..caedba1
--- /dev/null
+++ b/src/api/bpm/definition/index.ts
@@ -0,0 +1,22 @@
+import request from '@/config/axios'
+
+export const getProcessDefinition = async (id?: string, key?: string) => {
+ return await request.get({
+ url: '/bpm/process-definition/get',
+ params: { id, key }
+ })
+}
+
+export const getProcessDefinitionPage = async (params) => {
+ return await request.get({
+ url: '/bpm/process-definition/page',
+ params
+ })
+}
+
+export const getProcessDefinitionList = async (params) => {
+ return await request.get({
+ url: '/bpm/process-definition/list',
+ params
+ })
+}
diff --git a/src/api/bpm/form/index.ts b/src/api/bpm/form/index.ts
new file mode 100644
index 0000000..7fce11f
--- /dev/null
+++ b/src/api/bpm/form/index.ts
@@ -0,0 +1,56 @@
+import request from '@/config/axios'
+
+export type FormVO = {
+ id: number
+ name: string
+ conf: string
+ fields: string[]
+ status: number
+ remark: string
+ createTime: string
+}
+
+// 创建工作流的表单定义
+export const createForm = async (data: FormVO) => {
+ return await request.post({
+ url: '/bpm/form/create',
+ data: data
+ })
+}
+
+// 更新工作流的表单定义
+export const updateForm = async (data: FormVO) => {
+ return await request.put({
+ url: '/bpm/form/update',
+ data: data
+ })
+}
+
+// 删除工作流的表单定义
+export const deleteForm = async (id: number) => {
+ return await request.delete({
+ url: '/bpm/form/delete?id=' + id
+ })
+}
+
+// 获得工作流的表单定义
+export const getForm = async (id: number) => {
+ return await request.get({
+ url: '/bpm/form/get?id=' + id
+ })
+}
+
+// 获得工作流的表单定义分页
+export const getFormPage = async (params) => {
+ return await request.get({
+ url: '/bpm/form/page',
+ params
+ })
+}
+
+// 获得动态表单的精简列表
+export const getFormSimpleList = async () => {
+ return await request.get({
+ url: '/bpm/form/simple-list'
+ })
+}
diff --git a/src/api/bpm/leave/index.ts b/src/api/bpm/leave/index.ts
new file mode 100644
index 0000000..4f374b2
--- /dev/null
+++ b/src/api/bpm/leave/index.ts
@@ -0,0 +1,27 @@
+import request from '@/config/axios'
+
+export type LeaveVO = {
+ id: number
+ status: number
+ type: number
+ reason: string
+ processInstanceId: string
+ startTime: string
+ endTime: string
+ createTime: string
+}
+
+// 创建请假申请
+export const createLeave = async (data: LeaveVO) => {
+ return await request.post({ url: '/bpm/oa/leave/create', data: data })
+}
+
+// 获得请假申请
+export const getLeave = async (id: number) => {
+ return await request.get({ url: '/bpm/oa/leave/get?id=' + id })
+}
+
+// 获得请假申请分页
+export const getLeavePage = async (params: PageParam) => {
+ return await request.get({ url: '/bpm/oa/leave/page', params })
+}
diff --git a/src/api/bpm/model/index.ts b/src/api/bpm/model/index.ts
new file mode 100644
index 0000000..2b484a6
--- /dev/null
+++ b/src/api/bpm/model/index.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+
+export type ProcessDefinitionVO = {
+ id: string
+ version: number
+ deploymentTIme: string
+ suspensionState: number
+ formType?: number
+}
+
+export type ModelVO = {
+ id: number
+ formName: string
+ key: string
+ name: string
+ description: string
+ category: string
+ formType: number
+ formId: number
+ formCustomCreatePath: string
+ formCustomViewPath: string
+ processDefinition: ProcessDefinitionVO
+ status: number
+ remark: string
+ createTime: string
+ bpmnXml: string
+}
+
+export const getModelPage = async (params) => {
+ return await request.get({ url: '/bpm/model/page', params })
+}
+
+export const getModel = async (id: number) => {
+ return await request.get({ url: '/bpm/model/get?id=' + id })
+}
+
+export const updateModel = async (data: ModelVO) => {
+ return await request.put({ url: '/bpm/model/update', data: data })
+}
+
+// 任务状态修改
+export const updateModelState = async (id: number, state: number) => {
+ const data = {
+ id: id,
+ state: state
+ }
+ return await request.put({ url: '/bpm/model/update-state', data: data })
+}
+
+export const createModel = async (data: ModelVO) => {
+ return await request.post({ url: '/bpm/model/create', data: data })
+}
+
+export const deleteModel = async (id: number) => {
+ return await request.delete({ url: '/bpm/model/delete?id=' + id })
+}
+
+export const deployModel = async (id: number) => {
+ return await request.post({ url: '/bpm/model/deploy?id=' + id })
+}
diff --git a/src/api/bpm/processExpression/index.ts b/src/api/bpm/processExpression/index.ts
new file mode 100644
index 0000000..af6a737
--- /dev/null
+++ b/src/api/bpm/processExpression/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+// BPM 流程表达式 VO
+export interface ProcessExpressionVO {
+ id: number // 编号
+ name: string // 表达式名字
+ status: number // 表达式状态
+ expression: string // 表达式
+}
+
+// BPM 流程表达式 API
+export const ProcessExpressionApi = {
+ // 查询BPM 流程表达式分页
+ getProcessExpressionPage: async (params: any) => {
+ return await request.get({ url: `/bpm/process-expression/page`, params })
+ },
+
+ // 查询BPM 流程表达式详情
+ getProcessExpression: async (id: number) => {
+ return await request.get({ url: `/bpm/process-expression/get?id=` + id })
+ },
+
+ // 新增BPM 流程表达式
+ createProcessExpression: async (data: ProcessExpressionVO) => {
+ return await request.post({ url: `/bpm/process-expression/create`, data })
+ },
+
+ // 修改BPM 流程表达式
+ updateProcessExpression: async (data: ProcessExpressionVO) => {
+ return await request.put({ url: `/bpm/process-expression/update`, data })
+ },
+
+ // 删除BPM 流程表达式
+ deleteProcessExpression: async (id: number) => {
+ return await request.delete({ url: `/bpm/process-expression/delete?id=` + id })
+ },
+
+ // 导出BPM 流程表达式 Excel
+ exportProcessExpression: async (params) => {
+ return await request.download({ url: `/bpm/process-expression/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/bpm/processInstance/index.ts b/src/api/bpm/processInstance/index.ts
new file mode 100644
index 0000000..9122b2b
--- /dev/null
+++ b/src/api/bpm/processInstance/index.ts
@@ -0,0 +1,59 @@
+import request from '@/config/axios'
+import { ProcessDefinitionVO } from '@/api/bpm/model'
+
+export type Task = {
+ id: string
+ name: string
+}
+
+export type ProcessInstanceVO = {
+ id: number
+ name: string
+ processDefinitionId: string
+ category: string
+ result: number
+ tasks: Task[]
+ fields: string[]
+ status: number
+ remark: string
+ businessKey: string
+ createTime: string
+ endTime: string
+ processDefinition?: ProcessDefinitionVO
+}
+
+export const getProcessInstanceMyPage = async (params: any) => {
+ return await request.get({ url: '/bpm/process-instance/my-page', params })
+}
+
+export const getProcessInstanceManagerPage = async (params: any) => {
+ return await request.get({ url: '/bpm/process-instance/manager-page', params })
+}
+
+export const createProcessInstance = async (data) => {
+ return await request.post({ url: '/bpm/process-instance/create', data: data })
+}
+
+export const cancelProcessInstanceByStartUser = async (id: number, reason: string) => {
+ const data = {
+ id: id,
+ reason: reason
+ }
+ return await request.delete({ url: '/bpm/process-instance/cancel-by-start-user', data: data })
+}
+
+export const cancelProcessInstanceByAdmin = async (id: number, reason: string) => {
+ const data = {
+ id: id,
+ reason: reason
+ }
+ return await request.delete({ url: '/bpm/process-instance/cancel-by-admin', data: data })
+}
+
+export const getProcessInstance = async (id: string) => {
+ return await request.get({ url: '/bpm/process-instance/get?id=' + id })
+}
+
+export const getProcessInstanceCopyPage = async (params: any) => {
+ return await request.get({ url: '/bpm/process-instance/copy/page', params })
+}
diff --git a/src/api/bpm/processListener/index.ts b/src/api/bpm/processListener/index.ts
new file mode 100644
index 0000000..dabaa47
--- /dev/null
+++ b/src/api/bpm/processListener/index.ts
@@ -0,0 +1,40 @@
+import request from '@/config/axios'
+
+// BPM 流程监听器 VO
+export interface ProcessListenerVO {
+ id: number // 编号
+ name: string // 监听器名字
+ type: string // 监听器类型
+ status: number // 监听器状态
+ event: string // 监听事件
+ valueType: string // 监听器值类型
+ value: string // 监听器值
+}
+
+// BPM 流程监听器 API
+export const ProcessListenerApi = {
+ // 查询流程监听器分页
+ getProcessListenerPage: async (params: any) => {
+ return await request.get({ url: `/bpm/process-listener/page`, params })
+ },
+
+ // 查询流程监听器详情
+ getProcessListener: async (id: number) => {
+ return await request.get({ url: `/bpm/process-listener/get?id=` + id })
+ },
+
+ // 新增流程监听器
+ createProcessListener: async (data: ProcessListenerVO) => {
+ return await request.post({ url: `/bpm/process-listener/create`, data })
+ },
+
+ // 修改流程监听器
+ updateProcessListener: async (data: ProcessListenerVO) => {
+ return await request.put({ url: `/bpm/process-listener/update`, data })
+ },
+
+ // 删除流程监听器
+ deleteProcessListener: async (id: number) => {
+ return await request.delete({ url: `/bpm/process-listener/delete?id=` + id })
+ }
+}
diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts
new file mode 100644
index 0000000..f3cda9f
--- /dev/null
+++ b/src/api/bpm/task/index.ts
@@ -0,0 +1,66 @@
+import request from '@/config/axios'
+
+export type TaskVO = {
+ id: number
+}
+
+export const getTaskTodoPage = async (params: any) => {
+ return await request.get({ url: '/bpm/task/todo-page', params })
+}
+
+export const getTaskDonePage = async (params: any) => {
+ return await request.get({ url: '/bpm/task/done-page', params })
+}
+
+export const getTaskManagerPage = async (params: any) => {
+ return await request.get({ url: '/bpm/task/manager-page', params })
+}
+
+export const approveTask = async (data: any) => {
+ return await request.put({ url: '/bpm/task/approve', data })
+}
+
+export const rejectTask = async (data: any) => {
+ return await request.put({ url: '/bpm/task/reject', data })
+}
+
+export const getTaskListByProcessInstanceId = async (processInstanceId: string) => {
+ return await request.get({
+ url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId
+ })
+}
+
+// 获取所有可回退的节点
+export const getTaskListByReturn = async (id: string) => {
+ return await request.get({ url: '/bpm/task/list-by-return', params: { id } })
+}
+
+// 回退
+export const returnTask = async (data: any) => {
+ return await request.put({ url: '/bpm/task/return', data })
+}
+
+// 委派
+export const delegateTask = async (data: any) => {
+ return await request.put({ url: '/bpm/task/delegate', data })
+}
+
+// 转派
+export const transferTask = async (data: any) => {
+ return await request.put({ url: '/bpm/task/transfer', data })
+}
+
+// 加签
+export const signCreateTask = async (data: any) => {
+ return await request.put({ url: '/bpm/task/create-sign', data })
+}
+
+// 减签
+export const signDeleteTask = async (data: any) => {
+ return await request.delete({ url: '/bpm/task/delete-sign', data })
+}
+
+// 获取减签任务列表
+export const getChildrenTaskList = async (id: string) => {
+ return await request.get({ url: '/bpm/task/list-by-parent-task-id?parentTaskId=' + id })
+}
diff --git a/src/api/bpm/userGroup/index.ts b/src/api/bpm/userGroup/index.ts
new file mode 100644
index 0000000..7d12755
--- /dev/null
+++ b/src/api/bpm/userGroup/index.ts
@@ -0,0 +1,47 @@
+import request from '@/config/axios'
+
+export type UserGroupVO = {
+ id: number
+ name: string
+ description: string
+ userIds: number[]
+ status: number
+ remark: string
+ createTime: string
+}
+
+// 创建用户组
+export const createUserGroup = async (data: UserGroupVO) => {
+ return await request.post({
+ url: '/bpm/user-group/create',
+ data: data
+ })
+}
+
+// 更新用户组
+export const updateUserGroup = async (data: UserGroupVO) => {
+ return await request.put({
+ url: '/bpm/user-group/update',
+ data: data
+ })
+}
+
+// 删除用户组
+export const deleteUserGroup = async (id: number) => {
+ return await request.delete({ url: '/bpm/user-group/delete?id=' + id })
+}
+
+// 获得用户组
+export const getUserGroup = async (id: number) => {
+ return await request.get({ url: '/bpm/user-group/get?id=' + id })
+}
+
+// 获得用户组分页
+export const getUserGroupPage = async (params) => {
+ return await request.get({ url: '/bpm/user-group/page', params })
+}
+
+// 获取用户组精简信息列表
+export const getUserGroupSimpleList = async (): Promise => {
+ return await request.get({ url: '/bpm/user-group/simple-list' })
+}
diff --git a/src/api/crm/business/index.ts b/src/api/crm/business/index.ts
new file mode 100644
index 0000000..2420425
--- /dev/null
+++ b/src/api/crm/business/index.ts
@@ -0,0 +1,98 @@
+import request from '@/config/axios'
+import { TransferReqVO } from '@/api/crm/permission'
+
+export interface BusinessVO {
+ id: number
+ name: string
+ customerId: number
+ customerName?: string
+ followUpStatus: boolean
+ contactLastTime: Date
+ contactNextTime: Date
+ ownerUserId: number
+ ownerUserName?: string // 负责人的用户名称
+ ownerUserDept?: string // 负责人的部门名称
+ statusTypeId: number
+ statusTypeName?: string
+ statusId: number
+ statusName?: string
+ endStatus: number
+ endRemark: string
+ dealTime: Date
+ totalProductPrice: number
+ totalPrice: number
+ discountPercent: number
+ remark: string
+ creator: string // 创建人
+ creatorName?: string // 创建人名称
+ createTime: Date // 创建时间
+ updateTime: Date // 更新时间
+ products?: [
+ {
+ id: number
+ productId: number
+ productName: string
+ productNo: string
+ productUnit: number
+ productPrice: number
+ businessPrice: number
+ count: number
+ totalPrice: number
+ }
+ ]
+}
+
+// 查询 CRM 商机列表
+export const getBusinessPage = async (params) => {
+ return await request.get({ url: `/crm/business/page`, params })
+}
+
+// 查询 CRM 商机列表,基于指定客户
+export const getBusinessPageByCustomer = async (params) => {
+ return await request.get({ url: `/crm/business/page-by-customer`, params })
+}
+
+// 查询 CRM 商机详情
+export const getBusiness = async (id: number) => {
+ return await request.get({ url: `/crm/business/get?id=` + id })
+}
+
+// 获得 CRM 商机列表(精简)
+export const getSimpleBusinessList = async () => {
+ return await request.get({ url: `/crm/business/simple-all-list` })
+}
+
+// 新增 CRM 商机
+export const createBusiness = async (data: BusinessVO) => {
+ return await request.post({ url: `/crm/business/create`, data })
+}
+
+// 修改 CRM 商机
+export const updateBusiness = async (data: BusinessVO) => {
+ return await request.put({ url: `/crm/business/update`, data })
+}
+
+// 修改 CRM 商机状态
+export const updateBusinessStatus = async (data: BusinessVO) => {
+ return await request.put({ url: `/crm/business/update-status`, data })
+}
+
+// 删除 CRM 商机
+export const deleteBusiness = async (id: number) => {
+ return await request.delete({ url: `/crm/business/delete?id=` + id })
+}
+
+// 导出 CRM 商机 Excel
+export const exportBusiness = async (params) => {
+ return await request.download({ url: `/crm/business/export-excel`, params })
+}
+
+// 联系人关联商机列表
+export const getBusinessPageByContact = async (params) => {
+ return await request.get({ url: `/crm/business/page-by-contact`, params })
+}
+
+// 商机转移
+export const transferBusiness = async (data: TransferReqVO) => {
+ return await request.put({ url: '/crm/business/transfer', data })
+}
diff --git a/src/api/crm/business/status/index.ts b/src/api/crm/business/status/index.ts
new file mode 100644
index 0000000..cddaa5a
--- /dev/null
+++ b/src/api/crm/business/status/index.ts
@@ -0,0 +1,68 @@
+import request from '@/config/axios'
+
+export interface BusinessStatusTypeVO {
+ id: number
+ name: string
+ deptIds: number[]
+ statuses?: {
+ id: number
+ name: string
+ percent: number
+ }
+}
+
+export const DEFAULT_STATUSES = [
+ {
+ endStatus: 1,
+ key: '结束',
+ name: '赢单',
+ percent: 100
+ },
+ {
+ endStatus: 2,
+ key: '结束',
+ name: '输单',
+ percent: 0
+ },
+ {
+ endStatus: 3,
+ key: '结束',
+ name: '无效',
+ percent: 0
+ }
+]
+
+// 查询商机状态组列表
+export const getBusinessStatusPage = async (params: any) => {
+ return await request.get({ url: `/crm/business-status/page`, params })
+}
+
+// 新增商机状态组
+export const createBusinessStatus = async (data: BusinessStatusTypeVO) => {
+ return await request.post({ url: `/crm/business-status/create`, data })
+}
+
+// 修改商机状态组
+export const updateBusinessStatus = async (data: BusinessStatusTypeVO) => {
+ return await request.put({ url: `/crm/business-status/update`, data })
+}
+
+// 查询商机状态类型详情
+export const getBusinessStatus = async (id: number) => {
+ return await request.get({ url: `/crm/business-status/get?id=` + id })
+}
+
+// 删除商机状态
+export const deleteBusinessStatus = async (id: number) => {
+ return await request.delete({ url: `/crm/business-status/delete?id=` + id })
+}
+
+// 获得商机状态组列表
+export const getBusinessStatusTypeSimpleList = async () => {
+ return await request.get({ url: `/crm/business-status/type-simple-list` })
+}
+
+// 获得商机阶段列表
+export const getBusinessStatusSimpleList = async (typeId: number) => {
+ return await request.get({ url: `/crm/business-status/status-simple-list`, params: { typeId } })
+}
diff --git a/src/api/crm/clue/index.ts b/src/api/crm/clue/index.ts
new file mode 100644
index 0000000..9736514
--- /dev/null
+++ b/src/api/crm/clue/index.ts
@@ -0,0 +1,78 @@
+import request from '@/config/axios'
+import { TransferReqVO } from '@/api/crm/permission'
+
+export interface ClueVO {
+ id: number // 编号
+ name: string // 线索名称
+ followUpStatus: boolean // 跟进状态
+ contactLastTime: Date // 最后跟进时间
+ contactLastContent: string // 最后跟进内容
+ contactNextTime: Date // 下次联系时间
+ ownerUserId: number // 负责人的用户编号
+ ownerUserName?: string // 负责人的用户名称
+ ownerUserDept?: string // 负责人的部门名称
+ transformStatus: boolean // 转化状态
+ customerId: number // 客户编号
+ customerName?: string // 客户名称
+ mobile: string // 手机号
+ telephone: string // 电话
+ qq: string // QQ
+ wechat: string // wechat
+ email: string // email
+ areaId: number // 所在地
+ areaName?: string // 所在地名称
+ detailAddress: string // 详细地址
+ industryId: number // 所属行业
+ level: number // 客户等级
+ source: number // 客户来源
+ remark: string // 备注
+ creator: string // 创建人
+ creatorName?: string // 创建人名称
+ createTime: Date // 创建时间
+ updateTime: Date // 更新时间
+}
+
+// 查询线索列表
+export const getCluePage = async (params: any) => {
+ return await request.get({ url: `/crm/clue/page`, params })
+}
+
+// 查询线索详情
+export const getClue = async (id: number) => {
+ return await request.get({ url: `/crm/clue/get?id=` + id })
+}
+
+// 新增线索
+export const createClue = async (data: ClueVO) => {
+ return await request.post({ url: `/crm/clue/create`, data })
+}
+
+// 修改线索
+export const updateClue = async (data: ClueVO) => {
+ return await request.put({ url: `/crm/clue/update`, data })
+}
+
+// 删除线索
+export const deleteClue = async (id: number) => {
+ return await request.delete({ url: `/crm/clue/delete?id=` + id })
+}
+
+// 导出线索 Excel
+export const exportClue = async (params) => {
+ return await request.download({ url: `/crm/clue/export-excel`, params })
+}
+
+// 线索转移
+export const transferClue = async (data: TransferReqVO) => {
+ return await request.put({ url: '/crm/clue/transfer', data })
+}
+
+// 线索转化为客户
+export const transformClue = async (id: number) => {
+ return await request.put({ url: '/crm/clue/transform', params: { id } })
+}
+
+// 获得分配给我的、待跟进的线索数量
+export const getFollowClueCount = async () => {
+ return await request.get({ url: '/crm/clue/follow-count' })
+}
diff --git a/src/api/crm/contact/index.ts b/src/api/crm/contact/index.ts
new file mode 100644
index 0000000..7c24dfa
--- /dev/null
+++ b/src/api/crm/contact/index.ts
@@ -0,0 +1,113 @@
+import request from '@/config/axios'
+import { TransferReqVO } from '@/api/crm/permission'
+
+export interface ContactVO {
+ id: number // 编号
+ name: string // 联系人名称
+ customerId: number // 客户编号
+ customerName?: string // 客户名称
+ contactLastTime: Date // 最后跟进时间
+ contactLastContent: string // 最后跟进内容
+ contactNextTime: Date // 下次联系时间
+ ownerUserId: number // 负责人的用户编号
+ ownerUserName?: string // 负责人的用户名称
+ ownerUserDept?: string // 负责人的部门名称
+ mobile: string // 手机号
+ telephone: string // 电话
+ qq: string // QQ
+ wechat: string // wechat
+ email: string // email
+ areaId: number // 所在地
+ areaName?: string // 所在地名称
+ detailAddress: string // 详细地址
+ sex: number // 性别
+ master: boolean // 是否主联系人
+ post: string // 职务
+ parentId: number // 上级联系人编号
+ parentName?: string // 上级联系人名称
+ remark: string // 备注
+ creator: string // 创建人
+ creatorName?: string // 创建人名称
+ createTime: Date // 创建时间
+ updateTime: Date // 更新时间
+}
+
+export interface ContactBusinessReqVO {
+ contactId: number
+ businessIds: number[]
+}
+
+export interface ContactBusiness2ReqVO {
+ businessId: number
+ contactIds: number[]
+}
+
+// 查询 CRM 联系人列表
+export const getContactPage = async (params) => {
+ return await request.get({ url: `/crm/contact/page`, params })
+}
+
+// 查询 CRM 联系人列表,基于指定客户
+export const getContactPageByCustomer = async (params: any) => {
+ return await request.get({ url: `/crm/contact/page-by-customer`, params })
+}
+
+// 查询 CRM 联系人列表,基于指定商机
+export const getContactPageByBusiness = async (params: any) => {
+ return await request.get({ url: `/crm/contact/page-by-business`, params })
+}
+
+// 查询 CRM 联系人详情
+export const getContact = async (id: number) => {
+ return await request.get({ url: `/crm/contact/get?id=` + id })
+}
+
+// 新增 CRM 联系人
+export const createContact = async (data: ContactVO) => {
+ return await request.post({ url: `/crm/contact/create`, data })
+}
+
+// 修改 CRM 联系人
+export const updateContact = async (data: ContactVO) => {
+ return await request.put({ url: `/crm/contact/update`, data })
+}
+
+// 删除 CRM 联系人
+export const deleteContact = async (id: number) => {
+ return await request.delete({ url: `/crm/contact/delete?id=` + id })
+}
+
+// 导出 CRM 联系人 Excel
+export const exportContact = async (params) => {
+ return await request.download({ url: `/crm/contact/export-excel`, params })
+}
+
+// 获得 CRM 联系人列表(精简)
+export const getSimpleContactList = async () => {
+ return await request.get({ url: `/crm/contact/simple-all-list` })
+}
+
+// 批量新增联系人商机关联
+export const createContactBusinessList = async (data: ContactBusinessReqVO) => {
+ return await request.post({ url: `/crm/contact/create-business-list`, data })
+}
+
+// 批量新增联系人商机关联
+export const createContactBusinessList2 = async (data: ContactBusiness2ReqVO) => {
+ return await request.post({ url: `/crm/contact/create-business-list2`, data })
+}
+
+// 解除联系人商机关联
+export const deleteContactBusinessList = async (data: ContactBusinessReqVO) => {
+ return await request.delete({ url: `/crm/contact/delete-business-list`, data })
+}
+
+// 解除联系人商机关联
+export const deleteContactBusinessList2 = async (data: ContactBusiness2ReqVO) => {
+ return await request.delete({ url: `/crm/contact/delete-business-list2`, data })
+}
+
+// 联系人转移
+export const transferContact = async (data: TransferReqVO) => {
+ return await request.put({ url: '/crm/contact/transfer', data })
+}
diff --git a/src/api/crm/contract/config/index.ts b/src/api/crm/contract/config/index.ts
new file mode 100644
index 0000000..0c7ad20
--- /dev/null
+++ b/src/api/crm/contract/config/index.ts
@@ -0,0 +1,16 @@
+import request from '@/config/axios'
+
+export interface ContractConfigVO {
+ notifyEnabled?: boolean
+ notifyDays?: number
+}
+
+// 获取合同配置
+export const getContractConfig = async () => {
+ return await request.get({ url: `/crm/contract-config/get` })
+}
+
+// 更新合同配置
+export const saveContractConfig = async (data: ContractConfigVO) => {
+ return await request.put({ url: `/crm/contract-config/save`, data })
+}
diff --git a/src/api/crm/contract/index.ts b/src/api/crm/contract/index.ts
new file mode 100644
index 0000000..7028b77
--- /dev/null
+++ b/src/api/crm/contract/index.ts
@@ -0,0 +1,114 @@
+import request from '@/config/axios'
+import { TransferReqVO } from '@/api/crm/permission'
+
+export interface ContractVO {
+ id: number
+ name: string
+ no: string
+ customerId: number
+ customerName?: string
+ businessId: number
+ businessName: string
+ contactLastTime: Date
+ ownerUserId: number
+ ownerUserName?: string
+ ownerUserDeptName?: string
+ processInstanceId: number
+ auditStatus: number
+ orderDate: Date
+ startTime: Date
+ endTime: Date
+ totalProductPrice: number
+ discountPercent: number
+ totalPrice: number
+ totalReceivablePrice: number
+ signContactId: number
+ signContactName?: string
+ signUserId: number
+ signUserName: string
+ remark: string
+ createTime?: Date
+ creator: string
+ creatorName: string
+ updateTime?: Date
+ products?: [
+ {
+ id: number
+ productId: number
+ productName: string
+ productNo: string
+ productUnit: number
+ productPrice: number
+ contractPrice: number
+ count: number
+ totalPrice: number
+ }
+ ]
+}
+
+// 查询 CRM 合同列表
+export const getContractPage = async (params) => {
+ return await request.get({ url: `/crm/contract/page`, params })
+}
+
+// 查询 CRM 联系人列表,基于指定客户
+export const getContractPageByCustomer = async (params: any) => {
+ return await request.get({ url: `/crm/contract/page-by-customer`, params })
+}
+
+// 查询 CRM 联系人列表,基于指定商机
+export const getContractPageByBusiness = async (params: any) => {
+ return await request.get({ url: `/crm/contract/page-by-business`, params })
+}
+
+// 查询 CRM 合同详情
+export const getContract = async (id: number) => {
+ return await request.get({ url: `/crm/contract/get?id=` + id })
+}
+
+// 查询 CRM 合同下拉列表
+export const getContractSimpleList = async (customerId: number) => {
+ return await request.get({
+ url: `/crm/contract/simple-list?customerId=${customerId}`
+ })
+}
+
+// 新增 CRM 合同
+export const createContract = async (data: ContractVO) => {
+ return await request.post({ url: `/crm/contract/create`, data })
+}
+
+// 修改 CRM 合同
+export const updateContract = async (data: ContractVO) => {
+ return await request.put({ url: `/crm/contract/update`, data })
+}
+
+// 删除 CRM 合同
+export const deleteContract = async (id: number) => {
+ return await request.delete({ url: `/crm/contract/delete?id=` + id })
+}
+
+// 导出 CRM 合同 Excel
+export const exportContract = async (params) => {
+ return await request.download({ url: `/crm/contract/export-excel`, params })
+}
+
+// 提交审核
+export const submitContract = async (id: number) => {
+ return await request.put({ url: `/crm/contract/submit?id=${id}` })
+}
+
+// 合同转移
+export const transferContract = async (data: TransferReqVO) => {
+ return await request.put({ url: '/crm/contract/transfer', data })
+}
+
+// 获得待审核合同数量
+export const getAuditContractCount = async () => {
+ return await request.get({ url: '/crm/contract/audit-count' })
+}
+
+// 获得即将到期(提醒)的合同数量
+export const getRemindContractCount = async () => {
+ return await request.get({ url: '/crm/contract/remind-count' })
+}
diff --git a/src/api/crm/customer/index.ts b/src/api/crm/customer/index.ts
new file mode 100644
index 0000000..d149d4e
--- /dev/null
+++ b/src/api/crm/customer/index.ts
@@ -0,0 +1,132 @@
+import request from '@/config/axios'
+import { TransferReqVO } from '@/api/crm/permission'
+
+export interface CustomerVO {
+ id: number // 编号
+ name: string // 客户名称
+ followUpStatus: boolean // 跟进状态
+ contactLastTime: Date // 最后跟进时间
+ contactLastContent: string // 最后跟进内容
+ contactNextTime: Date // 下次联系时间
+ ownerUserId: number // 负责人的用户编号
+ ownerUserName?: string // 负责人的用户名称
+ ownerUserDept?: string // 负责人的部门名称
+ lockStatus?: boolean
+ dealStatus?: boolean
+ mobile: string // 手机号
+ telephone: string // 电话
+ qq: string // QQ
+ wechat: string // wechat
+ email: string // email
+ areaId: number // 所在地
+ areaName?: string // 所在地名称
+ detailAddress: string // 详细地址
+ industryId: number // 所属行业
+ level: number // 客户等级
+ source: number // 客户来源
+ remark: string // 备注
+ creator: string // 创建人
+ creatorName?: string // 创建人名称
+ createTime: Date // 创建时间
+ updateTime: Date // 更新时间
+}
+
+// 查询客户列表
+export const getCustomerPage = async (params) => {
+ return await request.get({ url: `/crm/customer/page`, params })
+}
+
+// 进入公海客户提醒的客户列表
+export const getPutPoolRemindCustomerPage = async (params) => {
+ return await request.get({ url: `/crm/customer/put-pool-remind-page`, params })
+}
+
+// 获得待进入公海客户数量
+export const getPutPoolRemindCustomerCount = async () => {
+ return await request.get({ url: `/crm/customer/put-pool-remind-count` })
+}
+
+// 获得今日需联系客户数量
+export const getTodayContactCustomerCount = async () => {
+ return await request.get({ url: `/crm/customer/today-contact-count` })
+}
+
+// 获得分配给我、待跟进的线索数量的客户数量
+export const getFollowCustomerCount = async () => {
+ return await request.get({ url: `/crm/customer/follow-count` })
+}
+
+// 查询客户详情
+export const getCustomer = async (id: number) => {
+ return await request.get({ url: `/crm/customer/get?id=` + id })
+}
+
+// 新增客户
+export const createCustomer = async (data: CustomerVO) => {
+ return await request.post({ url: `/crm/customer/create`, data })
+}
+
+// 修改客户
+export const updateCustomer = async (data: CustomerVO) => {
+ return await request.put({ url: `/crm/customer/update`, data })
+}
+
+// 更新客户的成交状态
+export const updateCustomerDealStatus = async (id: number, dealStatus: boolean) => {
+ return await request.put({ url: `/crm/customer/update-deal-status`, params: { id, dealStatus } })
+}
+
+// 删除客户
+export const deleteCustomer = async (id: number) => {
+ return await request.delete({ url: `/crm/customer/delete?id=` + id })
+}
+
+// 导出客户 Excel
+export const exportCustomer = async (params: any) => {
+ return await request.download({ url: `/crm/customer/export-excel`, params })
+}
+
+// 下载客户导入模板
+export const importCustomerTemplate = () => {
+ return request.download({ url: '/crm/customer/get-import-template' })
+}
+
+// 导入客户
+export const handleImport = async (formData) => {
+ return await request.upload({ url: `/crm/customer/import`, data: formData })
+}
+
+// 客户列表
+export const getCustomerSimpleList = async () => {
+ return await request.get({ url: `/crm/customer/simple-list` })
+}
+
+// ======================= 业务操作 =======================
+
+// 客户转移
+export const transferCustomer = async (data: TransferReqVO) => {
+ return await request.put({ url: '/crm/customer/transfer', data })
+}
+
+// 锁定/解锁客户
+export const lockCustomer = async (id: number, lockStatus: boolean) => {
+ return await request.put({ url: `/crm/customer/lock`, data: { id, lockStatus } })
+}
+
+// 领取公海客户
+export const receiveCustomer = async (ids: any[]) => {
+ return await request.put({ url: '/crm/customer/receive', params: { ids: ids.join(',') } })
+}
+
+// 分配公海给对应负责人
+export const distributeCustomer = async (ids: any[], ownerUserId: number) => {
+ return await request.put({
+ url: '/crm/customer/distribute',
+ data: { ids: ids, ownerUserId }
+ })
+}
+
+// 客户放入公海
+export const putCustomerPool = async (id: number) => {
+ return await request.put({ url: `/crm/customer/put-pool?id=${id}` })
+}
diff --git a/src/api/crm/customer/limitConfig/index.ts b/src/api/crm/customer/limitConfig/index.ts
new file mode 100644
index 0000000..8677632
--- /dev/null
+++ b/src/api/crm/customer/limitConfig/index.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+export interface CustomerLimitConfigVO {
+ id?: number
+ type?: number
+ userIds?: string
+ deptIds?: string
+ maxCount?: number
+ dealCountEnabled?: boolean
+}
+
+/**
+ * 客户限制配置类型
+ */
+export enum LimitConfType {
+ /**
+ * 拥有客户数限制
+ */
+ CUSTOMER_QUANTITY_LIMIT = 1,
+ /**
+ * 锁定客户数限制
+ */
+ CUSTOMER_LOCK_LIMIT = 2
+}
+
+// 查询客户限制配置列表
+export const getCustomerLimitConfigPage = async (params) => {
+ return await request.get({ url: `/crm/customer-limit-config/page`, params })
+}
+
+// 查询客户限制配置详情
+export const getCustomerLimitConfig = async (id: number) => {
+ return await request.get({ url: `/crm/customer-limit-config/get?id=` + id })
+}
+
+// 新增客户限制配置
+export const createCustomerLimitConfig = async (data: CustomerLimitConfigVO) => {
+ return await request.post({ url: `/crm/customer-limit-config/create`, data })
+}
+
+// 修改客户限制配置
+export const updateCustomerLimitConfig = async (data: CustomerLimitConfigVO) => {
+ return await request.put({ url: `/crm/customer-limit-config/update`, data })
+}
+
+// 删除客户限制配置
+export const deleteCustomerLimitConfig = async (id: number) => {
+ return await request.delete({ url: `/crm/customer-limit-config/delete?id=` + id })
+}
diff --git a/src/api/crm/customer/poolConfig/index.ts b/src/api/crm/customer/poolConfig/index.ts
new file mode 100644
index 0000000..b96e61f
--- /dev/null
+++ b/src/api/crm/customer/poolConfig/index.ts
@@ -0,0 +1,19 @@
+import request from '@/config/axios'
+
+export interface CustomerPoolConfigVO {
+ enabled?: boolean
+ contactExpireDays?: number
+ dealExpireDays?: number
+ notifyEnabled?: boolean
+ notifyDays?: number
+}
+
+// 获取客户公海规则设置
+export const getCustomerPoolConfig = async () => {
+ return await request.get({ url: `/crm/customer-pool-config/get` })
+}
+
+// 更新客户公海规则设置
+export const saveCustomerPoolConfig = async (data: CustomerPoolConfigVO) => {
+ return await request.put({ url: `/crm/customer-pool-config/save`, data })
+}
diff --git a/src/api/crm/followup/index.ts b/src/api/crm/followup/index.ts
new file mode 100644
index 0000000..414f3f7
--- /dev/null
+++ b/src/api/crm/followup/index.ts
@@ -0,0 +1,43 @@
+import request from '@/config/axios'
+
+// 跟进记录 VO
+export interface FollowUpRecordVO {
+ id: number // 编号
+ bizType: number // 数据类型
+ bizId: number // 数据编号
+ type: number // 跟进类型
+ content: string // 跟进内容
+ picUrls: string[] // 图片
+ fileUrls: string[] // 附件
+ nextTime: Date // 下次联系时间
+ businessIds: number[] // 关联的商机编号数组
+ businesses: {
+ id: number
+ name: string
+ }[] // 关联的商机数组
+ contactIds: number[] // 关联的联系人编号数组
+ contacts: {
+ id: number
+ name: string
+ }[] // 关联的联系人数组
+ creator: string
+ creatorName?: string
+}
+
+// 跟进记录 API
+export const FollowUpRecordApi = {
+ // 查询跟进记录分页
+ getFollowUpRecordPage: async (params: any) => {
+ return await request.get({ url: `/crm/follow-up-record/page`, params })
+ },
+
+ // 新增跟进记录
+ createFollowUpRecord: async (data: FollowUpRecordVO) => {
+ return await request.post({ url: `/crm/follow-up-record/create`, data })
+ },
+
+ // 删除跟进记录
+ deleteFollowUpRecord: async (id: number) => {
+ return await request.delete({ url: `/crm/follow-up-record/delete?id=` + id })
+ }
+}
diff --git a/src/api/crm/operateLog/index.ts b/src/api/crm/operateLog/index.ts
new file mode 100644
index 0000000..d0f25b6
--- /dev/null
+++ b/src/api/crm/operateLog/index.ts
@@ -0,0 +1,11 @@
+import request from '@/config/axios'
+
+export interface OperateLogVO extends PageParam {
+ bizType: number
+ bizId: number
+}
+
+// 获得操作日志
+export const getOperateLogPage = async (params: OperateLogVO) => {
+ return await request.get({ url: `/crm/operate-log/page`, params })
+}
diff --git a/src/api/crm/permission/index.ts b/src/api/crm/permission/index.ts
new file mode 100644
index 0000000..4f88b14
--- /dev/null
+++ b/src/api/crm/permission/index.ts
@@ -0,0 +1,72 @@
+import request from '@/config/axios'
+
+export interface PermissionVO {
+ id?: number // 数据权限编号
+ userId: number // 用户编号
+ bizType: number // Crm 类型
+ bizId: number // Crm 类型数据编号
+ level: number // 权限级别
+ toBizTypes?: number[] // 同时添加至
+ deptName?: string // 部门名称
+ nickname?: string // 用户昵称
+ postNames?: string[] // 岗位名称数组
+ createTime?: Date
+ ids?: number[]
+}
+
+export interface TransferReqVO {
+ id: number // 模块编号
+ newOwnerUserId: number // 新负责人的用户编号
+ oldOwnerPermissionLevel?: number // 老负责人加入团队后的权限级别
+ toBizTypes?: number[] // 转移客户时,需要额外有【联系人】【商机】【合同】的 checkbox 选择
+}
+
+/**
+ * CRM 业务类型枚举
+ *
+ * @author HUIHUI
+ */
+export enum BizTypeEnum {
+ CRM_CLUE = 1, // 线索
+ CRM_CUSTOMER = 2, // 客户
+ CRM_CONTACT = 3, // 联系人
+ CRM_BUSINESS = 4, // 商机
+ CRM_CONTRACT = 5, // 合同
+ CRM_PRODUCT = 6, // 产品
+ CRM_RECEIVABLE = 7, // 回款
+ CRM_RECEIVABLE_PLAN = 8 // 回款计划
+}
+
+/**
+ * CRM 数据权限级别枚举
+ */
+export enum PermissionLevelEnum {
+ OWNER = 1, // 负责人
+ READ = 2, // 只读
+ WRITE = 3 // 读写
+}
+
+// 获得数据权限列表(查询团队成员列表)
+export const getPermissionList = async (params) => {
+ return await request.get({ url: `/crm/permission/list`, params })
+}
+
+// 创建数据权限(新增团队成员)
+export const createPermission = async (data: PermissionVO) => {
+ return await request.post({ url: `/crm/permission/create`, data })
+}
+
+// 编辑数据权限(修改团队成员权限级别)
+export const updatePermission = async (data) => {
+ return await request.put({ url: `/crm/permission/update`, data })
+}
+
+// 删除数据权限(删除团队成员)
+export const deletePermissionBatch = async (val: number[]) => {
+ return await request.delete({ url: '/crm/permission/delete?ids=' + val.join(',') })
+}
+
+// 删除自己的数据权限(退出团队)
+export const deleteSelfPermission = async (id: number) => {
+ return await request.delete({ url: '/crm/permission/delete-self?id=' + id })
+}
diff --git a/src/api/crm/product/category/index.ts b/src/api/crm/product/category/index.ts
new file mode 100644
index 0000000..6341d1b
--- /dev/null
+++ b/src/api/crm/product/category/index.ts
@@ -0,0 +1,33 @@
+import request from '@/config/axios'
+
+// TODO @zange:挪到 product 下,建个 category 包,挪进去哈;
+export interface ProductCategoryVO {
+ id: number
+ name: string
+ parentId: number
+}
+
+// 查询产品分类详情
+export const getProductCategory = async (id: number) => {
+ return await request.get({ url: `/crm/product-category/get?id=` + id })
+}
+
+// 新增产品分类
+export const createProductCategory = async (data: ProductCategoryVO) => {
+ return await request.post({ url: `/crm/product-category/create`, data })
+}
+
+// 修改产品分类
+export const updateProductCategory = async (data: ProductCategoryVO) => {
+ return await request.put({ url: `/crm/product-category/update`, data })
+}
+
+// 删除产品分类
+export const deleteProductCategory = async (id: number) => {
+ return await request.delete({ url: `/crm/product-category/delete?id=` + id })
+}
+
+// 产品分类列表
+export const getProductCategoryList = async (params) => {
+ return await request.get({ url: `/crm/product-category/list`, params })
+}
diff --git a/src/api/crm/product/index.ts b/src/api/crm/product/index.ts
new file mode 100644
index 0000000..f0c2328
--- /dev/null
+++ b/src/api/crm/product/index.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+export interface ProductVO {
+ id: number
+ name: string
+ no: string
+ unit: number
+ price: number
+ status: number
+ categoryId: number
+ categoryName?: string
+ description: string
+ ownerUserId: number
+}
+
+// 查询产品列表
+export const getProductPage = async (params) => {
+ return await request.get({ url: `/crm/product/page`, params })
+}
+
+// 获得产品精简列表
+export const getProductSimpleList = async () => {
+ return await request.get({ url: `/crm/product/simple-list` })
+}
+
+// 查询产品详情
+export const getProduct = async (id: number) => {
+ return await request.get({ url: `/crm/product/get?id=` + id })
+}
+
+// 新增产品
+export const createProduct = async (data: ProductVO) => {
+ return await request.post({ url: `/crm/product/create`, data })
+}
+
+// 修改产品
+export const updateProduct = async (data: ProductVO) => {
+ return await request.put({ url: `/crm/product/update`, data })
+}
+
+// 删除产品
+export const deleteProduct = async (id: number) => {
+ return await request.delete({ url: `/crm/product/delete?id=` + id })
+}
+
+// 导出产品 Excel
+export const exportProduct = async (params) => {
+ return await request.download({ url: `/crm/product/export-excel`, params })
+}
diff --git a/src/api/crm/receivable/index.ts b/src/api/crm/receivable/index.ts
new file mode 100644
index 0000000..32ecd25
--- /dev/null
+++ b/src/api/crm/receivable/index.ts
@@ -0,0 +1,73 @@
+import request from '@/config/axios'
+
+export interface ReceivableVO {
+ id: number
+ no: string
+ planId?: number
+ customerId?: number
+ customerName?: string
+ contractId?: number
+ contract?: {
+ id?: number
+ name?: string
+ no: string
+ totalPrice: number
+ }
+ auditStatus: number
+ processInstanceId: number
+ returnTime: Date
+ returnType: number
+ price: number
+ ownerUserId: number
+ ownerUserName?: string
+ remark: string
+ creator: string // 创建人
+ creatorName?: string // 创建人名称
+ createTime: Date // 创建时间
+ updateTime: Date // 更新时间
+}
+
+// 查询回款列表
+export const getReceivablePage = async (params) => {
+ return await request.get({ url: `/crm/receivable/page`, params })
+}
+
+// 查询回款列表
+export const getReceivablePageByCustomer = async (params) => {
+ return await request.get({ url: `/crm/receivable/page-by-customer`, params })
+}
+
+// 查询回款详情
+export const getReceivable = async (id: number) => {
+ return await request.get({ url: `/crm/receivable/get?id=` + id })
+}
+
+// 新增回款
+export const createReceivable = async (data: ReceivableVO) => {
+ return await request.post({ url: `/crm/receivable/create`, data })
+}
+
+// 修改回款
+export const updateReceivable = async (data: ReceivableVO) => {
+ return await request.put({ url: `/crm/receivable/update`, data })
+}
+
+// 删除回款
+export const deleteReceivable = async (id: number) => {
+ return await request.delete({ url: `/crm/receivable/delete?id=` + id })
+}
+
+// 导出回款 Excel
+export const exportReceivable = async (params) => {
+ return await request.download({ url: `/crm/receivable/export-excel`, params })
+}
+
+// 提交审核
+export const submitReceivable = async (id: number) => {
+ return await request.put({ url: `/crm/receivable/submit?id=${id}` })
+}
+
+// 获得待审核回款数量
+export const getAuditReceivableCount = async () => {
+ return await request.get({ url: '/crm/receivable/audit-count' })
+}
diff --git a/src/api/crm/receivable/plan/index.ts b/src/api/crm/receivable/plan/index.ts
new file mode 100644
index 0000000..770b347
--- /dev/null
+++ b/src/api/crm/receivable/plan/index.ts
@@ -0,0 +1,74 @@
+import request from '@/config/axios'
+
+export interface ReceivablePlanVO {
+ id: number
+ period: number
+ receivableId: number
+ price: number
+ returnTime: Date
+ remindDays: number
+ returnType: number
+ remindTime: Date
+ customerId: number
+ customerName?: string
+ contractId?: number
+ contractNo?: string
+ ownerUserId: number
+ ownerUserName?: string
+ remark: string
+ creator: string // 创建人
+ creatorName?: string // 创建人名称
+ createTime: Date // 创建时间
+ updateTime: Date // 更新时间
+ receivable?: {
+ price: number
+ returnTime: Date
+ }
+}
+
+// 查询回款计划列表
+export const getReceivablePlanPage = async (params) => {
+ return await request.get({ url: `/crm/receivable-plan/page`, params })
+}
+
+// 查询回款计划列表
+export const getReceivablePlanPageByCustomer = async (params) => {
+ return await request.get({ url: `/crm/receivable-plan/page-by-customer`, params })
+}
+
+// 查询回款计划详情
+export const getReceivablePlan = async (id: number) => {
+ return await request.get({ url: `/crm/receivable-plan/get?id=` + id })
+}
+
+// 查询回款计划下拉数据
+export const getReceivablePlanSimpleList = async (customerId: number, contractId: number) => {
+ return await request.get({
+ url: `/crm/receivable-plan/simple-list?customerId=${customerId}&contractId=${contractId}`
+ })
+}
+
+// 新增回款计划
+export const createReceivablePlan = async (data: ReceivablePlanVO) => {
+ return await request.post({ url: `/crm/receivable-plan/create`, data })
+}
+
+// 修改回款计划
+export const updateReceivablePlan = async (data: ReceivablePlanVO) => {
+ return await request.put({ url: `/crm/receivable-plan/update`, data })
+}
+
+// 删除回款计划
+export const deleteReceivablePlan = async (id: number) => {
+ return await request.delete({ url: `/crm/receivable-plan/delete?id=` + id })
+}
+
+// 导出回款计划 Excel
+export const exportReceivablePlan = async (params) => {
+ return await request.download({ url: `/crm/receivable-plan/export-excel`, params })
+}
+
+// 获得待回款提醒数量
+export const getReceivablePlanRemindCount = async () => {
+ return await request.get({ url: '/crm/receivable-plan/remind-count' })
+}
diff --git a/src/api/crm/statistics/customer.ts b/src/api/crm/statistics/customer.ts
new file mode 100644
index 0000000..c2092e4
--- /dev/null
+++ b/src/api/crm/statistics/customer.ts
@@ -0,0 +1,168 @@
+import request from '@/config/axios'
+
+export interface CrmStatisticsCustomerSummaryByDateRespVO {
+ time: string
+ customerCreateCount: number
+ customerDealCount: number
+}
+
+export interface CrmStatisticsCustomerSummaryByUserRespVO {
+ ownerUserName: string
+ customerCreateCount: number
+ customerDealCount: number
+ contractPrice: number
+ receivablePrice: number
+}
+
+export interface CrmStatisticsFollowUpSummaryByDateRespVO {
+ time: string
+ followUpRecordCount: number
+ followUpCustomerCount: number
+}
+
+export interface CrmStatisticsFollowUpSummaryByUserRespVO {
+ ownerUserName: string
+ followupRecordCount: number
+ followupCustomerCount: number
+}
+
+export interface CrmStatisticsFollowUpSummaryByTypeRespVO {
+ followUpType: string
+ followUpRecordCount: number
+}
+
+export interface CrmStatisticsCustomerContractSummaryRespVO {
+ customerName: string
+ contractName: string
+ totalPrice: number
+ receivablePrice: number
+ customerType: string
+ customerSource: string
+ ownerUserName: string
+ creatorUserName: string
+ createTime: Date
+ orderDate: Date
+}
+
+export interface CrmStatisticsPoolSummaryByDateRespVO {
+ time: string
+ customerPutCount: number
+ customerTakeCount: number
+}
+
+export interface CrmStatisticsPoolSummaryByUserRespVO {
+ ownerUserName: string
+ customerPutCount: number
+ customerTakeCount: number
+}
+
+export interface CrmStatisticsCustomerDealCycleByDateRespVO {
+ time: string
+ customerDealCycle: number
+}
+
+export interface CrmStatisticsCustomerDealCycleByUserRespVO {
+ ownerUserName: string
+ customerDealCycle: number
+ customerDealCount: number
+}
+
+export interface CrmStatisticsCustomerDealCycleByAreaRespVO {
+ areaName: string
+ customerDealCycle: number
+ customerDealCount: number
+}
+
+export interface CrmStatisticsCustomerDealCycleByProductRespVO {
+ productName: string
+ customerDealCycle: number
+ customerDealCount: number
+}
+
+// 客户分析 API
+export const StatisticsCustomerApi = {
+ // 1.1 客户总量分析(按日期)
+ getCustomerSummaryByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-summary-by-date',
+ params
+ })
+ },
+ // 1.2 客户总量分析(按用户)
+ getCustomerSummaryByUser: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-summary-by-user',
+ params
+ })
+ },
+ // 2.1 客户跟进次数分析(按日期)
+ getFollowUpSummaryByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-follow-up-summary-by-date',
+ params
+ })
+ },
+ // 2.2 客户跟进次数分析(按用户)
+ getFollowUpSummaryByUser: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-follow-up-summary-by-user',
+ params
+ })
+ },
+ // 3.1 获取客户跟进方式统计数
+ getFollowUpSummaryByType: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-follow-up-summary-by-type',
+ params
+ })
+ },
+ // 4.1 合同摘要信息(客户转化率页面)
+ getContractSummary: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-contract-summary',
+ params
+ })
+ },
+ // 5.1 获取客户公海分析(按日期)
+ getPoolSummaryByDate: (param: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-pool-summary-by-date',
+ params: param
+ })
+ },
+ // 5.2 获取客户公海分析(按用户)
+ getPoolSummaryByUser: (param: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-pool-summary-by-user',
+ params: param
+ })
+ },
+ // 6.1 获取客户成交周期(按日期)
+ getCustomerDealCycleByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-deal-cycle-by-date',
+ params
+ })
+ },
+ // 6.2 获取客户成交周期(按用户)
+ getCustomerDealCycleByUser: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-deal-cycle-by-user',
+ params
+ })
+ },
+ // 6.2 获取客户成交周期(按用户)
+ getCustomerDealCycleByArea: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-deal-cycle-by-area',
+ params
+ })
+ },
+ // 6.2 获取客户成交周期(按用户)
+ getCustomerDealCycleByProduct: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-deal-cycle-by-product',
+ params
+ })
+ }
+}
diff --git a/src/api/crm/statistics/funnel.ts b/src/api/crm/statistics/funnel.ts
new file mode 100644
index 0000000..574a5f4
--- /dev/null
+++ b/src/api/crm/statistics/funnel.ts
@@ -0,0 +1,58 @@
+import request from '@/config/axios'
+
+export interface CrmStatisticFunnelRespVO {
+ customerCount: number // 客户数
+ businessCount: number // 商机数
+ businessWinCount: number // 赢单数
+}
+
+export interface CrmStatisticsBusinessSummaryByDateRespVO {
+ time: string // 时间
+ businessCreateCount: number // 商机数
+ totalPrice: number | string // 商机金额
+}
+
+export interface CrmStatisticsBusinessInversionRateSummaryByDateRespVO {
+ time: string // 时间
+ businessCount: number // 商机数量
+ businessWinCount: number // 赢单商机数
+}
+
+// 客户分析 API
+export const StatisticFunnelApi = {
+ // 1. 获取销售漏斗统计数据
+ getFunnelSummary: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-funnel/get-funnel-summary',
+ params
+ })
+ },
+ // 2. 获取商机结束状态统计
+ getBusinessSummaryByEndStatus: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-funnel/get-business-summary-by-end-status',
+ params
+ })
+ },
+ // 3. 获取新增商机分析(按日期)
+ getBusinessSummaryByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-funnel/get-business-summary-by-date',
+ params
+ })
+ },
+ // 4. 获取商机转化率分析(按日期)
+ getBusinessInversionRateSummaryByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-funnel/get-business-inversion-rate-summary-by-date',
+ params
+ })
+ },
+ // 5. 获取商机列表(按日期)
+ getBusinessPageByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-funnel/get-business-page-by-date',
+ params
+ })
+ }
+}
diff --git a/src/api/crm/statistics/performance.ts b/src/api/crm/statistics/performance.ts
new file mode 100644
index 0000000..2318505
--- /dev/null
+++ b/src/api/crm/statistics/performance.ts
@@ -0,0 +1,33 @@
+import request from '@/config/axios'
+
+export interface StatisticsPerformanceRespVO {
+ time: string
+ currentMonthCount: number
+ lastMonthCount: number
+ lastYearCount: number
+}
+
+// 排行 API
+export const StatisticsPerformanceApi = {
+ // 员工获得合同金额统计
+ getContractPricePerformance: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-performance/get-contract-price-performance',
+ params
+ })
+ },
+ // 员工获得回款统计
+ getReceivablePricePerformance: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-performance/get-receivable-price-performance',
+ params
+ })
+ },
+ //员工获得签约合同数量统计
+ getContractCountPerformance: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-performance/get-contract-count-performance',
+ params
+ })
+ }
+}
diff --git a/src/api/crm/statistics/portrait.ts b/src/api/crm/statistics/portrait.ts
new file mode 100644
index 0000000..c7a2572
--- /dev/null
+++ b/src/api/crm/statistics/portrait.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+
+export interface CrmStatisticCustomerBaseRespVO {
+ customerCount: number
+ dealCount: number
+ dealPortion: string | number
+}
+
+export interface CrmStatisticCustomerIndustryRespVO extends CrmStatisticCustomerBaseRespVO {
+ industryId: number
+ industryPortion: string | number
+}
+
+export interface CrmStatisticCustomerSourceRespVO extends CrmStatisticCustomerBaseRespVO {
+ source: number
+ sourcePortion: string | number
+}
+
+export interface CrmStatisticCustomerLevelRespVO extends CrmStatisticCustomerBaseRespVO {
+ level: number
+ levelPortion: string | number
+}
+
+export interface CrmStatisticCustomerAreaRespVO extends CrmStatisticCustomerBaseRespVO {
+ areaId: number
+ areaName: string
+ areaPortion: string | number
+}
+
+// 客户分析 API
+export const StatisticsPortraitApi = {
+ // 1. 获取客户行业统计数据
+ getCustomerIndustry: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-portrait/get-customer-industry-summary',
+ params
+ })
+ },
+ // 2. 获取客户来源统计数据
+ getCustomerSource: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-portrait/get-customer-source-summary',
+ params
+ })
+ },
+ // 3. 获取客户级别统计数据
+ getCustomerLevel: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-portrait/get-customer-level-summary',
+ params
+ })
+ },
+ // 4. 获取客户地区统计数据
+ getCustomerArea: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-portrait/get-customer-area-summary',
+ params
+ })
+ }
+}
diff --git a/src/api/crm/statistics/rank.ts b/src/api/crm/statistics/rank.ts
new file mode 100644
index 0000000..a9b355e
--- /dev/null
+++ b/src/api/crm/statistics/rank.ts
@@ -0,0 +1,67 @@
+import request from '@/config/axios'
+
+export interface StatisticsRankRespVO {
+ count: number
+ nickname: string
+ deptName: string
+}
+
+// 排行 API
+export const StatisticsRankApi = {
+ // 获得合同排行榜
+ getContractPriceRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-contract-price-rank',
+ params
+ })
+ },
+ // 获得回款排行榜
+ getReceivablePriceRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-receivable-price-rank',
+ params
+ })
+ },
+ // 签约合同排行
+ getContractCountRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-contract-count-rank',
+ params
+ })
+ },
+ // 产品销量排行
+ getProductSalesRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-product-sales-rank',
+ params
+ })
+ },
+ // 新增客户数排行
+ getCustomerCountRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-customer-count-rank',
+ params
+ })
+ },
+ // 新增联系人数排行
+ getContactsCountRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-contacts-count-rank',
+ params
+ })
+ },
+ // 跟进次数排行
+ getFollowCountRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-follow-count-rank',
+ params
+ })
+ },
+ // 跟进客户数排行
+ getFollowCustomerCountRank: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-rank/get-follow-customer-count-rank',
+ params
+ })
+ }
+}
diff --git a/src/api/erp/finance/account/index.ts b/src/api/erp/finance/account/index.ts
new file mode 100644
index 0000000..a62b180
--- /dev/null
+++ b/src/api/erp/finance/account/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+// ERP 结算账户 VO
+export interface AccountVO {
+ id: number // 结算账户编号
+ no: string // 账户编码
+ remark: string // 备注
+ status: number // 开启状态
+ sort: number // 排序
+ defaultStatus: boolean // 是否默认
+ name: string // 账户名称
+}
+
+// ERP 结算账户 API
+export const AccountApi = {
+ // 查询结算账户分页
+ getAccountPage: async (params: any) => {
+ return await request.get({ url: `/erp/account/page`, params })
+ },
+
+ // 查询结算账户精简列表
+ getAccountSimpleList: async () => {
+ return await request.get({ url: `/erp/account/simple-list` })
+ },
+
+ // 查询结算账户详情
+ getAccount: async (id: number) => {
+ return await request.get({ url: `/erp/account/get?id=` + id })
+ },
+
+ // 新增结算账户
+ createAccount: async (data: AccountVO) => {
+ return await request.post({ url: `/erp/account/create`, data })
+ },
+
+ // 修改结算账户
+ updateAccount: async (data: AccountVO) => {
+ return await request.put({ url: `/erp/account/update`, data })
+ },
+
+ // 修改结算账户默认状态
+ updateAccountDefaultStatus: async (id: number, defaultStatus: boolean) => {
+ return await request.put({
+ url: `/erp/account/update-default-status`,
+ params: {
+ id,
+ defaultStatus
+ }
+ })
+ },
+
+ // 删除结算账户
+ deleteAccount: async (id: number) => {
+ return await request.delete({ url: `/erp/account/delete?id=` + id })
+ },
+
+ // 导出结算账户 Excel
+ exportAccount: async (params: any) => {
+ return await request.download({ url: `/erp/account/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/finance/payment/index.ts b/src/api/erp/finance/payment/index.ts
new file mode 100644
index 0000000..c6749db
--- /dev/null
+++ b/src/api/erp/finance/payment/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+// ERP 付款单 VO
+export interface FinancePaymentVO {
+ id: number // 付款单编号
+ no: string // 付款单号
+ supplierId: number // 供应商编号
+ paymentTime: Date // 付款时间
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 付款单 API
+export const FinancePaymentApi = {
+ // 查询付款单分页
+ getFinancePaymentPage: async (params: any) => {
+ return await request.get({ url: `/erp/finance-payment/page`, params })
+ },
+
+ // 查询付款单详情
+ getFinancePayment: async (id: number) => {
+ return await request.get({ url: `/erp/finance-payment/get?id=` + id })
+ },
+
+ // 新增付款单
+ createFinancePayment: async (data: FinancePaymentVO) => {
+ return await request.post({ url: `/erp/finance-payment/create`, data })
+ },
+
+ // 修改付款单
+ updateFinancePayment: async (data: FinancePaymentVO) => {
+ return await request.put({ url: `/erp/finance-payment/update`, data })
+ },
+
+ // 更新付款单的状态
+ updateFinancePaymentStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/finance-payment/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除付款单
+ deleteFinancePayment: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/finance-payment/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出付款单 Excel
+ exportFinancePayment: async (params: any) => {
+ return await request.download({ url: `/erp/finance-payment/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/finance/receipt/index.ts b/src/api/erp/finance/receipt/index.ts
new file mode 100644
index 0000000..4de28ca
--- /dev/null
+++ b/src/api/erp/finance/receipt/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+// ERP 收款单 VO
+export interface FinanceReceiptVO {
+ id: number // 收款单编号
+ no: string // 收款单号
+ customerId: number // 客户编号
+ receiptTime: Date // 收款时间
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 收款单 API
+export const FinanceReceiptApi = {
+ // 查询收款单分页
+ getFinanceReceiptPage: async (params: any) => {
+ return await request.get({ url: `/erp/finance-receipt/page`, params })
+ },
+
+ // 查询收款单详情
+ getFinanceReceipt: async (id: number) => {
+ return await request.get({ url: `/erp/finance-receipt/get?id=` + id })
+ },
+
+ // 新增收款单
+ createFinanceReceipt: async (data: FinanceReceiptVO) => {
+ return await request.post({ url: `/erp/finance-receipt/create`, data })
+ },
+
+ // 修改收款单
+ updateFinanceReceipt: async (data: FinanceReceiptVO) => {
+ return await request.put({ url: `/erp/finance-receipt/update`, data })
+ },
+
+ // 更新收款单的状态
+ updateFinanceReceiptStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/finance-receipt/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除收款单
+ deleteFinanceReceipt: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/finance-receipt/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出收款单 Excel
+ exportFinanceReceipt: async (params: any) => {
+ return await request.download({ url: `/erp/finance-receipt/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/product/category/index.ts b/src/api/erp/product/category/index.ts
new file mode 100644
index 0000000..d67ccff
--- /dev/null
+++ b/src/api/erp/product/category/index.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+// ERP 产品分类 VO
+export interface ProductCategoryVO {
+ id: number // 分类编号
+ parentId: number // 父分类编号
+ name: string // 分类名称
+ code: string // 分类编码
+ sort: number // 分类排序
+ status: number // 开启状态
+}
+
+// ERP 产品分类 API
+export const ProductCategoryApi = {
+ // 查询产品分类列表
+ getProductCategoryList: async () => {
+ return await request.get({ url: `/erp/product-category/list` })
+ },
+
+ // 查询产品分类精简列表
+ getProductCategorySimpleList: async () => {
+ return await request.get({ url: `/erp/product-category/simple-list` })
+ },
+
+ // 查询产品分类详情
+ getProductCategory: async (id: number) => {
+ return await request.get({ url: `/erp/product-category/get?id=` + id })
+ },
+
+ // 新增产品分类
+ createProductCategory: async (data: ProductCategoryVO) => {
+ return await request.post({ url: `/erp/product-category/create`, data })
+ },
+
+ // 修改产品分类
+ updateProductCategory: async (data: ProductCategoryVO) => {
+ return await request.put({ url: `/erp/product-category/update`, data })
+ },
+
+ // 删除产品分类
+ deleteProductCategory: async (id: number) => {
+ return await request.delete({ url: `/erp/product-category/delete?id=` + id })
+ },
+
+ // 导出产品分类 Excel
+ exportProductCategory: async (params) => {
+ return await request.download({ url: `/erp/product-category/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/product/product/index.ts b/src/api/erp/product/product/index.ts
new file mode 100644
index 0000000..1136282
--- /dev/null
+++ b/src/api/erp/product/product/index.ts
@@ -0,0 +1,57 @@
+import request from '@/config/axios'
+
+// ERP 产品 VO
+export interface ProductVO {
+ id: number // 产品编号
+ name: string // 产品名称
+ barCode: string // 产品条码
+ categoryId: number // 产品类型编号
+ unitId: number // 单位编号
+ unitName?: string // 单位名字
+ status: number // 产品状态
+ standard: string // 产品规格
+ remark: string // 产品备注
+ expiryDay: number // 保质期天数
+ weight: number // 重量(kg)
+ purchasePrice: number // 采购价格,单位:元
+ salePrice: number // 销售价格,单位:元
+ minPrice: number // 最低价格,单位:元
+}
+
+// ERP 产品 API
+export const ProductApi = {
+ // 查询产品分页
+ getProductPage: async (params: any) => {
+ return await request.get({ url: `/erp/product/page`, params })
+ },
+
+ // 查询产品精简列表
+ getProductSimpleList: async () => {
+ return await request.get({ url: `/erp/product/simple-list` })
+ },
+
+ // 查询产品详情
+ getProduct: async (id: number) => {
+ return await request.get({ url: `/erp/product/get?id=` + id })
+ },
+
+ // 新增产品
+ createProduct: async (data: ProductVO) => {
+ return await request.post({ url: `/erp/product/create`, data })
+ },
+
+ // 修改产品
+ updateProduct: async (data: ProductVO) => {
+ return await request.put({ url: `/erp/product/update`, data })
+ },
+
+ // 删除产品
+ deleteProduct: async (id: number) => {
+ return await request.delete({ url: `/erp/product/delete?id=` + id })
+ },
+
+ // 导出产品 Excel
+ exportProduct: async (params) => {
+ return await request.download({ url: `/erp/product/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/product/unit/index.ts b/src/api/erp/product/unit/index.ts
new file mode 100644
index 0000000..1e1c8ac
--- /dev/null
+++ b/src/api/erp/product/unit/index.ts
@@ -0,0 +1,46 @@
+import request from '@/config/axios'
+
+// ERP 产品单位 VO
+export interface ProductUnitVO {
+ id: number // 单位编号
+ name: string // 单位名字
+ status: number // 单位状态
+}
+
+// ERP 产品单位 API
+export const ProductUnitApi = {
+ // 查询产品单位分页
+ getProductUnitPage: async (params: any) => {
+ return await request.get({ url: `/erp/product-unit/page`, params })
+ },
+
+ // 查询产品单位精简列表
+ getProductUnitSimpleList: async () => {
+ return await request.get({ url: `/erp/product-unit/simple-list` })
+ },
+
+ // 查询产品单位详情
+ getProductUnit: async (id: number) => {
+ return await request.get({ url: `/erp/product-unit/get?id=` + id })
+ },
+
+ // 新增产品单位
+ createProductUnit: async (data: ProductUnitVO) => {
+ return await request.post({ url: `/erp/product-unit/create`, data })
+ },
+
+ // 修改产品单位
+ updateProductUnit: async (data: ProductUnitVO) => {
+ return await request.put({ url: `/erp/product-unit/update`, data })
+ },
+
+ // 删除产品单位
+ deleteProductUnit: async (id: number) => {
+ return await request.delete({ url: `/erp/product-unit/delete?id=` + id })
+ },
+
+ // 导出产品单位 Excel
+ exportProductUnit: async (params) => {
+ return await request.download({ url: `/erp/product-unit/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/purchase/in/index.ts b/src/api/erp/purchase/in/index.ts
new file mode 100644
index 0000000..f94708d
--- /dev/null
+++ b/src/api/erp/purchase/in/index.ts
@@ -0,0 +1,64 @@
+import request from '@/config/axios'
+
+// ERP 采购入库 VO
+export interface PurchaseInVO {
+ id: number // 入库工单编号
+ no: string // 采购入库号
+ customerId: number // 客户编号
+ inTime: Date // 入库时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+ outCount: number // 采购出库数量
+ returnCount: number // 采购退货数量
+}
+
+// ERP 采购入库 API
+export const PurchaseInApi = {
+ // 查询采购入库分页
+ getPurchaseInPage: async (params: any) => {
+ return await request.get({ url: `/erp/purchase-in/page`, params })
+ },
+
+ // 查询采购入库详情
+ getPurchaseIn: async (id: number) => {
+ return await request.get({ url: `/erp/purchase-in/get?id=` + id })
+ },
+
+ // 新增采购入库
+ createPurchaseIn: async (data: PurchaseInVO) => {
+ return await request.post({ url: `/erp/purchase-in/create`, data })
+ },
+
+ // 修改采购入库
+ updatePurchaseIn: async (data: PurchaseInVO) => {
+ return await request.put({ url: `/erp/purchase-in/update`, data })
+ },
+
+ // 更新采购入库的状态
+ updatePurchaseInStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/purchase-in/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除采购入库
+ deletePurchaseIn: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/purchase-in/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出采购入库 Excel
+ exportPurchaseIn: async (params: any) => {
+ return await request.download({ url: `/erp/purchase-in/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/purchase/order/index.ts b/src/api/erp/purchase/order/index.ts
new file mode 100644
index 0000000..ad3222f
--- /dev/null
+++ b/src/api/erp/purchase/order/index.ts
@@ -0,0 +1,64 @@
+import request from '@/config/axios'
+
+// ERP 采购订单 VO
+export interface PurchaseOrderVO {
+ id: number // 订单工单编号
+ no: string // 采购订单号
+ customerId: number // 客户编号
+ orderTime: Date // 订单时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+ outCount: number // 采购出库数量
+ returnCount: number // 采购退货数量
+}
+
+// ERP 采购订单 API
+export const PurchaseOrderApi = {
+ // 查询采购订单分页
+ getPurchaseOrderPage: async (params: any) => {
+ return await request.get({ url: `/erp/purchase-order/page`, params })
+ },
+
+ // 查询采购订单详情
+ getPurchaseOrder: async (id: number) => {
+ return await request.get({ url: `/erp/purchase-order/get?id=` + id })
+ },
+
+ // 新增采购订单
+ createPurchaseOrder: async (data: PurchaseOrderVO) => {
+ return await request.post({ url: `/erp/purchase-order/create`, data })
+ },
+
+ // 修改采购订单
+ updatePurchaseOrder: async (data: PurchaseOrderVO) => {
+ return await request.put({ url: `/erp/purchase-order/update`, data })
+ },
+
+ // 更新采购订单的状态
+ updatePurchaseOrderStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/purchase-order/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除采购订单
+ deletePurchaseOrder: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/purchase-order/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出采购订单 Excel
+ exportPurchaseOrder: async (params: any) => {
+ return await request.download({ url: `/erp/purchase-order/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/purchase/return/index.ts b/src/api/erp/purchase/return/index.ts
new file mode 100644
index 0000000..182e04e
--- /dev/null
+++ b/src/api/erp/purchase/return/index.ts
@@ -0,0 +1,62 @@
+import request from '@/config/axios'
+
+// ERP 采购退货 VO
+export interface PurchaseReturnVO {
+ id: number // 采购退货编号
+ no: string // 采购退货号
+ customerId: number // 客户编号
+ returnTime: Date // 退货时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 采购退货 API
+export const PurchaseReturnApi = {
+ // 查询采购退货分页
+ getPurchaseReturnPage: async (params: any) => {
+ return await request.get({ url: `/erp/purchase-return/page`, params })
+ },
+
+ // 查询采购退货详情
+ getPurchaseReturn: async (id: number) => {
+ return await request.get({ url: `/erp/purchase-return/get?id=` + id })
+ },
+
+ // 新增采购退货
+ createPurchaseReturn: async (data: PurchaseReturnVO) => {
+ return await request.post({ url: `/erp/purchase-return/create`, data })
+ },
+
+ // 修改采购退货
+ updatePurchaseReturn: async (data: PurchaseReturnVO) => {
+ return await request.put({ url: `/erp/purchase-return/update`, data })
+ },
+
+ // 更新采购退货的状态
+ updatePurchaseReturnStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/purchase-return/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除采购退货
+ deletePurchaseReturn: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/purchase-return/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出采购退货 Excel
+ exportPurchaseReturn: async (params: any) => {
+ return await request.download({ url: `/erp/purchase-return/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/purchase/supplier/index.ts b/src/api/erp/purchase/supplier/index.ts
new file mode 100644
index 0000000..34729a5
--- /dev/null
+++ b/src/api/erp/purchase/supplier/index.ts
@@ -0,0 +1,58 @@
+import request from '@/config/axios'
+
+// ERP 供应商 VO
+export interface SupplierVO {
+ id: number // 供应商编号
+ name: string // 供应商名称
+ contact: string // 联系人
+ mobile: string // 手机号码
+ telephone: string // 联系电话
+ email: string // 电子邮箱
+ fax: string // 传真
+ remark: string // 备注
+ status: number // 开启状态
+ sort: number // 排序
+ taxNo: string // 纳税人识别号
+ taxPercent: number // 税率
+ bankName: string // 开户行
+ bankAccount: string // 开户账号
+ bankAddress: string // 开户地址
+}
+
+// ERP 供应商 API
+export const SupplierApi = {
+ // 查询供应商分页
+ getSupplierPage: async (params: any) => {
+ return await request.get({ url: `/erp/supplier/page`, params })
+ },
+
+ // 获得供应商精简列表
+ getSupplierSimpleList: async () => {
+ return await request.get({ url: `/erp/supplier/simple-list` })
+ },
+
+ // 查询供应商详情
+ getSupplier: async (id: number) => {
+ return await request.get({ url: `/erp/supplier/get?id=` + id })
+ },
+
+ // 新增供应商
+ createSupplier: async (data: SupplierVO) => {
+ return await request.post({ url: `/erp/supplier/create`, data })
+ },
+
+ // 修改供应商
+ updateSupplier: async (data: SupplierVO) => {
+ return await request.put({ url: `/erp/supplier/update`, data })
+ },
+
+ // 删除供应商
+ deleteSupplier: async (id: number) => {
+ return await request.delete({ url: `/erp/supplier/delete?id=` + id })
+ },
+
+ // 导出供应商 Excel
+ exportSupplier: async (params) => {
+ return await request.download({ url: `/erp/supplier/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/sale/customer/index.ts b/src/api/erp/sale/customer/index.ts
new file mode 100644
index 0000000..3aaefb5
--- /dev/null
+++ b/src/api/erp/sale/customer/index.ts
@@ -0,0 +1,58 @@
+import request from '@/config/axios'
+
+// ERP 客户 VO
+export interface CustomerVO {
+ id: number // 客户编号
+ name: string // 客户名称
+ contact: string // 联系人
+ mobile: string // 手机号码
+ telephone: string // 联系电话
+ email: string // 电子邮箱
+ fax: string // 传真
+ remark: string // 备注
+ status: number // 开启状态
+ sort: number // 排序
+ taxNo: string // 纳税人识别号
+ taxPercent: number // 税率
+ bankName: string // 开户行
+ bankAccount: string // 开户账号
+ bankAddress: string // 开户地址
+}
+
+// ERP 客户 API
+export const CustomerApi = {
+ // 查询客户分页
+ getCustomerPage: async (params: any) => {
+ return await request.get({ url: `/erp/customer/page`, params })
+ },
+
+ // 查询客户精简列表
+ getCustomerSimpleList: async () => {
+ return await request.get({ url: `/erp/customer/simple-list` })
+ },
+
+ // 查询客户详情
+ getCustomer: async (id: number) => {
+ return await request.get({ url: `/erp/customer/get?id=` + id })
+ },
+
+ // 新增客户
+ createCustomer: async (data: CustomerVO) => {
+ return await request.post({ url: `/erp/customer/create`, data })
+ },
+
+ // 修改客户
+ updateCustomer: async (data: CustomerVO) => {
+ return await request.put({ url: `/erp/customer/update`, data })
+ },
+
+ // 删除客户
+ deleteCustomer: async (id: number) => {
+ return await request.delete({ url: `/erp/customer/delete?id=` + id })
+ },
+
+ // 导出客户 Excel
+ exportCustomer: async (params) => {
+ return await request.download({ url: `/erp/customer/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/sale/order/index.ts b/src/api/erp/sale/order/index.ts
new file mode 100644
index 0000000..2d2ac53
--- /dev/null
+++ b/src/api/erp/sale/order/index.ts
@@ -0,0 +1,64 @@
+import request from '@/config/axios'
+
+// ERP 销售订单 VO
+export interface SaleOrderVO {
+ id: number // 订单工单编号
+ no: string // 销售订单号
+ customerId: number // 客户编号
+ orderTime: Date // 订单时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+ outCount: number // 销售出库数量
+ returnCount: number // 销售退货数量
+}
+
+// ERP 销售订单 API
+export const SaleOrderApi = {
+ // 查询销售订单分页
+ getSaleOrderPage: async (params: any) => {
+ return await request.get({ url: `/erp/sale-order/page`, params })
+ },
+
+ // 查询销售订单详情
+ getSaleOrder: async (id: number) => {
+ return await request.get({ url: `/erp/sale-order/get?id=` + id })
+ },
+
+ // 新增销售订单
+ createSaleOrder: async (data: SaleOrderVO) => {
+ return await request.post({ url: `/erp/sale-order/create`, data })
+ },
+
+ // 修改销售订单
+ updateSaleOrder: async (data: SaleOrderVO) => {
+ return await request.put({ url: `/erp/sale-order/update`, data })
+ },
+
+ // 更新销售订单的状态
+ updateSaleOrderStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/sale-order/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除销售订单
+ deleteSaleOrder: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/sale-order/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出销售订单 Excel
+ exportSaleOrder: async (params: any) => {
+ return await request.download({ url: `/erp/sale-order/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/sale/out/index.ts b/src/api/erp/sale/out/index.ts
new file mode 100644
index 0000000..cbc605e
--- /dev/null
+++ b/src/api/erp/sale/out/index.ts
@@ -0,0 +1,62 @@
+import request from '@/config/axios'
+
+// ERP 销售出库 VO
+export interface SaleOutVO {
+ id: number // 销售出库编号
+ no: string // 销售出库号
+ customerId: number // 客户编号
+ outTime: Date // 出库时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 销售出库 API
+export const SaleOutApi = {
+ // 查询销售出库分页
+ getSaleOutPage: async (params: any) => {
+ return await request.get({ url: `/erp/sale-out/page`, params })
+ },
+
+ // 查询销售出库详情
+ getSaleOut: async (id: number) => {
+ return await request.get({ url: `/erp/sale-out/get?id=` + id })
+ },
+
+ // 新增销售出库
+ createSaleOut: async (data: SaleOutVO) => {
+ return await request.post({ url: `/erp/sale-out/create`, data })
+ },
+
+ // 修改销售出库
+ updateSaleOut: async (data: SaleOutVO) => {
+ return await request.put({ url: `/erp/sale-out/update`, data })
+ },
+
+ // 更新销售出库的状态
+ updateSaleOutStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/sale-out/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除销售出库
+ deleteSaleOut: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/sale-out/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出销售出库 Excel
+ exportSaleOut: async (params: any) => {
+ return await request.download({ url: `/erp/sale-out/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/sale/return/index.ts b/src/api/erp/sale/return/index.ts
new file mode 100644
index 0000000..160ac01
--- /dev/null
+++ b/src/api/erp/sale/return/index.ts
@@ -0,0 +1,62 @@
+import request from '@/config/axios'
+
+// ERP 销售退货 VO
+export interface SaleReturnVO {
+ id: number // 销售退货编号
+ no: string // 销售退货号
+ customerId: number // 客户编号
+ returnTime: Date // 退货时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 销售退货 API
+export const SaleReturnApi = {
+ // 查询销售退货分页
+ getSaleReturnPage: async (params: any) => {
+ return await request.get({ url: `/erp/sale-return/page`, params })
+ },
+
+ // 查询销售退货详情
+ getSaleReturn: async (id: number) => {
+ return await request.get({ url: `/erp/sale-return/get?id=` + id })
+ },
+
+ // 新增销售退货
+ createSaleReturn: async (data: SaleReturnVO) => {
+ return await request.post({ url: `/erp/sale-return/create`, data })
+ },
+
+ // 修改销售退货
+ updateSaleReturn: async (data: SaleReturnVO) => {
+ return await request.put({ url: `/erp/sale-return/update`, data })
+ },
+
+ // 更新销售退货的状态
+ updateSaleReturnStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/sale-return/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除销售退货
+ deleteSaleReturn: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/sale-return/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出销售退货 Excel
+ exportSaleReturn: async (params: any) => {
+ return await request.download({ url: `/erp/sale-return/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/statistics/purchase/index.ts b/src/api/erp/statistics/purchase/index.ts
new file mode 100644
index 0000000..80d907a
--- /dev/null
+++ b/src/api/erp/statistics/purchase/index.ts
@@ -0,0 +1,28 @@
+import request from '@/config/axios'
+
+// ERP 采购全局统计 VO
+export interface ErpPurchaseSummaryRespVO {
+ todayPrice: number // 今日采购金额
+ yesterdayPrice: number // 昨日采购金额
+ monthPrice: number // 本月采购金额
+ yearPrice: number // 今年采购金额
+}
+
+// ERP 采购时间段统计 VO
+export interface ErpPurchaseTimeSummaryRespVO {
+ time: string // 时间
+ price: number // 采购金额
+}
+
+// ERP 采购统计 API
+export const PurchaseStatisticsApi = {
+ // 获得采购统计
+ getPurchaseSummary: async (): Promise => {
+ return await request.get({ url: `/erp/purchase-statistics/summary` })
+ },
+
+ // 获得采购时间段统计
+ getPurchaseTimeSummary: async (): Promise => {
+ return await request.get({ url: `/erp/purchase-statistics/time-summary` })
+ }
+}
diff --git a/src/api/erp/statistics/sale/index.ts b/src/api/erp/statistics/sale/index.ts
new file mode 100644
index 0000000..09d8500
--- /dev/null
+++ b/src/api/erp/statistics/sale/index.ts
@@ -0,0 +1,28 @@
+import request from '@/config/axios'
+
+// ERP 销售全局统计 VO
+export interface ErpSaleSummaryRespVO {
+ todayPrice: number // 今日销售金额
+ yesterdayPrice: number // 昨日销售金额
+ monthPrice: number // 本月销售金额
+ yearPrice: number // 今年销售金额
+}
+
+// ERP 销售时间段统计 VO
+export interface ErpSaleTimeSummaryRespVO {
+ time: string // 时间
+ price: number // 销售金额
+}
+
+// ERP 销售统计 API
+export const SaleStatisticsApi = {
+ // 获得销售统计
+ getSaleSummary: async (): Promise => {
+ return await request.get({ url: `/erp/sale-statistics/summary` })
+ },
+
+ // 获得销售时间段统计
+ getSaleTimeSummary: async (): Promise => {
+ return await request.get({ url: `/erp/sale-statistics/time-summary` })
+ }
+}
diff --git a/src/api/erp/stock/check/index.ts b/src/api/erp/stock/check/index.ts
new file mode 100644
index 0000000..4a3e653
--- /dev/null
+++ b/src/api/erp/stock/check/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+// ERP 库存盘点单 VO
+export interface StockCheckVO {
+ id: number // 出库编号
+ no: string // 出库单号
+ outTime: Date // 出库时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 库存盘点单 API
+export const StockCheckApi = {
+ // 查询库存盘点单分页
+ getStockCheckPage: async (params: any) => {
+ return await request.get({ url: `/erp/stock-check/page`, params })
+ },
+
+ // 查询库存盘点单详情
+ getStockCheck: async (id: number) => {
+ return await request.get({ url: `/erp/stock-check/get?id=` + id })
+ },
+
+ // 新增库存盘点单
+ createStockCheck: async (data: StockCheckVO) => {
+ return await request.post({ url: `/erp/stock-check/create`, data })
+ },
+
+ // 修改库存盘点单
+ updateStockCheck: async (data: StockCheckVO) => {
+ return await request.put({ url: `/erp/stock-check/update`, data })
+ },
+
+ // 更新库存盘点单的状态
+ updateStockCheckStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/stock-check/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除库存盘点单
+ deleteStockCheck: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/stock-check/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出库存盘点单 Excel
+ exportStockCheck: async (params) => {
+ return await request.download({ url: `/erp/stock-check/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/stock/in/index.ts b/src/api/erp/stock/in/index.ts
new file mode 100644
index 0000000..148b64f
--- /dev/null
+++ b/src/api/erp/stock/in/index.ts
@@ -0,0 +1,62 @@
+import request from '@/config/axios'
+
+// ERP 其它入库单 VO
+export interface StockInVO {
+ id: number // 入库编号
+ no: string // 入库单号
+ supplierId: number // 供应商编号
+ inTime: Date // 入库时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 其它入库单 API
+export const StockInApi = {
+ // 查询其它入库单分页
+ getStockInPage: async (params: any) => {
+ return await request.get({ url: `/erp/stock-in/page`, params })
+ },
+
+ // 查询其它入库单详情
+ getStockIn: async (id: number) => {
+ return await request.get({ url: `/erp/stock-in/get?id=` + id })
+ },
+
+ // 新增其它入库单
+ createStockIn: async (data: StockInVO) => {
+ return await request.post({ url: `/erp/stock-in/create`, data })
+ },
+
+ // 修改其它入库单
+ updateStockIn: async (data: StockInVO) => {
+ return await request.put({ url: `/erp/stock-in/update`, data })
+ },
+
+ // 更新其它入库单的状态
+ updateStockInStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/stock-in/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除其它入库单
+ deleteStockIn: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/stock-in/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出其它入库单 Excel
+ exportStockIn: async (params) => {
+ return await request.download({ url: `/erp/stock-in/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/stock/move/index.ts b/src/api/erp/stock/move/index.ts
new file mode 100644
index 0000000..398568e
--- /dev/null
+++ b/src/api/erp/stock/move/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+// ERP 库存调度单 VO
+export interface StockMoveVO {
+ id: number // 出库编号
+ no: string // 出库单号
+ outTime: Date // 出库时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 库存调度单 API
+export const StockMoveApi = {
+ // 查询库存调度单分页
+ getStockMovePage: async (params: any) => {
+ return await request.get({ url: `/erp/stock-move/page`, params })
+ },
+
+ // 查询库存调度单详情
+ getStockMove: async (id: number) => {
+ return await request.get({ url: `/erp/stock-move/get?id=` + id })
+ },
+
+ // 新增库存调度单
+ createStockMove: async (data: StockMoveVO) => {
+ return await request.post({ url: `/erp/stock-move/create`, data })
+ },
+
+ // 修改库存调度单
+ updateStockMove: async (data: StockMoveVO) => {
+ return await request.put({ url: `/erp/stock-move/update`, data })
+ },
+
+ // 更新库存调度单的状态
+ updateStockMoveStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/stock-move/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除库存调度单
+ deleteStockMove: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/stock-move/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出库存调度单 Excel
+ exportStockMove: async (params) => {
+ return await request.download({ url: `/erp/stock-move/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/stock/out/index.ts b/src/api/erp/stock/out/index.ts
new file mode 100644
index 0000000..f0f40d3
--- /dev/null
+++ b/src/api/erp/stock/out/index.ts
@@ -0,0 +1,62 @@
+import request from '@/config/axios'
+
+// ERP 其它出库单 VO
+export interface StockOutVO {
+ id: number // 出库编号
+ no: string // 出库单号
+ customerId: number // 客户编号
+ outTime: Date // 出库时间
+ totalCount: number // 合计数量
+ totalPrice: number // 合计金额,单位:元
+ status: number // 状态
+ remark: string // 备注
+}
+
+// ERP 其它出库单 API
+export const StockOutApi = {
+ // 查询其它出库单分页
+ getStockOutPage: async (params: any) => {
+ return await request.get({ url: `/erp/stock-out/page`, params })
+ },
+
+ // 查询其它出库单详情
+ getStockOut: async (id: number) => {
+ return await request.get({ url: `/erp/stock-out/get?id=` + id })
+ },
+
+ // 新增其它出库单
+ createStockOut: async (data: StockOutVO) => {
+ return await request.post({ url: `/erp/stock-out/create`, data })
+ },
+
+ // 修改其它出库单
+ updateStockOut: async (data: StockOutVO) => {
+ return await request.put({ url: `/erp/stock-out/update`, data })
+ },
+
+ // 更新其它出库单的状态
+ updateStockOutStatus: async (id: number, status: number) => {
+ return await request.put({
+ url: `/erp/stock-out/update-status`,
+ params: {
+ id,
+ status
+ }
+ })
+ },
+
+ // 删除其它出库单
+ deleteStockOut: async (ids: number[]) => {
+ return await request.delete({
+ url: `/erp/stock-out/delete`,
+ params: {
+ ids: ids.join(',')
+ }
+ })
+ },
+
+ // 导出其它出库单 Excel
+ exportStockOut: async (params) => {
+ return await request.download({ url: `/erp/stock-out/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/stock/record/index.ts b/src/api/erp/stock/record/index.ts
new file mode 100644
index 0000000..a758eb4
--- /dev/null
+++ b/src/api/erp/stock/record/index.ts
@@ -0,0 +1,32 @@
+import request from '@/config/axios'
+
+// ERP 产品库存明细 VO
+export interface StockRecordVO {
+ id: number // 编号
+ productId: number // 产品编号
+ warehouseId: number // 仓库编号
+ count: number // 出入库数量
+ totalCount: number // 总库存量
+ bizType: number // 业务类型
+ bizId: number // 业务编号
+ bizItemId: number // 业务项编号
+ bizNo: string // 业务单号
+}
+
+// ERP 产品库存明细 API
+export const StockRecordApi = {
+ // 查询产品库存明细分页
+ getStockRecordPage: async (params: any) => {
+ return await request.get({ url: `/erp/stock-record/page`, params })
+ },
+
+ // 查询产品库存明细详情
+ getStockRecord: async (id: number) => {
+ return await request.get({ url: `/erp/stock-record/get?id=` + id })
+ },
+
+ // 导出产品库存明细 Excel
+ exportStockRecord: async (params) => {
+ return await request.download({ url: `/erp/stock-record/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/stock/stock/index.ts b/src/api/erp/stock/stock/index.ts
new file mode 100644
index 0000000..4de86fb
--- /dev/null
+++ b/src/api/erp/stock/stock/index.ts
@@ -0,0 +1,41 @@
+import request from '@/config/axios'
+
+// ERP 产品库存 VO
+export interface StockVO {
+ // 编号
+ id: number
+ // 产品编号
+ productId: number
+ // 仓库编号
+ warehouseId: number
+ // 库存数量
+ count: number
+}
+
+// ERP 产品库存 API
+export const StockApi = {
+ // 查询产品库存分页
+ getStockPage: async (params: any) => {
+ return await request.get({ url: `/erp/stock/page`, params })
+ },
+
+ // 查询产品库存详情
+ getStock: async (id: number) => {
+ return await request.get({ url: `/erp/stock/get?id=` + id })
+ },
+
+ // 查询产品库存详情
+ getStock2: async (productId: number, warehouseId: number) => {
+ return await request.get({ url: `/erp/stock/get`, params: { productId, warehouseId } })
+ },
+
+ // 获得产品库存数量
+ getStockCount: async (productId: number) => {
+ return await request.get({ url: `/erp/stock/get-count`, params: { productId } })
+ },
+
+ // 导出产品库存 Excel
+ exportStock: async (params) => {
+ return await request.download({ url: `/erp/stock/export-excel`, params })
+ }
+}
diff --git a/src/api/erp/stock/warehouse/index.ts b/src/api/erp/stock/warehouse/index.ts
new file mode 100644
index 0000000..598824b
--- /dev/null
+++ b/src/api/erp/stock/warehouse/index.ts
@@ -0,0 +1,64 @@
+import request from '@/config/axios'
+
+// ERP 仓库 VO
+export interface WarehouseVO {
+ id: number // 仓库编号
+ name: string // 仓库名称
+ address: string // 仓库地址
+ sort: number // 排序
+ remark: string // 备注
+ principal: string // 负责人
+ warehousePrice: number // 仓储费,单位:元
+ truckagePrice: number // 搬运费,单位:元
+ status: number // 开启状态
+ defaultStatus: boolean // 是否默认
+}
+
+// ERP 仓库 API
+export const WarehouseApi = {
+ // 查询仓库分页
+ getWarehousePage: async (params: any) => {
+ return await request.get({ url: `/erp/warehouse/page`, params })
+ },
+
+ // 查询仓库精简列表
+ getWarehouseSimpleList: async () => {
+ return await request.get({ url: `/erp/warehouse/simple-list` })
+ },
+
+ // 查询仓库详情
+ getWarehouse: async (id: number) => {
+ return await request.get({ url: `/erp/warehouse/get?id=` + id })
+ },
+
+ // 新增仓库
+ createWarehouse: async (data: WarehouseVO) => {
+ return await request.post({ url: `/erp/warehouse/create`, data })
+ },
+
+ // 修改仓库
+ updateWarehouse: async (data: WarehouseVO) => {
+ return await request.put({ url: `/erp/warehouse/update`, data })
+ },
+
+ // 修改仓库默认状态
+ updateWarehouseDefaultStatus: async (id: number, defaultStatus: boolean) => {
+ return await request.put({
+ url: `/erp/warehouse/update-default-status`,
+ params: {
+ id,
+ defaultStatus
+ }
+ })
+ },
+
+ // 删除仓库
+ deleteWarehouse: async (id: number) => {
+ return await request.delete({ url: `/erp/warehouse/delete?id=` + id })
+ },
+
+ // 导出仓库 Excel
+ exportWarehouse: async (params) => {
+ return await request.download({ url: `/erp/warehouse/export-excel`, params })
+ }
+}
diff --git a/src/api/infra/apiAccessLog/index.ts b/src/api/infra/apiAccessLog/index.ts
new file mode 100644
index 0000000..4fa50e1
--- /dev/null
+++ b/src/api/infra/apiAccessLog/index.ts
@@ -0,0 +1,34 @@
+import request from '@/config/axios'
+
+export interface ApiAccessLogVO {
+ id: number
+ traceId: string
+ userId: number
+ userType: number
+ applicationName: string
+ requestMethod: string
+ requestParams: string
+ responseBody: string
+ requestUrl: string
+ userIp: string
+ userAgent: string
+ operateModule: string
+ operateName: string
+ operateType: number
+ beginTime: Date
+ endTime: Date
+ duration: number
+ resultCode: number
+ resultMsg: string
+ createTime: Date
+}
+
+// 查询列表API 访问日志
+export const getApiAccessLogPage = (params: PageParam) => {
+ return request.get({ url: '/infra/api-access-log/page', params })
+}
+
+// 导出API 访问日志
+export const exportApiAccessLog = (params) => {
+ return request.download({ url: '/infra/api-access-log/export-excel', params })
+}
diff --git a/src/api/infra/apiErrorLog/index.ts b/src/api/infra/apiErrorLog/index.ts
new file mode 100644
index 0000000..59ee214
--- /dev/null
+++ b/src/api/infra/apiErrorLog/index.ts
@@ -0,0 +1,48 @@
+import request from '@/config/axios'
+
+export interface ApiErrorLogVO {
+ id: number
+ traceId: string
+ userId: number
+ userType: number
+ applicationName: string
+ requestMethod: string
+ requestParams: string
+ requestUrl: string
+ userIp: string
+ userAgent: string
+ exceptionTime: Date
+ exceptionName: string
+ exceptionMessage: string
+ exceptionRootCauseMessage: string
+ exceptionStackTrace: string
+ exceptionClassName: string
+ exceptionFileName: string
+ exceptionMethodName: string
+ exceptionLineNumber: number
+ processUserId: number
+ processStatus: number
+ processTime: Date
+ resultCode: number
+ createTime: Date
+}
+
+// 查询列表API 访问日志
+export const getApiErrorLogPage = (params: PageParam) => {
+ return request.get({ url: '/infra/api-error-log/page', params })
+}
+
+// 更新 API 错误日志的处理状态
+export const updateApiErrorLogPage = (id: number, processStatus: number) => {
+ return request.put({
+ url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus
+ })
+}
+
+// 导出API 访问日志
+export const exportApiErrorLog = (params) => {
+ return request.download({
+ url: '/infra/api-error-log/export-excel',
+ params
+ })
+}
diff --git a/src/api/infra/codegen/index.ts b/src/api/infra/codegen/index.ts
new file mode 100644
index 0000000..441ca83
--- /dev/null
+++ b/src/api/infra/codegen/index.ts
@@ -0,0 +1,122 @@
+import request from '@/config/axios'
+
+export type CodegenTableVO = {
+ id: number
+ tableId: number
+ isParentMenuIdValid: boolean
+ dataSourceConfigId: number
+ scene: number
+ tableName: string
+ tableComment: string
+ remark: string
+ moduleName: string
+ businessName: string
+ className: string
+ classComment: string
+ author: string
+ createTime: Date
+ updateTime: Date
+ templateType: number
+ parentMenuId: number
+}
+
+export type CodegenColumnVO = {
+ id: number
+ tableId: number
+ columnName: string
+ dataType: string
+ columnComment: string
+ nullable: number
+ primaryKey: number
+ ordinalPosition: number
+ javaType: string
+ javaField: string
+ dictType: string
+ example: string
+ createOperation: number
+ updateOperation: number
+ listOperation: number
+ listOperationCondition: string
+ listOperationResult: number
+ htmlType: string
+}
+
+export type DatabaseTableVO = {
+ name: string
+ comment: string
+}
+
+export type CodegenDetailVO = {
+ table: CodegenTableVO
+ columns: CodegenColumnVO[]
+}
+
+export type CodegenPreviewVO = {
+ filePath: string
+ code: string
+}
+
+export type CodegenUpdateReqVO = {
+ table: CodegenTableVO | any
+ columns: CodegenColumnVO[]
+}
+
+export type CodegenCreateListReqVO = {
+ dataSourceConfigId: number
+ tableNames: string[]
+}
+
+// 查询列表代码生成表定义
+export const getCodegenTableList = (dataSourceConfigId: number) => {
+ return request.get({ url: '/infra/codegen/table/list?dataSourceConfigId=' + dataSourceConfigId })
+}
+
+// 查询列表代码生成表定义
+export const getCodegenTablePage = (params: PageParam) => {
+ return request.get({ url: '/infra/codegen/table/page', params })
+}
+
+// 查询详情代码生成表定义
+export const getCodegenTable = (id: number) => {
+ return request.get({ url: '/infra/codegen/detail?tableId=' + id })
+}
+
+// 新增代码生成表定义
+export const createCodegenTable = (data: CodegenCreateListReqVO) => {
+ return request.post({ url: '/infra/codegen/create', data })
+}
+
+// 修改代码生成表定义
+export const updateCodegenTable = (data: CodegenUpdateReqVO) => {
+ return request.put({ url: '/infra/codegen/update', data })
+}
+
+// 基于数据库的表结构,同步数据库的表和字段定义
+export const syncCodegenFromDB = (id: number) => {
+ return request.put({ url: '/infra/codegen/sync-from-db?tableId=' + id })
+}
+
+// 预览生成代码
+export const previewCodegen = (id: number) => {
+ return request.get({ url: '/infra/codegen/preview?tableId=' + id })
+}
+
+// 下载生成代码
+export const downloadCodegen = (id: number) => {
+ return request.download({ url: '/infra/codegen/download?tableId=' + id })
+}
+
+// 获得表定义
+export const getSchemaTableList = (params) => {
+ return request.get({ url: '/infra/codegen/db/table/list', params })
+}
+
+// 基于数据库的表结构,创建代码生成器的表定义
+export const createCodegenList = (data) => {
+ return request.post({ url: '/infra/codegen/create-list', data })
+}
+
+// 删除代码生成表定义
+export const deleteCodegenTable = (id: number) => {
+ return request.delete({ url: '/infra/codegen/delete?tableId=' + id })
+}
diff --git a/src/api/infra/config/index.ts b/src/api/infra/config/index.ts
new file mode 100644
index 0000000..5ef59f3
--- /dev/null
+++ b/src/api/infra/config/index.ts
@@ -0,0 +1,48 @@
+import request from '@/config/axios'
+
+export interface ConfigVO {
+ id: number | undefined
+ category: string
+ name: string
+ key: string
+ value: string
+ type: number
+ visible: boolean
+ remark: string
+ createTime: Date
+}
+
+// 查询参数列表
+export const getConfigPage = (params: PageParam) => {
+ return request.get({ url: '/infra/config/page', params })
+}
+
+// 查询参数详情
+export const getConfig = (id: number) => {
+ return request.get({ url: '/infra/config/get?id=' + id })
+}
+
+// 根据参数键名查询参数值
+export const getConfigKey = (configKey: string) => {
+ return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey })
+}
+
+// 新增参数
+export const createConfig = (data: ConfigVO) => {
+ return request.post({ url: '/infra/config/create', data })
+}
+
+// 修改参数
+export const updateConfig = (data: ConfigVO) => {
+ return request.put({ url: '/infra/config/update', data })
+}
+
+// 删除参数
+export const deleteConfig = (id: number) => {
+ return request.delete({ url: '/infra/config/delete?id=' + id })
+}
+
+// 导出参数
+export const exportConfig = (params) => {
+ return request.download({ url: '/infra/config/export', params })
+}
diff --git a/src/api/infra/dataSourceConfig/index.ts b/src/api/infra/dataSourceConfig/index.ts
new file mode 100644
index 0000000..b413f34
--- /dev/null
+++ b/src/api/infra/dataSourceConfig/index.ts
@@ -0,0 +1,35 @@
+import request from '@/config/axios'
+
+export interface DataSourceConfigVO {
+ id: number | undefined
+ name: string
+ url: string
+ username: string
+ password: string
+ createTime?: Date
+}
+
+// 新增数据源配置
+export const createDataSourceConfig = (data: DataSourceConfigVO) => {
+ return request.post({ url: '/infra/data-source-config/create', data })
+}
+
+// 修改数据源配置
+export const updateDataSourceConfig = (data: DataSourceConfigVO) => {
+ return request.put({ url: '/infra/data-source-config/update', data })
+}
+
+// 删除数据源配置
+export const deleteDataSourceConfig = (id: number) => {
+ return request.delete({ url: '/infra/data-source-config/delete?id=' + id })
+}
+
+// 查询数据源配置详情
+export const getDataSourceConfig = (id: number) => {
+ return request.get({ url: '/infra/data-source-config/get?id=' + id })
+}
+
+// 查询数据源配置列表
+export const getDataSourceConfigList = () => {
+ return request.get({ url: '/infra/data-source-config/list' })
+}
diff --git a/src/api/infra/demo/demo01/index.ts b/src/api/infra/demo/demo01/index.ts
new file mode 100644
index 0000000..e34a05d
--- /dev/null
+++ b/src/api/infra/demo/demo01/index.ts
@@ -0,0 +1,40 @@
+import request from '@/config/axios'
+
+export interface Demo01ContactVO {
+ id: number
+ name: string
+ sex: number
+ birthday: Date
+ description: string
+ avatar: string
+}
+
+// 查询示例联系人分页
+export const getDemo01ContactPage = async (params) => {
+ return await request.get({ url: `/infra/demo01-contact/page`, params })
+}
+
+// 查询示例联系人详情
+export const getDemo01Contact = async (id: number) => {
+ return await request.get({ url: `/infra/demo01-contact/get?id=` + id })
+}
+
+// 新增示例联系人
+export const createDemo01Contact = async (data: Demo01ContactVO) => {
+ return await request.post({ url: `/infra/demo01-contact/create`, data })
+}
+
+// 修改示例联系人
+export const updateDemo01Contact = async (data: Demo01ContactVO) => {
+ return await request.put({ url: `/infra/demo01-contact/update`, data })
+}
+
+// 删除示例联系人
+export const deleteDemo01Contact = async (id: number) => {
+ return await request.delete({ url: `/infra/demo01-contact/delete?id=` + id })
+}
+
+// 导出示例联系人 Excel
+export const exportDemo01Contact = async (params) => {
+ return await request.download({ url: `/infra/demo01-contact/export-excel`, params })
+}
diff --git a/src/api/infra/demo/demo02/index.ts b/src/api/infra/demo/demo02/index.ts
new file mode 100644
index 0000000..736a123
--- /dev/null
+++ b/src/api/infra/demo/demo02/index.ts
@@ -0,0 +1,37 @@
+import request from '@/config/axios'
+
+export interface Demo02CategoryVO {
+ id: number
+ name: string
+ parentId: number
+}
+
+// 查询示例分类列表
+export const getDemo02CategoryList = async () => {
+ return await request.get({ url: `/infra/demo02-category/list` })
+}
+
+// 查询示例分类详情
+export const getDemo02Category = async (id: number) => {
+ return await request.get({ url: `/infra/demo02-category/get?id=` + id })
+}
+
+// 新增示例分类
+export const createDemo02Category = async (data: Demo02CategoryVO) => {
+ return await request.post({ url: `/infra/demo02-category/create`, data })
+}
+
+// 修改示例分类
+export const updateDemo02Category = async (data: Demo02CategoryVO) => {
+ return await request.put({ url: `/infra/demo02-category/update`, data })
+}
+
+// 删除示例分类
+export const deleteDemo02Category = async (id: number) => {
+ return await request.delete({ url: `/infra/demo02-category/delete?id=` + id })
+}
+
+// 导出示例分类 Excel
+export const exportDemo02Category = async (params) => {
+ return await request.download({ url: `/infra/demo02-category/export-excel`, params })
+}
diff --git a/src/api/infra/demo/demo03/erp/index.ts b/src/api/infra/demo/demo03/erp/index.ts
new file mode 100644
index 0000000..a2ab539
--- /dev/null
+++ b/src/api/infra/demo/demo03/erp/index.ts
@@ -0,0 +1,91 @@
+import request from '@/config/axios'
+
+export interface Demo03StudentVO {
+ id: number
+ name: string
+ sex: number
+ birthday: Date
+ description: string
+}
+
+// 查询学生分页
+export const getDemo03StudentPage = async (params) => {
+ return await request.get({ url: `/infra/demo03-student/page`, params })
+}
+
+// 查询学生详情
+export const getDemo03Student = async (id: number) => {
+ return await request.get({ url: `/infra/demo03-student/get?id=` + id })
+}
+
+// 新增学生
+export const createDemo03Student = async (data: Demo03StudentVO) => {
+ return await request.post({ url: `/infra/demo03-student/create`, data })
+}
+
+// 修改学生
+export const updateDemo03Student = async (data: Demo03StudentVO) => {
+ return await request.put({ url: `/infra/demo03-student/update`, data })
+}
+
+// 删除学生
+export const deleteDemo03Student = async (id: number) => {
+ return await request.delete({ url: `/infra/demo03-student/delete?id=` + id })
+}
+
+// 导出学生 Excel
+export const exportDemo03Student = async (params) => {
+ return await request.download({ url: `/infra/demo03-student/export-excel`, params })
+}
+
+// ==================== 子表(学生课程) ====================
+
+// 获得学生课程分页
+export const getDemo03CoursePage = async (params) => {
+ return await request.get({ url: `/infra/demo03-student/demo03-course/page`, params })
+}
+// 新增学生课程
+export const createDemo03Course = async (data) => {
+ return await request.post({ url: `/infra/demo03-student/demo03-course/create`, data })
+}
+
+// 修改学生课程
+export const updateDemo03Course = async (data) => {
+ return await request.put({ url: `/infra/demo03-student/demo03-course/update`, data })
+}
+
+// 删除学生课程
+export const deleteDemo03Course = async (id: number) => {
+ return await request.delete({ url: `/infra/demo03-student/demo03-course/delete?id=` + id })
+}
+
+// 获得学生课程
+export const getDemo03Course = async (id: number) => {
+ return await request.get({ url: `/infra/demo03-student/demo03-course/get?id=` + id })
+}
+
+// ==================== 子表(学生班级) ====================
+
+// 获得学生班级分页
+export const getDemo03GradePage = async (params) => {
+ return await request.get({ url: `/infra/demo03-student/demo03-grade/page`, params })
+}
+// 新增学生班级
+export const createDemo03Grade = async (data) => {
+ return await request.post({ url: `/infra/demo03-student/demo03-grade/create`, data })
+}
+
+// 修改学生班级
+export const updateDemo03Grade = async (data) => {
+ return await request.put({ url: `/infra/demo03-student/demo03-grade/update`, data })
+}
+
+// 删除学生班级
+export const deleteDemo03Grade = async (id: number) => {
+ return await request.delete({ url: `/infra/demo03-student/demo03-grade/delete?id=` + id })
+}
+
+// 获得学生班级
+export const getDemo03Grade = async (id: number) => {
+ return await request.get({ url: `/infra/demo03-student/demo03-grade/get?id=` + id })
+}
diff --git a/src/api/infra/demo/demo03/inner/index.ts b/src/api/infra/demo/demo03/inner/index.ts
new file mode 100644
index 0000000..e366307
--- /dev/null
+++ b/src/api/infra/demo/demo03/inner/index.ts
@@ -0,0 +1,57 @@
+import request from '@/config/axios'
+
+export interface Demo03StudentVO {
+ id: number
+ name: string
+ sex: number
+ birthday: Date
+ description: string
+}
+
+// 查询学生分页
+export const getDemo03StudentPage = async (params) => {
+ return await request.get({ url: `/infra/demo03-student/page`, params })
+}
+
+// 查询学生详情
+export const getDemo03Student = async (id: number) => {
+ return await request.get({ url: `/infra/demo03-student/get?id=` + id })
+}
+
+// 新增学生
+export const createDemo03Student = async (data: Demo03StudentVO) => {
+ return await request.post({ url: `/infra/demo03-student/create`, data })
+}
+
+// 修改学生
+export const updateDemo03Student = async (data: Demo03StudentVO) => {
+ return await request.put({ url: `/infra/demo03-student/update`, data })
+}
+
+// 删除学生
+export const deleteDemo03Student = async (id: number) => {
+ return await request.delete({ url: `/infra/demo03-student/delete?id=` + id })
+}
+
+// 导出学生 Excel
+export const exportDemo03Student = async (params) => {
+ return await request.download({ url: `/infra/demo03-student/export-excel`, params })
+}
+
+// ==================== 子表(学生课程) ====================
+
+// 获得学生课程列表
+export const getDemo03CourseListByStudentId = async (studentId) => {
+ return await request.get({
+ url: `/infra/demo03-student/demo03-course/list-by-student-id?studentId=` + studentId
+ })
+}
+
+// ==================== 子表(学生班级) ====================
+
+// 获得学生班级
+export const getDemo03GradeByStudentId = async (studentId) => {
+ return await request.get({
+ url: `/infra/demo03-student/demo03-grade/get-by-student-id?studentId=` + studentId
+ })
+}
diff --git a/src/api/infra/demo/demo03/normal/index.ts b/src/api/infra/demo/demo03/normal/index.ts
new file mode 100644
index 0000000..e366307
--- /dev/null
+++ b/src/api/infra/demo/demo03/normal/index.ts
@@ -0,0 +1,57 @@
+import request from '@/config/axios'
+
+export interface Demo03StudentVO {
+ id: number
+ name: string
+ sex: number
+ birthday: Date
+ description: string
+}
+
+// 查询学生分页
+export const getDemo03StudentPage = async (params) => {
+ return await request.get({ url: `/infra/demo03-student/page`, params })
+}
+
+// 查询学生详情
+export const getDemo03Student = async (id: number) => {
+ return await request.get({ url: `/infra/demo03-student/get?id=` + id })
+}
+
+// 新增学生
+export const createDemo03Student = async (data: Demo03StudentVO) => {
+ return await request.post({ url: `/infra/demo03-student/create`, data })
+}
+
+// 修改学生
+export const updateDemo03Student = async (data: Demo03StudentVO) => {
+ return await request.put({ url: `/infra/demo03-student/update`, data })
+}
+
+// 删除学生
+export const deleteDemo03Student = async (id: number) => {
+ return await request.delete({ url: `/infra/demo03-student/delete?id=` + id })
+}
+
+// 导出学生 Excel
+export const exportDemo03Student = async (params) => {
+ return await request.download({ url: `/infra/demo03-student/export-excel`, params })
+}
+
+// ==================== 子表(学生课程) ====================
+
+// 获得学生课程列表
+export const getDemo03CourseListByStudentId = async (studentId) => {
+ return await request.get({
+ url: `/infra/demo03-student/demo03-course/list-by-student-id?studentId=` + studentId
+ })
+}
+
+// ==================== 子表(学生班级) ====================
+
+// 获得学生班级
+export const getDemo03GradeByStudentId = async (studentId) => {
+ return await request.get({
+ url: `/infra/demo03-student/demo03-grade/get-by-student-id?studentId=` + studentId
+ })
+}
diff --git a/src/api/infra/file/index.ts b/src/api/infra/file/index.ts
new file mode 100644
index 0000000..0e1b2e7
--- /dev/null
+++ b/src/api/infra/file/index.ts
@@ -0,0 +1,45 @@
+import request from '@/config/axios'
+
+export interface FilePageReqVO extends PageParam {
+ path?: string
+ type?: string
+ createTime?: Date[]
+}
+
+// 文件预签名地址 Response VO
+export interface FilePresignedUrlRespVO {
+ // 文件配置编号
+ configId: number
+ // 文件上传 URL
+ uploadUrl: string
+ // 文件 URL
+ url: string
+}
+
+// 查询文件列表
+export const getFilePage = (params: FilePageReqVO) => {
+ return request.get({ url: '/infra/file/page', params })
+}
+
+// 删除文件
+export const deleteFile = (id: number) => {
+ return request.delete({ url: '/infra/file/delete?id=' + id })
+}
+
+// 获取文件预签名地址
+export const getFilePresignedUrl = (path: string) => {
+ return request.get({
+ url: '/infra/file/presigned-url',
+ params: { path }
+ })
+}
+
+// 创建文件
+export const createFile = (data: any) => {
+ return request.post({ url: '/infra/file/create', data })
+}
+
+// 上传文件
+export const updateFile = (data: any) => {
+ return request.upload({ url: '/infra/file/upload', data })
+}
diff --git a/src/api/infra/fileConfig/index.ts b/src/api/infra/fileConfig/index.ts
new file mode 100644
index 0000000..ba40054
--- /dev/null
+++ b/src/api/infra/fileConfig/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+export interface FileClientConfig {
+ basePath: string
+ host?: string
+ port?: number
+ username?: string
+ password?: string
+ mode?: string
+ endpoint?: string
+ bucket?: string
+ accessKey?: string
+ accessSecret?: string
+ domain: string
+}
+
+export interface FileConfigVO {
+ id: number
+ name: string
+ storage?: number
+ master: boolean
+ visible: boolean
+ config: FileClientConfig
+ remark: string
+ createTime: Date
+}
+
+// 查询文件配置列表
+export const getFileConfigPage = (params: PageParam) => {
+ return request.get({ url: '/infra/file-config/page', params })
+}
+
+// 查询文件配置详情
+export const getFileConfig = (id: number) => {
+ return request.get({ url: '/infra/file-config/get?id=' + id })
+}
+
+// 更新文件配置为主配置
+export const updateFileConfigMaster = (id: number) => {
+ return request.put({ url: '/infra/file-config/update-master?id=' + id })
+}
+
+// 新增文件配置
+export const createFileConfig = (data: FileConfigVO) => {
+ return request.post({ url: '/infra/file-config/create', data })
+}
+
+// 修改文件配置
+export const updateFileConfig = (data: FileConfigVO) => {
+ return request.put({ url: '/infra/file-config/update', data })
+}
+
+// 删除文件配置
+export const deleteFileConfig = (id: number) => {
+ return request.delete({ url: '/infra/file-config/delete?id=' + id })
+}
+
+// 测试文件配置
+export const testFileConfig = (id: number) => {
+ return request.get({ url: '/infra/file-config/test?id=' + id })
+}
diff --git a/src/api/infra/job/index.ts b/src/api/infra/job/index.ts
new file mode 100644
index 0000000..033b2cb
--- /dev/null
+++ b/src/api/infra/job/index.ts
@@ -0,0 +1,63 @@
+import request from '@/config/axios'
+
+export interface JobVO {
+ id: number
+ name: string
+ status: number
+ handlerName: string
+ handlerParam: string
+ cronExpression: string
+ retryCount: number
+ retryInterval: number
+ monitorTimeout: number
+ createTime: Date
+}
+
+// 任务列表
+export const getJobPage = (params: PageParam) => {
+ return request.get({ url: '/infra/job/page', params })
+}
+
+// 任务详情
+export const getJob = (id: number) => {
+ return request.get({ url: '/infra/job/get?id=' + id })
+}
+
+// 新增任务
+export const createJob = (data: JobVO) => {
+ return request.post({ url: '/infra/job/create', data })
+}
+
+// 修改定时任务调度
+export const updateJob = (data: JobVO) => {
+ return request.put({ url: '/infra/job/update', data })
+}
+
+// 删除定时任务调度
+export const deleteJob = (id: number) => {
+ return request.delete({ url: '/infra/job/delete?id=' + id })
+}
+
+// 导出定时任务调度
+export const exportJob = (params) => {
+ return request.download({ url: '/infra/job/export-excel', params })
+}
+
+// 任务状态修改
+export const updateJobStatus = (id: number, status: number) => {
+ const params = {
+ id,
+ status
+ }
+ return request.put({ url: '/infra/job/update-status', params })
+}
+
+// 定时任务立即执行一次
+export const runJob = (id: number) => {
+ return request.put({ url: '/infra/job/trigger?id=' + id })
+}
+
+// 获得定时任务的下 n 次执行时间
+export const getJobNextTimes = (id: number) => {
+ return request.get({ url: '/infra/job/get_next_times?id=' + id })
+}
diff --git a/src/api/infra/jobLog/index.ts b/src/api/infra/jobLog/index.ts
new file mode 100644
index 0000000..ed54761
--- /dev/null
+++ b/src/api/infra/jobLog/index.ts
@@ -0,0 +1,34 @@
+import request from '@/config/axios'
+
+export interface JobLogVO {
+ id: number
+ jobId: number
+ handlerName: string
+ handlerParam: string
+ cronExpression: string
+ executeIndex: string
+ beginTime: Date
+ endTime: Date
+ duration: string
+ status: number
+ createTime: string
+ result: string
+}
+
+// 任务日志列表
+export const getJobLogPage = (params: PageParam) => {
+ return request.get({ url: '/infra/job-log/page', params })
+}
+
+// 任务日志详情
+export const getJobLog = (id: number) => {
+ return request.get({ url: '/infra/job-log/get?id=' + id })
+}
+
+// 导出定时任务日志
+export const exportJobLog = (params) => {
+ return request.download({
+ url: '/infra/job-log/export-excel',
+ params
+ })
+}
diff --git a/src/api/infra/redis/index.ts b/src/api/infra/redis/index.ts
new file mode 100644
index 0000000..f27be77
--- /dev/null
+++ b/src/api/infra/redis/index.ts
@@ -0,0 +1,8 @@
+import request from '@/config/axios'
+
+/**
+ * 获取redis 监控信息
+ */
+export const getCache = () => {
+ return request.get({ url: '/infra/redis/get-monitor-info' })
+}
diff --git a/src/api/infra/redis/types.ts b/src/api/infra/redis/types.ts
new file mode 100644
index 0000000..548bfe9
--- /dev/null
+++ b/src/api/infra/redis/types.ts
@@ -0,0 +1,176 @@
+export interface RedisMonitorInfoVO {
+ info: RedisInfoVO
+ dbSize: number
+ commandStats: RedisCommandStatsVO[]
+}
+
+export interface RedisInfoVO {
+ io_threaded_reads_processed: string
+ tracking_clients: string
+ uptime_in_seconds: string
+ cluster_connections: string
+ current_cow_size: string
+ maxmemory_human: string
+ aof_last_cow_size: string
+ master_replid2: string
+ mem_replication_backlog: string
+ aof_rewrite_scheduled: string
+ total_net_input_bytes: string
+ rss_overhead_ratio: string
+ hz: string
+ current_cow_size_age: string
+ redis_build_id: string
+ errorstat_BUSYGROUP: string
+ aof_last_bgrewrite_status: string
+ multiplexing_api: string
+ client_recent_max_output_buffer: string
+ allocator_resident: string
+ mem_fragmentation_bytes: string
+ aof_current_size: string
+ repl_backlog_first_byte_offset: string
+ tracking_total_prefixes: string
+ redis_mode: string
+ redis_git_dirty: string
+ aof_delayed_fsync: string
+ allocator_rss_bytes: string
+ repl_backlog_histlen: string
+ io_threads_active: string
+ rss_overhead_bytes: string
+ total_system_memory: string
+ loading: string
+ evicted_keys: string
+ maxclients: string
+ cluster_enabled: string
+ redis_version: string
+ repl_backlog_active: string
+ mem_aof_buffer: string
+ allocator_frag_bytes: string
+ io_threaded_writes_processed: string
+ instantaneous_ops_per_sec: string
+ used_memory_human: string
+ total_error_replies: string
+ role: string
+ maxmemory: string
+ used_memory_lua: string
+ rdb_current_bgsave_time_sec: string
+ used_memory_startup: string
+ used_cpu_sys_main_thread: string
+ lazyfree_pending_objects: string
+ aof_pending_bio_fsync: string
+ used_memory_dataset_perc: string
+ allocator_frag_ratio: string
+ arch_bits: string
+ used_cpu_user_main_thread: string
+ mem_clients_normal: string
+ expired_time_cap_reached_count: string
+ unexpected_error_replies: string
+ mem_fragmentation_ratio: string
+ aof_last_rewrite_time_sec: string
+ master_replid: string
+ aof_rewrite_in_progress: string
+ lru_clock: string
+ maxmemory_policy: string
+ run_id: string
+ latest_fork_usec: string
+ tracking_total_items: string
+ total_commands_processed: string
+ expired_keys: string
+ errorstat_ERR: string
+ used_memory: string
+ module_fork_in_progress: string
+ errorstat_WRONGPASS: string
+ aof_buffer_length: string
+ dump_payload_sanitizations: string
+ mem_clients_slaves: string
+ keyspace_misses: string
+ server_time_usec: string
+ executable: string
+ lazyfreed_objects: string
+ db0: string
+ used_memory_peak_human: string
+ keyspace_hits: string
+ rdb_last_cow_size: string
+ aof_pending_rewrite: string
+ used_memory_overhead: string
+ active_defrag_hits: string
+ tcp_port: string
+ uptime_in_days: string
+ used_memory_peak_perc: string
+ current_save_keys_processed: string
+ blocked_clients: string
+ total_reads_processed: string
+ expire_cycle_cpu_milliseconds: string
+ sync_partial_err: string
+ used_memory_scripts_human: string
+ aof_current_rewrite_time_sec: string
+ aof_enabled: string
+ process_supervised: string
+ master_repl_offset: string
+ used_memory_dataset: string
+ used_cpu_user: string
+ rdb_last_bgsave_status: string
+ tracking_total_keys: string
+ atomicvar_api: string
+ allocator_rss_ratio: string
+ client_recent_max_input_buffer: string
+ clients_in_timeout_table: string
+ aof_last_write_status: string
+ mem_allocator: string
+ used_memory_scripts: string
+ used_memory_peak: string
+ process_id: string
+ master_failover_state: string
+ errorstat_NOAUTH: string
+ used_cpu_sys: string
+ repl_backlog_size: string
+ connected_slaves: string
+ current_save_keys_total: string
+ gcc_version: string
+ total_system_memory_human: string
+ sync_full: string
+ connected_clients: string
+ module_fork_last_cow_size: string
+ total_writes_processed: string
+ allocator_active: string
+ total_net_output_bytes: string
+ pubsub_channels: string
+ current_fork_perc: string
+ active_defrag_key_hits: string
+ rdb_changes_since_last_save: string
+ instantaneous_input_kbps: string
+ used_memory_rss_human: string
+ configured_hz: string
+ expired_stale_perc: string
+ active_defrag_misses: string
+ used_cpu_sys_children: string
+ number_of_cached_scripts: string
+ sync_partial_ok: string
+ used_memory_lua_human: string
+ rdb_last_save_time: string
+ pubsub_patterns: string
+ slave_expires_tracked_keys: string
+ redis_git_sha1: string
+ used_memory_rss: string
+ rdb_last_bgsave_time_sec: string
+ os: string
+ mem_not_counted_for_evict: string
+ active_defrag_running: string
+ rejected_connections: string
+ aof_rewrite_buffer_length: string
+ total_forks: string
+ active_defrag_key_misses: string
+ allocator_allocated: string
+ aof_base_size: string
+ instantaneous_output_kbps: string
+ second_repl_offset: string
+ rdb_bgsave_in_progress: string
+ used_cpu_user_children: string
+ total_connections_received: string
+ migrate_cached_sockets: string
+}
+
+export interface RedisCommandStatsVO {
+ command: string
+ calls: number
+ usec: number
+}
diff --git a/src/api/login/index.ts b/src/api/login/index.ts
new file mode 100644
index 0000000..ef86563
--- /dev/null
+++ b/src/api/login/index.ts
@@ -0,0 +1,81 @@
+import request from '@/config/axios'
+import { getRefreshToken } from '@/utils/auth'
+import type { UserLoginVO } from './types'
+
+export interface SmsCodeVO {
+ mobile: string
+ scene: number
+}
+
+export interface SmsLoginVO {
+ mobile: string
+ code: string
+}
+
+// 登录
+export const login = (data: UserLoginVO) => {
+ return request.post({ url: '/system/auth/login', data })
+}
+
+// 刷新访问令牌
+export const refreshToken = () => {
+ return request.post({ url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken() })
+}
+
+// 使用租户名,获得租户编号
+export const getTenantIdByName = (name: string) => {
+ return request.get({ url: '/system/tenant/get-id-by-name?name=' + name })
+}
+
+// 使用租户域名,获得租户信息
+export const getTenantByWebsite = (website: string) => {
+ return request.get({ url: '/system/tenant/get-by-website?website=' + website })
+}
+
+// 登出
+export const loginOut = () => {
+ return request.post({ url: '/system/auth/logout' })
+}
+
+// 获取用户权限信息
+export const getInfo = () => {
+ return request.get({ url: '/system/auth/get-permission-info' })
+}
+
+//获取登录验证码
+export const sendSmsCode = (data: SmsCodeVO) => {
+ return request.post({ url: '/system/auth/send-sms-code', data })
+}
+
+// 短信验证码登录
+export const smsLogin = (data: SmsLoginVO) => {
+ return request.post({ url: '/system/auth/sms-login', data })
+}
+
+// 社交快捷登录,使用 code 授权码
+export function socialLogin(type: string, code: string, state: string) {
+ return request.post({
+ url: '/system/auth/social-login',
+ data: {
+ type,
+ code,
+ state
+ }
+ })
+}
+
+// 社交授权的跳转
+export const socialAuthRedirect = (type: number, redirectUri: string) => {
+ return request.get({
+ url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
+ })
+}
+// 获取验证图片以及 token
+export const getCode = (data) => {
+ return request.postOriginal({ url: 'system/captcha/get', data })
+}
+
+// 滑动或者点选验证
+export const reqCheck = (data) => {
+ return request.postOriginal({ url: 'system/captcha/check', data })
+}
diff --git a/src/api/login/oauth2/index.ts b/src/api/login/oauth2/index.ts
new file mode 100644
index 0000000..aef1820
--- /dev/null
+++ b/src/api/login/oauth2/index.ts
@@ -0,0 +1,41 @@
+import request from '@/config/axios'
+
+// 获得授权信息
+export const getAuthorize = (clientId: string) => {
+ return request.get({ url: '/system/oauth2/authorize?clientId=' + clientId })
+}
+
+// 发起授权
+export const authorize = (
+ responseType: string,
+ clientId: string,
+ redirectUri: string,
+ state: string,
+ autoApprove: boolean,
+ checkedScopes: string[],
+ uncheckedScopes: string[]
+) => {
+ // 构建 scopes
+ const scopes = {}
+ for (const scope of checkedScopes) {
+ scopes[scope] = true
+ }
+ for (const scope of uncheckedScopes) {
+ scopes[scope] = false
+ }
+ // 发起请求
+ return request.post({
+ url: '/system/oauth2/authorize',
+ headers: {
+ 'Content-type': 'application/x-www-form-urlencoded'
+ },
+ params: {
+ response_type: responseType,
+ client_id: clientId,
+ redirect_uri: redirectUri,
+ state: state,
+ auto_approve: autoApprove,
+ scope: JSON.stringify(scopes)
+ }
+ })
+}
diff --git a/src/api/login/types.ts b/src/api/login/types.ts
new file mode 100644
index 0000000..fff8122
--- /dev/null
+++ b/src/api/login/types.ts
@@ -0,0 +1,31 @@
+export type UserLoginVO = {
+ username: string
+ password: string
+ captchaVerification: string
+ socialType?: string
+ socialCode?: string
+ socialState?: string
+}
+
+export type TokenType = {
+ id: number // 编号
+ accessToken: string // 访问令牌
+ refreshToken: string // 刷新令牌
+ userId: number // 用户编号
+ userType: number //用户类型
+ clientId: string //客户端编号
+ expiresTime: number //过期时间
+}
+
+export type UserVO = {
+ id: number
+ username: string
+ nickname: string
+ deptId: number
+ email: string
+ mobile: string
+ sex: number
+ avatar: string
+ loginIp: string
+ loginDate: string
+}
diff --git a/src/api/mall/market/banner/index.ts b/src/api/mall/market/banner/index.ts
new file mode 100644
index 0000000..ee65024
--- /dev/null
+++ b/src/api/mall/market/banner/index.ts
@@ -0,0 +1,37 @@
+import request from '@/config/axios'
+
+export interface BannerVO {
+ id: number
+ title: string
+ picUrl: string
+ status: number
+ url: string
+ position: number
+ sort: number
+ memo: string
+}
+
+// 查询Banner管理列表
+export const getBannerPage = async (params) => {
+ return await request.get({ url: `/promotion/banner/page`, params })
+}
+
+// 查询Banner管理详情
+export const getBanner = async (id: number) => {
+ return await request.get({ url: `/promotion/banner/get?id=` + id })
+}
+
+// 新增Banner管理
+export const createBanner = async (data: BannerVO) => {
+ return await request.post({ url: `/promotion/banner/create`, data })
+}
+
+// 修改Banner管理
+export const updateBanner = async (data: BannerVO) => {
+ return await request.put({ url: `/promotion/banner/update`, data })
+}
+
+// 删除Banner管理
+export const deleteBanner = async (id: number) => {
+ return await request.delete({ url: `/promotion/banner/delete?id=` + id })
+}
diff --git a/src/api/mall/product/brand.ts b/src/api/mall/product/brand.ts
new file mode 100644
index 0000000..94d5370
--- /dev/null
+++ b/src/api/mall/product/brand.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+/**
+ * 商品品牌
+ */
+export interface BrandVO {
+ /**
+ * 品牌编号
+ */
+ id?: number
+ /**
+ * 品牌名称
+ */
+ name: string
+ /**
+ * 品牌图片
+ */
+ picUrl: string
+ /**
+ * 品牌排序
+ */
+ sort?: number
+ /**
+ * 品牌描述
+ */
+ description?: string
+ /**
+ * 开启状态
+ */
+ status: number
+}
+
+// 创建商品品牌
+export const createBrand = (data: BrandVO) => {
+ return request.post({ url: '/product/brand/create', data })
+}
+
+// 更新商品品牌
+export const updateBrand = (data: BrandVO) => {
+ return request.put({ url: '/product/brand/update', data })
+}
+
+// 删除商品品牌
+export const deleteBrand = (id: number) => {
+ return request.delete({ url: `/product/brand/delete?id=${id}` })
+}
+
+// 获得商品品牌
+export const getBrand = (id: number) => {
+ return request.get({ url: `/product/brand/get?id=${id}` })
+}
+
+// 获得商品品牌列表
+export const getBrandParam = (params: PageParam) => {
+ return request.get({ url: '/product/brand/page', params })
+}
+
+// 获得商品品牌精简信息列表
+export const getSimpleBrandList = () => {
+ return request.get({ url: '/product/brand/list-all-simple' })
+}
diff --git a/src/api/mall/product/category.ts b/src/api/mall/product/category.ts
new file mode 100644
index 0000000..7e80b76
--- /dev/null
+++ b/src/api/mall/product/category.ts
@@ -0,0 +1,56 @@
+import request from '@/config/axios'
+
+/**
+ * 产品分类
+ */
+export interface CategoryVO {
+ /**
+ * 分类编号
+ */
+ id?: number
+ /**
+ * 父分类编号
+ */
+ parentId?: number
+ /**
+ * 分类名称
+ */
+ name: string
+ /**
+ * 移动端分类图
+ */
+ picUrl: string
+ /**
+ * 分类排序
+ */
+ sort: number
+ /**
+ * 开启状态
+ */
+ status: number
+}
+
+// 创建商品分类
+export const createCategory = (data: CategoryVO) => {
+ return request.post({ url: '/product/category/create', data })
+}
+
+// 更新商品分类
+export const updateCategory = (data: CategoryVO) => {
+ return request.put({ url: '/product/category/update', data })
+}
+
+// 删除商品分类
+export const deleteCategory = (id: number) => {
+ return request.delete({ url: `/product/category/delete?id=${id}` })
+}
+
+// 获得商品分类
+export const getCategory = (id: number) => {
+ return request.get({ url: `/product/category/get?id=${id}` })
+}
+
+// 获得商品分类列表
+export const getCategoryList = (params: any) => {
+ return request.get({ url: '/product/category/list', params })
+}
diff --git a/src/api/mall/product/comment.ts b/src/api/mall/product/comment.ts
new file mode 100644
index 0000000..defdbb9
--- /dev/null
+++ b/src/api/mall/product/comment.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+export interface CommentVO {
+ id: number
+ userId: number
+ userNickname: string
+ userAvatar: string
+ anonymous: boolean
+ orderId: number
+ orderItemId: number
+ spuId: number
+ spuName: string
+ skuId: number
+ visible: boolean
+ scores: number
+ descriptionScores: number
+ benefitScores: number
+ content: string
+ picUrls: string
+ replyStatus: boolean
+ replyUserId: number
+ replyContent: string
+ replyTime: Date
+}
+
+// 查询商品评论列表
+export const getCommentPage = async (params) => {
+ return await request.get({ url: `/product/comment/page`, params })
+}
+
+// 查询商品评论详情
+export const getComment = async (id: number) => {
+ return await request.get({ url: `/product/comment/get?id=` + id })
+}
+
+// 添加自评
+export const createComment = async (data: CommentVO) => {
+ return await request.post({ url: `/product/comment/create`, data })
+}
+
+// 显示 / 隐藏评论
+export const updateCommentVisible = async (data: any) => {
+ return await request.put({ url: `/product/comment/update-visible`, data })
+}
+
+// 商家回复
+export const replyComment = async (data: any) => {
+ return await request.put({ url: `/product/comment/reply`, data })
+}
diff --git a/src/api/mall/product/favorite.ts b/src/api/mall/product/favorite.ts
new file mode 100644
index 0000000..3834eed
--- /dev/null
+++ b/src/api/mall/product/favorite.ts
@@ -0,0 +1,12 @@
+import request from '@/config/axios'
+
+export interface Favorite {
+ id?: number
+ userId?: string // 用户编号
+ spuId?: number | null // 商品 SPU 编号
+}
+
+// 获得 ProductFavorite 列表
+export const getFavoritePage = (params: PageParam) => {
+ return request.get({ url: '/product/favorite/page', params })
+}
diff --git a/src/api/mall/product/history.ts b/src/api/mall/product/history.ts
new file mode 100644
index 0000000..0aa45bd
--- /dev/null
+++ b/src/api/mall/product/history.ts
@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+/**
+ * 获得商品浏览记录分页
+ *
+ * @param params 请求参数
+ */
+export const getBrowseHistoryPage = (params: any) => {
+ return request.get({ url: '/product/browse-history/page', params })
+}
diff --git a/src/api/mall/product/property.ts b/src/api/mall/product/property.ts
new file mode 100644
index 0000000..a191d82
--- /dev/null
+++ b/src/api/mall/product/property.ts
@@ -0,0 +1,89 @@
+import request from '@/config/axios'
+
+/**
+ * 商品属性
+ */
+export interface PropertyVO {
+ id?: number
+ /** 名称 */
+ name: string
+ /** 备注 */
+ remark?: string
+}
+
+/**
+ * 属性值
+ */
+export interface PropertyValueVO {
+ id?: number
+ /** 属性项的编号 */
+ propertyId?: number
+ /** 名称 */
+ name: string
+ /** 备注 */
+ remark?: string
+}
+
+// ------------------------ 属性项 -------------------
+
+// 创建属性项
+export const createProperty = (data: PropertyVO) => {
+ return request.post({ url: '/product/property/create', data })
+}
+
+// 更新属性项
+export const updateProperty = (data: PropertyVO) => {
+ return request.put({ url: '/product/property/update', data })
+}
+
+// 删除属性项
+export const deleteProperty = (id: number) => {
+ return request.delete({ url: `/product/property/delete?id=${id}` })
+}
+
+// 获得属性项
+export const getProperty = (id: number): Promise => {
+ return request.get({ url: `/product/property/get?id=${id}` })
+}
+
+// 获得属性项分页
+export const getPropertyPage = (params: PageParam) => {
+ return request.get({ url: '/product/property/page', params })
+}
+
+// 获得属性项精简列表
+export const getPropertySimpleList = (): Promise => {
+ return request.get({ url: '/product/property/simple-list' })
+}
+
+// ------------------------ 属性值 -------------------
+
+// 获得属性值分页
+export const getPropertyValuePage = (params: PageParam & any) => {
+ return request.get({ url: '/product/property/value/page', params })
+}
+
+// 获得属性值
+export const getPropertyValue = (id: number): Promise => {
+ return request.get({ url: `/product/property/value/get?id=${id}` })
+}
+
+// 创建属性值
+export const createPropertyValue = (data: PropertyValueVO) => {
+ return request.post({ url: '/product/property/value/create', data })
+}
+
+// 更新属性值
+export const updatePropertyValue = (data: PropertyValueVO) => {
+ return request.put({ url: '/product/property/value/update', data })
+}
+
+// 删除属性值
+export const deletePropertyValue = (id: number) => {
+ return request.delete({ url: `/product/property/value/delete?id=${id}` })
+}
+
+// 获得属性值精简列表
+export const getPropertyValueSimpleList = (propertyId: number): Promise => {
+ return request.get({ url: '/product/property/value/simple-list', params: { propertyId } })
+}
diff --git a/src/api/mall/product/spu.ts b/src/api/mall/product/spu.ts
new file mode 100644
index 0000000..d44c0f6
--- /dev/null
+++ b/src/api/mall/product/spu.ts
@@ -0,0 +1,111 @@
+import request from '@/config/axios'
+
+export interface Property {
+ propertyId?: number // 属性编号
+ propertyName?: string // 属性名称
+ valueId?: number // 属性值编号
+ valueName?: string // 属性值名称
+}
+
+export interface Sku {
+ id?: number // 商品 SKU 编号
+ name?: string // 商品 SKU 名称
+ spuId?: number // SPU 编号
+ properties?: Property[] // 属性数组
+ price?: number | string // 商品价格
+ marketPrice?: number | string // 市场价
+ costPrice?: number | string // 成本价
+ barCode?: string // 商品条码
+ picUrl?: string // 图片地址
+ stock?: number // 库存
+ weight?: number // 商品重量,单位:kg 千克
+ volume?: number // 商品体积,单位:m^3 平米
+ firstBrokeragePrice?: number | string // 一级分销的佣金
+ secondBrokeragePrice?: number | string // 二级分销的佣金
+ salesCount?: number // 商品销量
+}
+
+export interface GiveCouponTemplate {
+ id?: number
+ name?: string // 优惠券名称
+}
+
+export interface Spu {
+ id?: number
+ name?: string // 商品名称
+ categoryId?: number // 商品分类
+ keyword?: string // 关键字
+ unit?: number | undefined // 单位
+ picUrl?: string // 商品封面图
+ sliderPicUrls?: string[] // 商品轮播图
+ introduction?: string // 商品简介
+ deliveryTypes?: number[] // 配送方式
+ deliveryTemplateId?: number | undefined // 运费模版
+ brandId?: number // 商品品牌编号
+ specType?: boolean // 商品规格
+ subCommissionType?: boolean // 分销类型
+ skus?: Sku[] // sku数组
+ description?: string // 商品详情
+ sort?: number // 商品排序
+ giveIntegral?: number // 赠送积分
+ virtualSalesCount?: number // 虚拟销量
+ price?: number // 商品价格
+ combinationPrice?: number // 商品拼团价格
+ seckillPrice?: number // 商品秒杀价格
+ salesCount?: number // 商品销量
+ marketPrice?: number // 市场价
+ costPrice?: number // 成本价
+ stock?: number // 商品库存
+ createTime?: Date // 商品创建时间
+ status?: number // 商品状态
+}
+
+// 获得 Spu 列表
+export const getSpuPage = (params: PageParam) => {
+ return request.get({ url: '/product/spu/page', params })
+}
+
+// 获得 Spu 列表 tabsCount
+export const getTabsCount = () => {
+ return request.get({ url: '/product/spu/get-count' })
+}
+
+// 创建商品 Spu
+export const createSpu = (data: Spu) => {
+ return request.post({ url: '/product/spu/create', data })
+}
+
+// 更新商品 Spu
+export const updateSpu = (data: Spu) => {
+ return request.put({ url: '/product/spu/update', data })
+}
+
+// 更新商品 Spu status
+export const updateStatus = (data: { id: number; status: number }) => {
+ return request.put({ url: '/product/spu/update-status', data })
+}
+
+// 获得商品 Spu
+export const getSpu = (id: number) => {
+ return request.get({ url: `/product/spu/get-detail?id=${id}` })
+}
+
+// 获得商品 Spu 详情列表
+export const getSpuDetailList = (ids: number[]) => {
+ return request.get({ url: `/product/spu/list?spuIds=${ids}` })
+}
+
+// 删除商品 Spu
+export const deleteSpu = (id: number) => {
+ return request.delete({ url: `/product/spu/delete?id=${id}` })
+}
+
+// 导出商品 Spu Excel
+export const exportSpu = async (params) => {
+ return await request.download({ url: '/product/spu/export', params })
+}
+
+// 获得商品 SPU 精简列表
+export const getSpuSimpleList = async () => {
+ return request.get({ url: '/product/spu/list-all-simple' })
+}
diff --git a/src/api/mall/promotion/article/index.ts b/src/api/mall/promotion/article/index.ts
new file mode 100644
index 0000000..9184c7a
--- /dev/null
+++ b/src/api/mall/promotion/article/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+export interface ArticleVO {
+ id: number
+ categoryId: number
+ title: string
+ author: string
+ picUrl: string
+ introduction: string
+ browseCount: string
+ sort: number
+ status: number
+ spuId: number
+ recommendHot: boolean
+ recommendBanner: boolean
+ content: string
+}
+
+// 查询文章管理列表
+export const getArticlePage = async (params: any) => {
+ return await request.get({ url: `/promotion/article/page`, params })
+}
+
+// 查询文章管理详情
+export const getArticle = async (id: number) => {
+ return await request.get({ url: `/promotion/article/get?id=` + id })
+}
+
+// 新增文章管理
+export const createArticle = async (data: ArticleVO) => {
+ return await request.post({ url: `/promotion/article/create`, data })
+}
+
+// 修改文章管理
+export const updateArticle = async (data: ArticleVO) => {
+ return await request.put({ url: `/promotion/article/update`, data })
+}
+
+// 删除文章管理
+export const deleteArticle = async (id: number) => {
+ return await request.delete({ url: `/promotion/article/delete?id=` + id })
+}
diff --git a/src/api/mall/promotion/articleCategory/index.ts b/src/api/mall/promotion/articleCategory/index.ts
new file mode 100644
index 0000000..47f5e93
--- /dev/null
+++ b/src/api/mall/promotion/articleCategory/index.ts
@@ -0,0 +1,39 @@
+import request from '@/config/axios'
+
+export interface ArticleCategoryVO {
+ id: number
+ name: string
+ picUrl: string
+ status: number
+ sort: number
+}
+
+// 查询文章分类列表
+export const getArticleCategoryPage = async (params) => {
+ return await request.get({ url: `/promotion/article-category/page`, params })
+}
+
+// 查询文章分类精简信息列表
+export const getSimpleArticleCategoryList = async () => {
+ return await request.get({ url: `/promotion/article-category/list-all-simple` })
+}
+
+// 查询文章分类详情
+export const getArticleCategory = async (id: number) => {
+ return await request.get({ url: `/promotion/article-category/get?id=` + id })
+}
+
+// 新增文章分类
+export const createArticleCategory = async (data: ArticleCategoryVO) => {
+ return await request.post({ url: `/promotion/article-category/create`, data })
+}
+
+// 修改文章分类
+export const updateArticleCategory = async (data: ArticleCategoryVO) => {
+ return await request.put({ url: `/promotion/article-category/update`, data })
+}
+
+// 删除文章分类
+export const deleteArticleCategory = async (id: number) => {
+ return await request.delete({ url: `/promotion/article-category/delete?id=` + id })
+}
diff --git a/src/api/mall/promotion/bargain/bargainActivity.ts b/src/api/mall/promotion/bargain/bargainActivity.ts
new file mode 100644
index 0000000..9ad219a
--- /dev/null
+++ b/src/api/mall/promotion/bargain/bargainActivity.ts
@@ -0,0 +1,68 @@
+import request from '@/config/axios'
+import { Sku, Spu } from '@/api/mall/product/spu'
+
+export interface BargainActivityVO {
+ id?: number
+ name?: string
+ startTime?: Date
+ endTime?: Date
+ status?: number
+ helpMaxCount?: number // 达到该人数,才能砍到低价
+ bargainCount?: number // 最大帮砍次数
+ totalLimitCount?: number // 最大购买次数
+ spuId: number
+ skuId: number
+ bargainFirstPrice: number // 砍价起始价格,单位分
+ bargainMinPrice: number // 砍价底价
+ stock: number // 活动库存
+ randomMinPrice?: number // 用户每次砍价的最小金额,单位:分
+ randomMaxPrice?: number // 用户每次砍价的最大金额,单位:分
+}
+
+// 砍价活动所需属性。选择的商品和属性的时候使用方便使用活动的通用封装
+export interface BargainProductVO {
+ spuId: number
+ skuId: number
+ bargainFirstPrice: number // 砍价起始价格,单位分
+ bargainMinPrice: number // 砍价底价
+ stock: number // 活动库存
+}
+
+// 扩展 Sku 配置
+export type SkuExtension = Sku & {
+ productConfig: BargainProductVO
+}
+
+export interface SpuExtension extends Spu {
+ skus: SkuExtension[] // 重写类型
+}
+
+// 查询砍价活动列表
+export const getBargainActivityPage = async (params: any) => {
+ return await request.get({ url: '/promotion/bargain-activity/page', params })
+}
+
+// 查询砍价活动详情
+export const getBargainActivity = async (id: number) => {
+ return await request.get({ url: '/promotion/bargain-activity/get?id=' + id })
+}
+
+// 新增砍价活动
+export const createBargainActivity = async (data: BargainActivityVO) => {
+ return await request.post({ url: '/promotion/bargain-activity/create', data })
+}
+
+// 修改砍价活动
+export const updateBargainActivity = async (data: BargainActivityVO) => {
+ return await request.put({ url: '/promotion/bargain-activity/update', data })
+}
+
+// 关闭砍价活动
+export const closeBargainActivity = async (id: number) => {
+ return await request.put({ url: '/promotion/bargain-activity/close?id=' + id })
+}
+
+// 删除砍价活动
+export const deleteBargainActivity = async (id: number) => {
+ return await request.delete({ url: '/promotion/bargain-activity/delete?id=' + id })
+}
diff --git a/src/api/mall/promotion/bargain/bargainHelp.ts b/src/api/mall/promotion/bargain/bargainHelp.ts
new file mode 100644
index 0000000..4308ae6
--- /dev/null
+++ b/src/api/mall/promotion/bargain/bargainHelp.ts
@@ -0,0 +1,14 @@
+import request from '@/config/axios'
+
+export interface BargainHelpVO {
+ id: number
+ record: number
+ userId: number
+ reducePrice: number
+ endTime: Date
+}
+
+// 查询砍价记录列表
+export const getBargainHelpPage = async (params) => {
+ return await request.get({ url: `/promotion/bargain-help/page`, params })
+}
diff --git a/src/api/mall/promotion/bargain/bargainRecord.ts b/src/api/mall/promotion/bargain/bargainRecord.ts
new file mode 100644
index 0000000..f90b784
--- /dev/null
+++ b/src/api/mall/promotion/bargain/bargainRecord.ts
@@ -0,0 +1,19 @@
+import request from '@/config/axios'
+
+export interface BargainRecordVO {
+ id: number
+ activityId: number
+ userId: number
+ spuId: number
+ skuId: number
+ bargainFirstPrice: number
+ bargainPrice: number
+ status: number
+ orderId: number
+ endTime: Date
+}
+
+// 查询砍价记录列表
+export const getBargainRecordPage = async (params) => {
+ return await request.get({ url: `/promotion/bargain-record/page`, params })
+}
diff --git a/src/api/mall/promotion/combination/combinationActivity.ts b/src/api/mall/promotion/combination/combinationActivity.ts
new file mode 100644
index 0000000..062db5c
--- /dev/null
+++ b/src/api/mall/promotion/combination/combinationActivity.ts
@@ -0,0 +1,66 @@
+import request from '@/config/axios'
+import { Sku, Spu } from '@/api/mall/product/spu'
+
+export interface CombinationActivityVO {
+ id?: number
+ name?: string
+ spuId?: number
+ totalLimitCount?: number
+ singleLimitCount?: number
+ startTime?: Date
+ endTime?: Date
+ userSize?: number
+ totalCount?: number
+ successCount?: number
+ orderUserCount?: number
+ virtualGroup?: number
+ status?: number
+ limitDuration?: number
+ products: CombinationProductVO[]
+}
+
+// 拼团活动所需属性
+export interface CombinationProductVO {
+ spuId: number
+ skuId: number
+ combinationPrice: number // 拼团价格
+}
+
+// 扩展 Sku 配置
+export type SkuExtension = Sku & {
+ productConfig: CombinationProductVO
+}
+
+export interface SpuExtension extends Spu {
+ skus: SkuExtension[] // 重写类型
+}
+
+// 查询拼团活动列表
+export const getCombinationActivityPage = async (params) => {
+ return await request.get({ url: '/promotion/combination-activity/page', params })
+}
+
+// 查询拼团活动详情
+export const getCombinationActivity = async (id: number) => {
+ return await request.get({ url: '/promotion/combination-activity/get?id=' + id })
+}
+
+// 新增拼团活动
+export const createCombinationActivity = async (data: CombinationActivityVO) => {
+ return await request.post({ url: '/promotion/combination-activity/create', data })
+}
+
+// 修改拼团活动
+export const updateCombinationActivity = async (data: CombinationActivityVO) => {
+ return await request.put({ url: '/promotion/combination-activity/update', data })
+}
+
+// 关闭拼团活动
+export const closeCombinationActivity = async (id: number) => {
+ return await request.put({ url: '/promotion/combination-activity/close?id=' + id })
+}
+
+// 删除拼团活动
+export const deleteCombinationActivity = async (id: number) => {
+ return await request.delete({ url: '/promotion/combination-activity/delete?id=' + id })
+}
diff --git a/src/api/mall/promotion/combination/combinationRecord.ts b/src/api/mall/promotion/combination/combinationRecord.ts
new file mode 100644
index 0000000..b2b7d75
--- /dev/null
+++ b/src/api/mall/promotion/combination/combinationRecord.ts
@@ -0,0 +1,28 @@
+import request from '@/config/axios'
+
+export interface CombinationRecordVO {
+ id: number // 拼团记录编号
+ activityId: number // 拼团活动编号
+ nickname: string // 用户昵称
+ avatar: string // 用户头像
+ headId: number // 团长编号
+ expireTime: string // 过期时间
+ userSize: number // 可参团人数
+ userCount: number // 已参团人数
+ status: number // 拼团状态
+ spuName: string // 商品名字
+ picUrl: string // 商品图片
+ virtualGroup: boolean // 是否虚拟成团
+ startTime: string // 开始时间 (订单付款后开始的时间)
+ endTime: string // 结束时间(成团时间/失败时间)
+}
+
+// 查询拼团记录列表
+export const getCombinationRecordPage = async (params: any) => {
+ return await request.get({ url: '/promotion/combination-record/page', params })
+}
+
+// 获得拼团记录的概要信息
+export const getCombinationRecordSummary = async () => {
+ return await request.get({ url: '/promotion/combination-record/get-summary' })
+}
diff --git a/src/api/mall/promotion/coupon/coupon.ts b/src/api/mall/promotion/coupon/coupon.ts
new file mode 100644
index 0000000..2ebff5d
--- /dev/null
+++ b/src/api/mall/promotion/coupon/coupon.ts
@@ -0,0 +1,26 @@
+import request from '@/config/axios'
+
+// TODO @dhb52:vo 缺少
+
+// 删除优惠劵
+export const deleteCoupon = async (id: number) => {
+ return request.delete({
+ url: `/promotion/coupon/delete?id=${id}`
+ })
+}
+
+// 获得优惠劵分页
+export const getCouponPage = async (params: PageParam) => {
+ return request.get({
+ url: '/promotion/coupon/page',
+ params: params
+ })
+}
+
+// 发送优惠券
+export const sendCoupon = async (data: any) => {
+ return request.post({
+ url: '/promotion/coupon/send',
+ data: data
+ })
+}
diff --git a/src/api/mall/promotion/coupon/couponTemplate.ts b/src/api/mall/promotion/coupon/couponTemplate.ts
new file mode 100644
index 0000000..50ae226
--- /dev/null
+++ b/src/api/mall/promotion/coupon/couponTemplate.ts
@@ -0,0 +1,90 @@
+import request from '@/config/axios'
+
+export interface CouponTemplateVO {
+ id: number
+ name: string
+ status: number
+ totalCount: number
+ takeLimitCount: number
+ takeType: number
+ usePrice: number
+ productScope: number
+ productScopeValues: number[]
+ validityType: number
+ validStartTime: Date
+ validEndTime: Date
+ fixedStartTerm: number
+ fixedEndTerm: number
+ discountType: number
+ discountPercent: number
+ discountPrice: number
+ discountLimitPrice: number
+ takeCount: number
+ useCount: number
+}
+
+// 创建优惠劵模板
+export function createCouponTemplate(data: CouponTemplateVO) {
+ return request.post({
+ url: '/promotion/coupon-template/create',
+ data: data
+ })
+}
+
+// 更新优惠劵模板
+export function updateCouponTemplate(data: CouponTemplateVO) {
+ return request.put({
+ url: '/promotion/coupon-template/update',
+ data: data
+ })
+}
+
+// 更新优惠劵模板的状态
+export function updateCouponTemplateStatus(id: number, status: [0, 1]) {
+ const data = {
+ id,
+ status
+ }
+ return request.put({
+ url: '/promotion/coupon-template/update-status',
+ data: data
+ })
+}
+
+// 删除优惠劵模板
+export function deleteCouponTemplate(id: number) {
+ return request.delete({
+ url: '/promotion/coupon-template/delete?id=' + id
+ })
+}
+
+// 获得优惠劵模板
+export function getCouponTemplate(id: number) {
+ return request.get({
+ url: '/promotion/coupon-template/get?id=' + id
+ })
+}
+
+// 获得优惠劵模板分页
+export function getCouponTemplatePage(params: PageParam) {
+ return request.get({
+ url: '/promotion/coupon-template/page',
+ params: params
+ })
+}
+
+// 获得优惠劵模板分页
+export function getCouponTemplateList(ids: number[]) {
+ return request.get({
+ url: `/promotion/coupon-template/list?ids=${ids}`
+ })
+}
+
+// 导出优惠劵模板 Excel
+export function exportCouponTemplateExcel(params: PageParam) {
+ return request.get({
+ url: '/promotion/coupon-template/export-excel',
+ params: params,
+ responseType: 'blob'
+ })
+}
diff --git a/src/api/mall/promotion/discount/discountActivity.ts b/src/api/mall/promotion/discount/discountActivity.ts
new file mode 100644
index 0000000..e755c1b
--- /dev/null
+++ b/src/api/mall/promotion/discount/discountActivity.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+import { Sku, Spu } from '@/api/mall/product/spu'
+
+export interface DiscountActivityVO {
+ id?: number
+ spuId?: number
+ name?: string
+ status?: number
+ remark?: string
+ startTime?: Date
+ endTime?: Date
+ products?: DiscountProductVO[]
+}
+// 限时折扣相关 属性
+export interface DiscountProductVO {
+ spuId: number
+ skuId: number
+ discountType: number
+ discountPercent: number
+ discountPrice: number
+}
+
+// 扩展 Sku 配置
+export type SkuExtension = Sku & {
+ productConfig: DiscountProductVO
+}
+
+export interface SpuExtension extends Spu {
+ skus: SkuExtension[] // 重写类型
+}
+
+// 查询限时折扣活动列表
+export const getDiscountActivityPage = async (params) => {
+ return await request.get({ url: '/promotion/discount-activity/page', params })
+}
+
+// 查询限时折扣活动详情
+export const getDiscountActivity = async (id: number) => {
+ return await request.get({ url: '/promotion/discount-activity/get?id=' + id })
+}
+
+// 新增限时折扣活动
+export const createDiscountActivity = async (data: DiscountActivityVO) => {
+ return await request.post({ url: '/promotion/discount-activity/create', data })
+}
+
+// 修改限时折扣活动
+export const updateDiscountActivity = async (data: DiscountActivityVO) => {
+ return await request.put({ url: '/promotion/discount-activity/update', data })
+}
+
+// 关闭限时折扣活动
+export const closeDiscountActivity = async (id: number) => {
+ return await request.put({ url: '/promotion/discount-activity/close?id=' + id })
+}
+
+// 删除限时折扣活动
+export const deleteDiscountActivity = async (id: number) => {
+ return await request.delete({ url: '/promotion/discount-activity/delete?id=' + id })
+}
diff --git a/src/api/mall/promotion/diy/page.ts b/src/api/mall/promotion/diy/page.ts
new file mode 100644
index 0000000..a834b24
--- /dev/null
+++ b/src/api/mall/promotion/diy/page.ts
@@ -0,0 +1,45 @@
+import request from '@/config/axios'
+
+export interface DiyPageVO {
+ id?: number
+ templateId?: number
+ name: string
+ remark: string
+ previewPicUrls: string[]
+ property: string
+}
+
+// 查询装修页面列表
+export const getDiyPagePage = async (params: any) => {
+ return await request.get({ url: `/promotion/diy-page/page`, params })
+}
+
+// 查询装修页面详情
+export const getDiyPage = async (id: number) => {
+ return await request.get({ url: `/promotion/diy-page/get?id=` + id })
+}
+
+// 新增装修页面
+export const createDiyPage = async (data: DiyPageVO) => {
+ return await request.post({ url: `/promotion/diy-page/create`, data })
+}
+
+// 修改装修页面
+export const updateDiyPage = async (data: DiyPageVO) => {
+ return await request.put({ url: `/promotion/diy-page/update`, data })
+}
+
+// 删除装修页面
+export const deleteDiyPage = async (id: number) => {
+ return await request.delete({ url: `/promotion/diy-page/delete?id=` + id })
+}
+
+// 获得装修页面属性
+export const getDiyPageProperty = async (id: number) => {
+ return await request.get({ url: `/promotion/diy-page/get-property?id=` + id })
+}
+
+// 更新装修页面属性
+export const updateDiyPageProperty = async (data: DiyPageVO) => {
+ return await request.put({ url: `/promotion/diy-page/update-property`, data })
+}
diff --git a/src/api/mall/promotion/diy/template.ts b/src/api/mall/promotion/diy/template.ts
new file mode 100644
index 0000000..87134c9
--- /dev/null
+++ b/src/api/mall/promotion/diy/template.ts
@@ -0,0 +1,58 @@
+import request from '@/config/axios'
+import { DiyPageVO } from '@/api/mall/promotion/diy/page'
+
+export interface DiyTemplateVO {
+ id?: number
+ name: string
+ used: boolean
+ usedTime?: Date
+ remark: string
+ previewPicUrls: string[]
+ property: string
+}
+
+export interface DiyTemplatePropertyVO extends DiyTemplateVO {
+ pages: DiyPageVO[]
+}
+
+// 查询装修模板列表
+export const getDiyTemplatePage = async (params: any) => {
+ return await request.get({ url: `/promotion/diy-template/page`, params })
+}
+
+// 查询装修模板详情
+export const getDiyTemplate = async (id: number) => {
+ return await request.get({ url: `/promotion/diy-template/get?id=` + id })
+}
+
+// 新增装修模板
+export const createDiyTemplate = async (data: DiyTemplateVO) => {
+ return await request.post({ url: `/promotion/diy-template/create`, data })
+}
+
+// 修改装修模板
+export const updateDiyTemplate = async (data: DiyTemplateVO) => {
+ return await request.put({ url: `/promotion/diy-template/update`, data })
+}
+
+// 删除装修模板
+export const deleteDiyTemplate = async (id: number) => {
+ return await request.delete({ url: `/promotion/diy-template/delete?id=` + id })
+}
+
+// 使用装修模板
+export const useDiyTemplate = async (id: number) => {
+ return await request.put({ url: `/promotion/diy-template/use?id=` + id })
+}
+
+// 获得装修模板属性
+export const getDiyTemplateProperty = async (id: number) => {
+ return await request.get({
+ url: `/promotion/diy-template/get-property?id=` + id
+ })
+}
+
+// 更新装修模板属性
+export const updateDiyTemplateProperty = async (data: DiyTemplateVO) => {
+ return await request.put({ url: `/promotion/diy-template/update-property`, data })
+}
diff --git a/src/api/mall/promotion/kefu/conversation/index.ts b/src/api/mall/promotion/kefu/conversation/index.ts
new file mode 100644
index 0000000..1b8d538
--- /dev/null
+++ b/src/api/mall/promotion/kefu/conversation/index.ts
@@ -0,0 +1,35 @@
+import request from '@/config/axios'
+
+export interface KeFuConversationRespVO {
+ id: number // 编号
+ userId: number // 会话所属用户
+ userAvatar: string // 会话所属用户头像
+ userNickname: string // 会话所属用户昵称
+ lastMessageTime: Date // 最后聊天时间
+ lastMessageContent: string // 最后聊天内容
+ lastMessageContentType: number // 最后发送的消息类型
+ adminPinned: boolean // 管理端置顶
+ userDeleted: boolean // 用户是否可见
+ adminDeleted: boolean // 管理员是否可见
+ adminUnreadMessageCount: number // 管理员未读消息数
+ createTime?: string // 创建时间
+}
+
+// 客服会话 API
+export const KeFuConversationApi = {
+ // 获得客服会话列表
+ getConversationList: async () => {
+ return await request.get({ url: '/promotion/kefu-conversation/list' })
+ },
+ // 客服会话置顶
+ updateConversationPinned: async (data: any) => {
+ return await request.put({
+ url: '/promotion/kefu-conversation/update-conversation-pinned',
+ data
+ })
+ },
+ // 删除客服会话
+ deleteConversation: async (id: number) => {
+ return await request.delete({ url: `/promotion/kefu-conversation/delete?id=${id}`})
+ }
+}
diff --git a/src/api/mall/promotion/kefu/message/index.ts b/src/api/mall/promotion/kefu/message/index.ts
new file mode 100644
index 0000000..a12167f
--- /dev/null
+++ b/src/api/mall/promotion/kefu/message/index.ts
@@ -0,0 +1,36 @@
+import request from '@/config/axios'
+
+export interface KeFuMessageRespVO {
+ id: number // 编号
+ conversationId: number // 会话编号
+ senderId: number // 发送人编号
+ senderAvatar: string // 发送人头像
+ senderType: number // 发送人类型
+ receiverId: number // 接收人编号
+ receiverType: number // 接收人类型
+ contentType: number // 消息类型
+ content: string // 消息
+ readStatus: boolean // 是否已读
+ createTime: Date // 创建时间
+}
+
+// 客服会话 API
+export const KeFuMessageApi = {
+ // 发送客服消息
+ sendKeFuMessage: async (data: any) => {
+ return await request.post({
+ url: '/promotion/kefu-message/send',
+ data
+ })
+ },
+ // 更新客服消息已读状态
+ updateKeFuMessageReadStatus: async (conversationId: number) => {
+ return await request.put({
+ url: '/promotion/kefu-message/update-read-status?conversationId=' + conversationId
+ })
+ },
+ // 获得消息分页数据
+ getKeFuMessagePage: async (params: any) => {
+ return await request.get({ url: '/promotion/kefu-message/page', params })
+ }
+}
diff --git a/src/api/mall/promotion/reward/rewardActivity.ts b/src/api/mall/promotion/reward/rewardActivity.ts
new file mode 100644
index 0000000..691db47
--- /dev/null
+++ b/src/api/mall/promotion/reward/rewardActivity.ts
@@ -0,0 +1,48 @@
+import request from '@/config/axios'
+
+export interface DiscountActivityVO {
+ id?: number
+ name?: string
+ startTime?: Date
+ endTime?: Date
+ remark?: string
+ conditionType?: number
+ productScope?: number
+ productSpuIds?: number[]
+ rules?: DiscountProductVO[]
+}
+
+// 优惠规则
+export interface DiscountProductVO {
+ limit: number
+ discountPrice: number
+ freeDelivery: boolean
+ point: number
+ couponIds: number[]
+ couponCounts: number[]
+}
+
+// 新增满减送活动
+export const createRewardActivity = async (data: DiscountActivityVO) => {
+ return await request.post({ url: '/promotion/reward-activity/create', data })
+}
+
+// 更新满减送活动
+export const updateRewardActivity = async (data: DiscountActivityVO) => {
+ return await request.put({ url: '/promotion/reward-activity/update', data })
+}
+
+// 查询满减送活动列表
+export const getRewardActivityPage = async (params) => {
+ return await request.get({ url: '/promotion/reward-activity/page', params })
+}
+
+// 查询满减送活动详情
+export const getReward = async (id: number) => {
+ return await request.get({ url: '/promotion/reward-activity/get?id=' + id })
+}
+
+// 删除限时折扣活动
+export const deleteRewardActivity = async (id: number) => {
+ return await request.delete({ url: '/promotion/reward-activity/delete?id=' + id })
+}
diff --git a/src/api/mall/promotion/seckill/seckillActivity.ts b/src/api/mall/promotion/seckill/seckillActivity.ts
new file mode 100644
index 0000000..4bb0e8b
--- /dev/null
+++ b/src/api/mall/promotion/seckill/seckillActivity.ts
@@ -0,0 +1,69 @@
+import request from '@/config/axios'
+import { Sku, Spu } from '@/api/mall/product/spu'
+
+export interface SeckillActivityVO {
+ id?: number
+ spuId?: number
+ name?: string
+ status?: number
+ remark?: string
+ startTime?: Date
+ endTime?: Date
+ sort?: number
+ configIds?: string
+ orderCount?: number
+ userCount?: number
+ totalPrice?: number
+ totalLimitCount?: number
+ singleLimitCount?: number
+ stock?: number
+ totalStock?: number
+ products?: SeckillProductVO[]
+}
+
+// 秒杀活动所需属性
+export interface SeckillProductVO {
+ skuId: number
+ spuId: number
+ seckillPrice: number
+ stock: number
+}
+
+// 扩展 Sku 配置
+export type SkuExtension = Sku & {
+ productConfig: SeckillProductVO
+}
+
+export interface SpuExtension extends Spu {
+ skus: SkuExtension[] // 重写类型
+}
+
+// 查询秒杀活动列表
+export const getSeckillActivityPage = async (params) => {
+ return await request.get({ url: '/promotion/seckill-activity/page', params })
+}
+
+// 查询秒杀活动详情
+export const getSeckillActivity = async (id: number) => {
+ return await request.get({ url: '/promotion/seckill-activity/get?id=' + id })
+}
+
+// 新增秒杀活动
+export const createSeckillActivity = async (data: SeckillActivityVO) => {
+ return await request.post({ url: '/promotion/seckill-activity/create', data })
+}
+
+// 修改秒杀活动
+export const updateSeckillActivity = async (data: SeckillActivityVO) => {
+ return await request.put({ url: '/promotion/seckill-activity/update', data })
+}
+
+// 关闭秒杀活动
+export const closeSeckillActivity = async (id: number) => {
+ return await request.put({ url: '/promotion/seckill-activity/close?id=' + id })
+}
+
+// 删除秒杀活动
+export const deleteSeckillActivity = async (id: number) => {
+ return await request.delete({ url: '/promotion/seckill-activity/delete?id=' + id })
+}
diff --git a/src/api/mall/promotion/seckill/seckillConfig.ts b/src/api/mall/promotion/seckill/seckillConfig.ts
new file mode 100644
index 0000000..37d9b54
--- /dev/null
+++ b/src/api/mall/promotion/seckill/seckillConfig.ts
@@ -0,0 +1,53 @@
+import request from '@/config/axios'
+
+// 秒杀时段 VO
+export interface SeckillConfigVO {
+ id: number // 编号
+ name: string // 秒杀时段名称
+ startTime: string // 开始时间点
+ endTime: string // 结束时间点
+ sliderPicUrls: string[] // 秒杀轮播图
+ status: number // 活动状态
+}
+
+// 秒杀时段 API
+export const SeckillConfigApi = {
+ // 查询秒杀时段分页
+ getSeckillConfigPage: async (params: any) => {
+ return await request.get({ url: `/promotion/seckill-config/page`, params })
+ },
+
+ // 查询秒杀时段列表
+ getSimpleSeckillConfigList: async () => {
+ return await request.get({ url: `/promotion/seckill-config/list` })
+ },
+
+ // 查询秒杀时段详情
+ getSeckillConfig: async (id: number) => {
+ return await request.get({ url: `/promotion/seckill-config/get?id=` + id })
+ },
+
+ // 新增秒杀时段
+ createSeckillConfig: async (data: SeckillConfigVO) => {
+ return await request.post({ url: `/promotion/seckill-config/create`, data })
+ },
+
+ // 修改秒杀时段
+ updateSeckillConfig: async (data: SeckillConfigVO) => {
+ return await request.put({ url: `/promotion/seckill-config/update`, data })
+ },
+
+ // 删除秒杀时段
+ deleteSeckillConfig: async (id: number) => {
+ return await request.delete({ url: `/promotion/seckill-config/delete?id=` + id })
+ },
+
+ // 修改时段配置状态
+ updateSeckillConfigStatus: async (id: number, status: number) => {
+ const data = {
+ id,
+ status
+ }
+ return request.put({ url: '/promotion/seckill-config/update-status', data: data })
+ }
+}
diff --git a/src/api/mall/statistics/common.ts b/src/api/mall/statistics/common.ts
new file mode 100644
index 0000000..3d96439
--- /dev/null
+++ b/src/api/mall/statistics/common.ts
@@ -0,0 +1,5 @@
+/** 数据对照 Response VO */
+export interface DataComparisonRespVO {
+ value: T
+ reference: T
+}
diff --git a/src/api/mall/statistics/member.ts b/src/api/mall/statistics/member.ts
new file mode 100644
index 0000000..d9accf9
--- /dev/null
+++ b/src/api/mall/statistics/member.ts
@@ -0,0 +1,123 @@
+import request from '@/config/axios'
+import dayjs from 'dayjs'
+import { DataComparisonRespVO } from '@/api/mall/statistics/common'
+import { formatDate } from '@/utils/formatTime'
+
+/** 会员分析 Request VO */
+export interface MemberAnalyseReqVO {
+ times: dayjs.ConfigType[]
+}
+
+/** 会员分析 Response VO */
+export interface MemberAnalyseRespVO {
+ visitUserCount: number
+ orderUserCount: number
+ payUserCount: number
+ atv: number
+ comparison: DataComparisonRespVO
+}
+
+/** 会员分析对照数据 Response VO */
+export interface MemberAnalyseComparisonRespVO {
+ registerUserCount: number
+ visitUserCount: number
+ rechargeUserCount: number
+}
+
+/** 会员地区统计 Response VO */
+export interface MemberAreaStatisticsRespVO {
+ areaId: number
+ areaName: string
+ userCount: number
+ orderCreateUserCount: number
+ orderPayUserCount: number
+ orderPayPrice: number
+}
+
+/** 会员性别统计 Response VO */
+export interface MemberSexStatisticsRespVO {
+ sex: number
+ userCount: number
+}
+
+/** 会员统计 Response VO */
+export interface MemberSummaryRespVO {
+ userCount: number
+ rechargeUserCount: number
+ rechargePrice: number
+ expensePrice: number
+}
+
+/** 会员终端统计 Response VO */
+export interface MemberTerminalStatisticsRespVO {
+ terminal: number
+ userCount: number
+}
+
+/** 会员数量统计 Response VO */
+export interface MemberCountRespVO {
+ /** 用户访问量 */
+ visitUserCount: string
+ /** 注册用户数量 */
+ registerUserCount: number
+}
+
+/** 会员注册数量 Response VO */
+export interface MemberRegisterCountRespVO {
+ date: string
+ count: number
+}
+
+// 查询会员统计
+export const getMemberSummary = () => {
+ return request.get({
+ url: '/statistics/member/summary'
+ })
+}
+
+// 查询会员分析数据
+export const getMemberAnalyse = (params: MemberAnalyseReqVO) => {
+ return request.get({
+ url: '/statistics/member/analyse',
+ params: { times: [formatDate(params.times[0]), formatDate(params.times[1])] }
+ })
+}
+
+// 按照省份,查询会员统计列表
+export const getMemberAreaStatisticsList = () => {
+ return request.get({
+ url: '/statistics/member/area-statistics-list'
+ })
+}
+
+// 按照性别,查询会员统计列表
+export const getMemberSexStatisticsList = () => {
+ return request.get({
+ url: '/statistics/member/sex-statistics-list'
+ })
+}
+
+// 按照终端,查询会员统计列表
+export const getMemberTerminalStatisticsList = () => {
+ return request.get({
+ url: '/statistics/member/terminal-statistics-list'
+ })
+}
+
+// 获得用户数量量对照
+export const getUserCountComparison = () => {
+ return request.get>({
+ url: '/statistics/member/user-count-comparison'
+ })
+}
+
+// 获得会员注册数量列表
+export const getMemberRegisterCountList = (
+ beginTime: dayjs.ConfigType,
+ endTime: dayjs.ConfigType
+) => {
+ return request.get({
+ url: '/statistics/member/register-count-list',
+ params: { times: [formatDate(beginTime), formatDate(endTime)] }
+ })
+}
diff --git a/src/api/mall/statistics/pay.ts b/src/api/mall/statistics/pay.ts
new file mode 100644
index 0000000..f5d14c9
--- /dev/null
+++ b/src/api/mall/statistics/pay.ts
@@ -0,0 +1,12 @@
+import request from '@/config/axios'
+
+/** 支付统计 */
+export interface PaySummaryRespVO {
+ /** 充值金额,单位分 */
+ rechargePrice: number
+}
+
+/** 获取钱包充值金额 */
+export const getWalletRechargePrice = async () => {
+ return await request.get({ url: `/statistics/pay/summary` })
+}
diff --git a/src/api/mall/statistics/product.ts b/src/api/mall/statistics/product.ts
new file mode 100644
index 0000000..798a2fa
--- /dev/null
+++ b/src/api/mall/statistics/product.ts
@@ -0,0 +1,52 @@
+import request from '@/config/axios'
+import { DataComparisonRespVO } from '@/api/mall/statistics/common'
+
+export interface ProductStatisticsVO {
+ id: number
+ day: string
+ spuId: number
+ spuName: string
+ spuPicUrl: string
+ browseCount: number
+ browseUserCount: number
+ favoriteCount: number
+ cartCount: number
+ orderCount: number
+ orderPayCount: number
+ orderPayPrice: number
+ afterSaleCount: number
+ afterSaleRefundPrice: number
+ browseConvertPercent: number
+}
+
+// 商品统计 API
+export const ProductStatisticsApi = {
+ // 获得商品统计分析
+ getProductStatisticsAnalyse: (params: any) => {
+ return request.get>({
+ url: '/statistics/product/analyse',
+ params
+ })
+ },
+ // 获得商品状况明细
+ getProductStatisticsList: (params: any) => {
+ return request.get({
+ url: '/statistics/product/list',
+ params
+ })
+ },
+ // 导出获得商品状况明细 Excel
+ exportProductStatisticsExcel: (params: any) => {
+ return request.download({
+ url: '/statistics/product/export-excel',
+ params
+ })
+ },
+ // 获得商品排行榜分页
+ getProductStatisticsRankPage: async (params: any) => {
+ return await request.get({
+ url: `/statistics/product/rank-page`,
+ params
+ })
+ }
+}
diff --git a/src/api/mall/statistics/trade.ts b/src/api/mall/statistics/trade.ts
new file mode 100644
index 0000000..e59952a
--- /dev/null
+++ b/src/api/mall/statistics/trade.ts
@@ -0,0 +1,119 @@
+import request from '@/config/axios'
+import dayjs from 'dayjs'
+import { formatDate } from '@/utils/formatTime'
+import { DataComparisonRespVO } from '@/api/mall/statistics/common'
+
+/** 交易统计 Response VO */
+export interface TradeSummaryRespVO {
+ yesterdayOrderCount: number
+ monthOrderCount: number
+ yesterdayPayPrice: number
+ monthPayPrice: number
+}
+
+/** 交易状况 Request VO */
+export interface TradeTrendReqVO {
+ times: [dayjs.ConfigType, dayjs.ConfigType]
+}
+
+/** 交易状况统计 Response VO */
+export interface TradeTrendSummaryRespVO {
+ time: string
+ turnoverPrice: number
+ orderPayPrice: number
+ rechargePrice: number
+ expensePrice: number
+ walletPayPrice: number
+ brokerageSettlementPrice: number
+ afterSaleRefundPrice: number
+}
+
+/** 交易订单数量 Response VO */
+export interface TradeOrderCountRespVO {
+ /** 待发货 */
+ undelivered?: number
+ /** 待核销 */
+ pickUp?: number
+ /** 退款中 */
+ afterSaleApply?: number
+ /** 提现待审核 */
+ auditingWithdraw?: number
+}
+
+/** 交易订单统计 Response VO */
+export interface TradeOrderSummaryRespVO {
+ /** 支付订单商品数 */
+ orderPayCount?: number
+ /** 总支付金额,单位:分 */
+ orderPayPrice?: number
+}
+
+/** 订单量趋势统计 Response VO */
+export interface TradeOrderTrendRespVO {
+ /** 日期 */
+ date: string
+ /** 订单数量 */
+ orderPayCount: number
+ /** 订单支付金额 */
+ orderPayPrice: number
+}
+
+// 查询交易统计
+export const getTradeStatisticsSummary = () => {
+ return request.get>({
+ url: '/statistics/trade/summary'
+ })
+}
+
+// 获得交易状况统计
+export const getTradeStatisticsAnalyse = (params: TradeTrendReqVO) => {
+ return request.get>({
+ url: '/statistics/trade/analyse',
+ params: formatDateParam(params)
+ })
+}
+
+// 获得交易状况明细
+export const getTradeStatisticsList = (params: TradeTrendReqVO) => {
+ return request.get({
+ url: '/statistics/trade/list',
+ params: formatDateParam(params)
+ })
+}
+
+// 导出交易状况明细
+export const exportTradeStatisticsExcel = (params: TradeTrendReqVO) => {
+ return request.download({
+ url: '/statistics/trade/export-excel',
+ params: formatDateParam(params)
+ })
+}
+
+// 获得交易订单数量
+export const getOrderCount = async () => {
+ return await request.get({ url: `/statistics/trade/order-count` })
+}
+
+// 获得交易订单数量对照
+export const getOrderComparison = async () => {
+ return await request.get>({
+ url: `/statistics/trade/order-comparison`
+ })
+}
+
+// 获得订单量趋势统计
+export const getOrderCountTrendComparison = (
+ type: number,
+ beginTime: dayjs.ConfigType,
+ endTime: dayjs.ConfigType
+) => {
+ return request.get[]>({
+ url: '/statistics/trade/order-count-trend',
+ params: { type, beginTime: formatDate(beginTime), endTime: formatDate(endTime) }
+ })
+}
+
+/** 时间参数需要格式化, 确保接口能识别 */
+const formatDateParam = (params: TradeTrendReqVO) => {
+ return { times: [formatDate(params.times[0]), formatDate(params.times[1])] } as TradeTrendReqVO
+}
diff --git a/src/api/mall/trade/afterSale/index.ts b/src/api/mall/trade/afterSale/index.ts
new file mode 100644
index 0000000..a109ee6
--- /dev/null
+++ b/src/api/mall/trade/afterSale/index.ts
@@ -0,0 +1,75 @@
+import request from '@/config/axios'
+
+export interface TradeAfterSaleVO {
+ id?: number | null // 售后编号,主键自增
+ no?: string // 售后单号
+ status?: number | null // 退款状态
+ way?: number | null // 售后方式
+ type?: number | null // 售后类型
+ userId?: number | null // 用户编号
+ applyReason?: string // 申请原因
+ applyDescription?: string // 补充描述
+ applyPicUrls?: string[] // 补充凭证图片
+ orderId?: number | null // 交易订单编号
+ orderNo?: string // 订单流水号
+ orderItemId?: number | null // 交易订单项编号
+ spuId?: number | null // 商品 SPU 编号
+ spuName?: string // 商品 SPU 名称
+ skuId?: number | null // 商品 SKU 编号
+ properties?: ProductPropertiesVO[] // 属性数组
+ picUrl?: string // 商品图片
+ count?: number | null // 退货商品数量
+ auditTime?: Date // 审批时间
+ auditUserId?: number | null // 审批人
+ auditReason?: string // 审批备注
+ refundPrice?: number | null // 退款金额,单位:分。
+ payRefundId?: number | null // 支付退款编号
+ refundTime?: Date // 退款时间
+ logisticsId?: number | null // 退货物流公司编号
+ logisticsNo?: string // 退货物流单号
+ deliveryTime?: Date // 退货时间
+ receiveTime?: Date // 收货时间
+ receiveReason?: string // 收货备注
+}
+
+export interface ProductPropertiesVO {
+ propertyId?: number | null // 属性的编号
+ propertyName?: string // 属性的名称
+ valueId?: number | null //属性值的编号
+ valueName?: string // 属性值的名称
+}
+
+// 获得交易售后分页
+export const getAfterSalePage = async (params) => {
+ return await request.get({ url: `/trade/after-sale/page`, params })
+}
+
+// 获得交易售后详情
+export const getAfterSale = async (id: any) => {
+ return await request.get({ url: `/trade/after-sale/get-detail?id=${id}` })
+}
+
+// 同意售后
+export const agree = async (id: any) => {
+ return await request.put({ url: `/trade/after-sale/agree?id=${id}` })
+}
+
+// 拒绝售后
+export const disagree = async (data: any) => {
+ return await request.put({ url: `/trade/after-sale/disagree`, data })
+}
+
+// 确认收货
+export const receive = async (id: any) => {
+ return await request.put({ url: `/trade/after-sale/receive?id=${id}` })
+}
+
+// 拒绝收货
+export const refuse = async (id: any) => {
+ return await request.put({ url: `/trade/after-sale/refuse?id=${id}` })
+}
+
+// 确认退款
+export const refund = async (id: any) => {
+ return await request.put({ url: `/trade/after-sale/refund?id=${id}` })
+}
diff --git a/src/api/mall/trade/brokerage/record/index.ts b/src/api/mall/trade/brokerage/record/index.ts
new file mode 100644
index 0000000..7df9a22
--- /dev/null
+++ b/src/api/mall/trade/brokerage/record/index.ts
@@ -0,0 +1,11 @@
+import request from '@/config/axios'
+
+// 查询佣金记录列表
+export const getBrokerageRecordPage = async (params: any) => {
+ return await request.get({ url: `/trade/brokerage-record/page`, params })
+}
+
+// 查询佣金记录详情
+export const getBrokerageRecord = async (id: number) => {
+ return await request.get({ url: `/trade/brokerage-record/get?id=` + id })
+}
diff --git a/src/api/mall/trade/brokerage/user/index.ts b/src/api/mall/trade/brokerage/user/index.ts
new file mode 100644
index 0000000..1fed3bf
--- /dev/null
+++ b/src/api/mall/trade/brokerage/user/index.ts
@@ -0,0 +1,39 @@
+import request from '@/config/axios'
+
+export interface BrokerageUserVO {
+ id: number
+ bindUserId: number
+ bindUserTime: Date
+ brokerageEnabled: boolean
+ brokerageTime: Date
+ price: number
+ frozenPrice: number
+
+ nickname: string
+ avatar: string
+}
+
+// 查询分销用户列表
+export const getBrokerageUserPage = async (params: any) => {
+ return await request.get({ url: `/trade/brokerage-user/page`, params })
+}
+
+// 查询分销用户详情
+export const getBrokerageUser = async (id: number) => {
+ return await request.get({ url: `/trade/brokerage-user/get?id=` + id })
+}
+
+// 修改推广员
+export const updateBindUser = async (data: any) => {
+ return await request.put({ url: `/trade/brokerage-user/update-bind-user`, data })
+}
+
+// 清除推广员
+export const clearBindUser = async (data: any) => {
+ return await request.put({ url: `/trade/brokerage-user/clear-bind-user`, data })
+}
+
+// 修改推广资格
+export const updateBrokerageEnabled = async (data: any) => {
+ return await request.put({ url: `/trade/brokerage-user/update-brokerage-enable`, data })
+}
diff --git a/src/api/mall/trade/brokerage/withdraw/index.ts b/src/api/mall/trade/brokerage/withdraw/index.ts
new file mode 100644
index 0000000..c93286a
--- /dev/null
+++ b/src/api/mall/trade/brokerage/withdraw/index.ts
@@ -0,0 +1,39 @@
+import request from '@/config/axios'
+
+export interface BrokerageWithdrawVO {
+ id: number
+ userId: number
+ price: number
+ feePrice: number
+ totalPrice: number
+ type: number
+ name: string
+ accountNo: string
+ bankName: string
+ bankAddress: string
+ accountQrCodeUrl: string
+ status: number
+ auditReason: string
+ auditTime: Date
+ remark: string
+}
+
+// 查询佣金提现列表
+export const getBrokerageWithdrawPage = async (params: any) => {
+ return await request.get({ url: `/trade/brokerage-withdraw/page`, params })
+}
+
+// 查询佣金提现详情
+export const getBrokerageWithdraw = async (id: number) => {
+ return await request.get({ url: `/trade/brokerage-withdraw/get?id=` + id })
+}
+
+// 佣金提现 - 通过申请
+export const approveBrokerageWithdraw = async (id: number) => {
+ return await request.put({ url: `/trade/brokerage-withdraw/approve?id=` + id })
+}
+
+// 审核佣金提现 - 驳回申请
+export const rejectBrokerageWithdraw = async (data: BrokerageWithdrawVO) => {
+ return await request.put({ url: `/trade/brokerage-withdraw/reject`, data })
+}
diff --git a/src/api/mall/trade/config/index.ts b/src/api/mall/trade/config/index.ts
new file mode 100644
index 0000000..43fdbdf
--- /dev/null
+++ b/src/api/mall/trade/config/index.ts
@@ -0,0 +1,23 @@
+import request from '@/config/axios'
+
+export interface ConfigVO {
+ brokerageEnabled: boolean
+ brokerageEnabledCondition: number
+ brokerageBindMode: number
+ brokeragePosterUrls: string
+ brokerageFirstPercent: number
+ brokerageSecondPercent: number
+ brokerageWithdrawMinPrice: number
+ brokerageFrozenDays: number
+ brokerageWithdrawTypes: string
+}
+
+// 查询交易中心配置详情
+export const getTradeConfig = async () => {
+ return await request.get({ url: `/trade/config/get` })
+}
+
+// 保存交易中心配置
+export const saveTradeConfig = async (data: ConfigVO) => {
+ return await request.put({ url: `/trade/config/save`, data })
+}
diff --git a/src/api/mall/trade/delivery/express/index.ts b/src/api/mall/trade/delivery/express/index.ts
new file mode 100644
index 0000000..0070bcd
--- /dev/null
+++ b/src/api/mall/trade/delivery/express/index.ts
@@ -0,0 +1,45 @@
+import request from '@/config/axios'
+
+export interface DeliveryExpressVO {
+ id: number
+ code: string
+ name: string
+ logo: string
+ sort: number
+ status: number
+}
+
+// 查询快递公司列表
+export const getDeliveryExpressPage = async (params: PageParam) => {
+ return await request.get({ url: '/trade/delivery/express/page', params })
+}
+
+// 查询快递公司详情
+export const getDeliveryExpress = async (id: number) => {
+ return await request.get({ url: '/trade/delivery/express/get?id=' + id })
+}
+
+// 获得快递公司精简信息列表
+export const getSimpleDeliveryExpressList = () => {
+ return request.get({ url: '/trade/delivery/express/list-all-simple' })
+}
+
+// 新增快递公司
+export const createDeliveryExpress = async (data: DeliveryExpressVO) => {
+ return await request.post({ url: '/trade/delivery/express/create', data })
+}
+
+// 修改快递公司
+export const updateDeliveryExpress = async (data: DeliveryExpressVO) => {
+ return await request.put({ url: '/trade/delivery/express/update', data })
+}
+
+// 删除快递公司
+export const deleteDeliveryExpress = async (id: number) => {
+ return await request.delete({ url: '/trade/delivery/express/delete?id=' + id })
+}
+
+// 导出快递公司 Excel
+export const exportDeliveryExpressApi = async (params) => {
+ return await request.download({ url: '/trade/delivery/express/export-excel', params })
+}
diff --git a/src/api/mall/trade/delivery/expressTemplate/index.ts b/src/api/mall/trade/delivery/expressTemplate/index.ts
new file mode 100644
index 0000000..9ed23bc
--- /dev/null
+++ b/src/api/mall/trade/delivery/expressTemplate/index.ts
@@ -0,0 +1,54 @@
+import request from '@/config/axios'
+
+export interface DeliveryExpressTemplateVO {
+ id: number
+ name: string
+ chargeMode: number
+ sort: number
+ templateCharge: ExpressTemplateChargeVO[]
+ templateFree: ExpressTemplateFreeVO[]
+}
+
+export declare type ExpressTemplateChargeVO = {
+ areaIds: number[]
+ startCount: number
+ startPrice: number
+ extraCount: number
+ extraPrice: number
+}
+
+export declare type ExpressTemplateFreeVO = {
+ areaIds: number[]
+ freeCount: number
+ freePrice: number
+}
+
+// 查询快递运费模板列表
+export const getDeliveryExpressTemplatePage = async (params: PageParam) => {
+ return await request.get({ url: '/trade/delivery/express-template/page', params })
+}
+
+// 查询快递运费模板详情
+export const getDeliveryExpressTemplate = async (id: number) => {
+ return await request.get({ url: '/trade/delivery/express-template/get?id=' + id })
+}
+
+// 查询快递运费模板详情
+export const getSimpleTemplateList = async () => {
+ return await request.get({ url: '/trade/delivery/express-template/list-all-simple' })
+}
+
+// 新增快递运费模板
+export const createDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => {
+ return await request.post({ url: '/trade/delivery/express-template/create', data })
+}
+
+// 修改快递运费模板
+export const updateDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => {
+ return await request.put({ url: '/trade/delivery/express-template/update', data })
+}
+
+// 删除快递运费模板
+export const deleteDeliveryExpressTemplate = async (id: number) => {
+ return await request.delete({ url: '/trade/delivery/express-template/delete?id=' + id })
+}
diff --git a/src/api/mall/trade/delivery/pickUpStore/index.ts b/src/api/mall/trade/delivery/pickUpStore/index.ts
new file mode 100644
index 0000000..c317502
--- /dev/null
+++ b/src/api/mall/trade/delivery/pickUpStore/index.ts
@@ -0,0 +1,46 @@
+import request from '@/config/axios'
+
+export interface DeliveryPickUpStoreVO {
+ id: number
+ name: string
+ introduction: string
+ phone: string
+ areaId: number
+ detailAddress: string
+ logo: string
+ openingTime: string
+ closingTime: string
+ latitude: number
+ longitude: number
+ status: number
+}
+
+// 查询自提门店列表
+export const getDeliveryPickUpStorePage = async (params) => {
+ return await request.get({ url: '/trade/delivery/pick-up-store/page', params })
+}
+
+// 查询自提门店详情
+export const getDeliveryPickUpStore = async (id: number) => {
+ return await request.get({ url: '/trade/delivery/pick-up-store/get?id=' + id })
+}
+
+// 查询自提门店精简列表
+export const getListAllSimple = async (): Promise => {
+ return await request.get({ url: '/trade/delivery/pick-up-store/list-all-simple' })
+}
+
+// 新增自提门店
+export const createDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => {
+ return await request.post({ url: '/trade/delivery/pick-up-store/create', data })
+}
+
+// 修改自提门店
+export const updateDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => {
+ return await request.put({ url: '/trade/delivery/pick-up-store/update', data })
+}
+
+// 删除自提门店
+export const deleteDeliveryPickUpStore = async (id: number) => {
+ return await request.delete({ url: '/trade/delivery/pick-up-store/delete?id=' + id })
+}
diff --git a/src/api/mall/trade/order/index.ts b/src/api/mall/trade/order/index.ts
new file mode 100644
index 0000000..37fee8c
--- /dev/null
+++ b/src/api/mall/trade/order/index.ts
@@ -0,0 +1,188 @@
+import request from '@/config/axios'
+
+export interface OrderVO {
+ // ========== 订单基本信息 ==========
+ id?: number | null // 订单编号
+ no?: string // 订单流水号
+ createTime?: Date | null // 下单时间
+ type?: number | null // 订单类型
+ terminal?: number | null // 订单来源
+ userId?: number | null // 用户编号
+ userIp?: string // 用户 IP
+ userRemark?: string // 用户备注
+ status?: number | null // 订单状态
+ productCount?: number | null // 购买的商品数量
+ finishTime?: Date | null // 订单完成时间
+ cancelTime?: Date | null // 订单取消时间
+ cancelType?: number | null // 取消类型
+ remark?: string // 商家备注
+
+ // ========== 价格 + 支付基本信息 ==========
+ payOrderId?: number | null // 支付订单编号
+ payStatus?: boolean // 是否已支付
+ payTime?: Date | null // 付款时间
+ payChannelCode?: string // 支付渠道
+ totalPrice?: number | null // 商品原价(总)
+ discountPrice?: number | null // 订单优惠(总)
+ deliveryPrice?: number | null // 运费金额
+ adjustPrice?: number | null // 订单调价(总)
+ payPrice?: number | null // 应付金额(总)
+ // ========== 收件 + 物流基本信息 ==========
+ deliveryType?: number | null // 发货方式
+ pickUpStoreId?: number // 自提门店编号
+ pickUpVerifyCode?: string // 自提核销码
+ deliveryTemplateId?: number | null // 配送模板编号
+ logisticsId?: number | null // 发货物流公司编号
+ logisticsNo?: string // 发货物流单号
+ deliveryTime?: Date | null // 发货时间
+ receiveTime?: Date | null // 收货时间
+ receiverName?: string // 收件人名称
+ receiverMobile?: string // 收件人手机
+ receiverPostCode?: number | null // 收件人邮编
+ receiverAreaId?: number | null // 收件人地区编号
+ receiverAreaName?: string //收件人地区名字
+ receiverDetailAddress?: string // 收件人详细地址
+
+ // ========== 售后基本信息 ==========
+ afterSaleStatus?: number | null // 售后状态
+ refundPrice?: number | null // 退款金额
+
+ // ========== 营销基本信息 ==========
+ couponId?: number | null // 优惠劵编号
+ couponPrice?: number | null // 优惠劵减免金额
+ pointPrice?: number | null // 积分抵扣的金额
+ vipPrice?: number | null // VIP 减免金额
+
+ items?: OrderItemRespVO[] // 订单项列表
+ // 下单用户信息
+ user?: {
+ id?: number | null
+ nickname?: string
+ avatar?: string
+ }
+ // 推广用户信息
+ brokerageUser?: {
+ id?: number | null
+ nickname?: string
+ avatar?: string
+ }
+ // 订单操作日志
+ logs?: OrderLogRespVO[]
+}
+
+export interface OrderLogRespVO {
+ content?: string
+ createTime?: Date
+ userType?: number
+}
+
+export interface OrderItemRespVO {
+ // ========== 订单项基本信息 ==========
+ id?: number | null // 编号
+ userId?: number | null // 用户编号
+ orderId?: number | null // 订单编号
+ // ========== 商品基本信息 ==========
+ spuId?: number | null // 商品 SPU 编号
+ spuName?: string //商品 SPU 名称
+ skuId?: number | null // 商品 SKU 编号
+ picUrl?: string //商品图片
+ count?: number | null //购买数量
+ // ========== 价格 + 支付基本信息 ==========
+ originalPrice?: number | null //商品原价(总)
+ originalUnitPrice?: number | null //商品原价(单)
+ discountPrice?: number | null //商品优惠(总)
+ payPrice?: number | null //商品实付金额(总)
+ orderPartPrice?: number | null //子订单分摊金额(总)
+ orderDividePrice?: number | null //分摊后子订单实付金额(总)
+ // ========== 营销基本信息 ==========
+ // TODO 芋艿:在捉摸一下
+ // ========== 售后基本信息 ==========
+ afterSaleStatus?: number | null // 售后状态
+ properties?: ProductPropertiesVO[] //属性数组
+}
+
+export interface ProductPropertiesVO {
+ propertyId?: number | null // 属性的编号
+ propertyName?: string // 属性的名称
+ valueId?: number | null //属性值的编号
+ valueName?: string // 属性值的名称
+}
+
+/** 交易订单统计 */
+export interface TradeOrderSummaryRespVO {
+ /** 订单数量 */
+ orderCount?: number
+ /** 订单金额 */
+ orderPayPrice?: string
+ /** 退款单数 */
+ afterSaleCount?: number
+ /** 退款金额 */
+ afterSalePrice?: string
+}
+
+// 查询交易订单列表
+export const getOrderPage = async (params: any) => {
+ return await request.get({ url: `/trade/order/page`, params })
+}
+
+// 查询交易订单统计
+export const getOrderSummary = async (params: any) => {
+ return await request.get({ url: `/trade/order/summary`, params })
+}
+
+// 查询交易订单详情
+export const getOrder = async (id: number | null) => {
+ return await request.get({ url: `/trade/order/get-detail?id=` + id })
+}
+
+// 查询交易订单物流详情
+export const getExpressTrackList = async (id: number | null) => {
+ return await request.get({ url: `/trade/order/get-express-track-list?id=` + id })
+}
+
+export interface DeliveryVO {
+ id?: number // 订单编号
+ logisticsId: number | null // 物流公司编号
+ logisticsNo: string // 物流编号
+}
+
+// 订单发货
+export const deliveryOrder = async (data: DeliveryVO) => {
+ return await request.put({ url: `/trade/order/delivery`, data })
+}
+
+// 订单备注
+export const updateOrderRemark = async (data: any) => {
+ return await request.put({ url: `/trade/order/update-remark`, data })
+}
+
+// 订单调价
+export const updateOrderPrice = async (data: any) => {
+ return await request.put({ url: `/trade/order/update-price`, data })
+}
+
+// 修改订单地址
+export const updateOrderAddress = async (data: any) => {
+ return await request.put({ url: `/trade/order/update-address`, data })
+}
+
+// 订单核销
+export const pickUpOrder = async (id: number) => {
+ return await request.put({ url: `/trade/order/pick-up-by-id?id=${id}` })
+}
+
+// 订单核销
+export const pickUpOrderByVerifyCode = async (pickUpVerifyCode: string) => {
+ return await request.put({
+ url: `/trade/order/pick-up-by-verify-code`,
+ params: { pickUpVerifyCode }
+ })
+}
+
+// 查询核销码对应的订单
+export const getOrderByPickUpVerifyCode = async (pickUpVerifyCode: string) => {
+ return await request.get({
+ url: `/trade/order/get-by-pick-up-verify-code`,
+ params: { pickUpVerifyCode }
+ })
+}
diff --git a/src/api/member/address/index.ts b/src/api/member/address/index.ts
new file mode 100644
index 0000000..a914f97
--- /dev/null
+++ b/src/api/member/address/index.ts
@@ -0,0 +1,15 @@
+import request from '@/config/axios'
+
+export interface AddressVO {
+ id: number
+ name: string
+ mobile: string
+ areaId: number
+ detailAddress: string
+ defaultStatus: boolean
+}
+
+// 查询用户收件地址列表
+export const getAddressList = async (params) => {
+ return await request.get({ url: `/member/address/list`, params })
+}
diff --git a/src/api/member/config/index.ts b/src/api/member/config/index.ts
new file mode 100644
index 0000000..7ddca16
--- /dev/null
+++ b/src/api/member/config/index.ts
@@ -0,0 +1,19 @@
+import request from '@/config/axios'
+
+export interface ConfigVO {
+ id: number
+ pointTradeDeductEnable: number
+ pointTradeDeductUnitPrice: number
+ pointTradeDeductMaxPrice: number
+ pointTradeGivePoint: number
+}
+
+// 查询积分设置详情
+export const getConfig = async () => {
+ return await request.get({ url: `/member/config/get` })
+}
+
+// 新增修改积分设置
+export const saveConfig = async (data: ConfigVO) => {
+ return await request.put({ url: `/member/config/save`, data })
+}
diff --git a/src/api/member/experience-record/index.ts b/src/api/member/experience-record/index.ts
new file mode 100644
index 0000000..6d40a48
--- /dev/null
+++ b/src/api/member/experience-record/index.ts
@@ -0,0 +1,22 @@
+import request from '@/config/axios'
+
+export interface ExperienceRecordVO {
+ id: number
+ userId: number
+ bizId: string
+ bizType: number
+ title: string
+ description: string
+ experience: number
+ totalExperience: number
+}
+
+// 查询会员经验记录列表
+export const getExperienceRecordPage = async (params) => {
+ return await request.get({ url: `/member/experience-record/page`, params })
+}
+
+// 查询会员经验记录详情
+export const getExperienceRecord = async (id: number) => {
+ return await request.get({ url: `/member/experience-record/get?id=` + id })
+}
diff --git a/src/api/member/group/index.ts b/src/api/member/group/index.ts
new file mode 100644
index 0000000..df3054e
--- /dev/null
+++ b/src/api/member/group/index.ts
@@ -0,0 +1,38 @@
+import request from '@/config/axios'
+
+export interface GroupVO {
+ id: number
+ name: string
+ remark: string
+ status: number
+}
+
+// 查询用户分组列表
+export const getGroupPage = async (params: any) => {
+ return await request.get({ url: `/member/group/page`, params })
+}
+
+// 查询用户分组详情
+export const getGroup = async (id: number) => {
+ return await request.get({ url: `/member/group/get?id=` + id })
+}
+
+// 新增用户分组
+export const createGroup = async (data: GroupVO) => {
+ return await request.post({ url: `/member/group/create`, data })
+}
+
+// 查询用户分组 - 精简信息列表
+export const getSimpleGroupList = async () => {
+ return await request.get({ url: `/member/group/list-all-simple` })
+}
+
+// 修改用户分组
+export const updateGroup = async (data: GroupVO) => {
+ return await request.put({ url: `/member/group/update`, data })
+}
+
+// 删除用户分组
+export const deleteGroup = async (id: number) => {
+ return await request.delete({ url: `/member/group/delete?id=` + id })
+}
diff --git a/src/api/member/level/index.ts b/src/api/member/level/index.ts
new file mode 100644
index 0000000..0ded493
--- /dev/null
+++ b/src/api/member/level/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+export interface LevelVO {
+ id: number
+ name: string
+ experience: number
+ value: number
+ discountPercent: number
+ icon: string
+ bgUrl: string
+ status: number
+}
+
+// 查询会员等级列表
+export const getLevelList = async (params) => {
+ return await request.get({ url: `/member/level/list`, params })
+}
+
+// 查询会员等级详情
+export const getLevel = async (id: number) => {
+ return await request.get({ url: `/member/level/get?id=` + id })
+}
+
+// 查询会员等级 - 精简信息列表
+export const getSimpleLevelList = async () => {
+ return await request.get({ url: `/member/level/list-all-simple` })
+}
+
+// 新增会员等级
+export const createLevel = async (data: LevelVO) => {
+ return await request.post({ url: `/member/level/create`, data })
+}
+
+// 修改会员等级
+export const updateLevel = async (data: LevelVO) => {
+ return await request.put({ url: `/member/level/update`, data })
+}
+
+// 删除会员等级
+export const deleteLevel = async (id: number) => {
+ return await request.delete({ url: `/member/level/delete?id=` + id })
+}
diff --git a/src/api/member/point/record/index.ts b/src/api/member/point/record/index.ts
new file mode 100644
index 0000000..f47ae46
--- /dev/null
+++ b/src/api/member/point/record/index.ts
@@ -0,0 +1,18 @@
+import request from '@/config/axios'
+
+export interface RecordVO {
+ id: number
+ bizId: string
+ bizType: string
+ title: string
+ description: string
+ point: number
+ totalPoint: number
+ userId: number
+ createDate: Date
+}
+
+// 查询用户积分记录列表
+export const getRecordPage = async (params) => {
+ return await request.get({ url: `/member/point/record/page`, params })
+}
diff --git a/src/api/member/signin/config/index.ts b/src/api/member/signin/config/index.ts
new file mode 100644
index 0000000..50a7d63
--- /dev/null
+++ b/src/api/member/signin/config/index.ts
@@ -0,0 +1,34 @@
+import request from '@/config/axios'
+
+export interface SignInConfigVO {
+ id?: number
+ day?: number
+ point?: number
+ experience?: number
+ status?: number
+}
+
+// 查询积分签到规则列表
+export const getSignInConfigList = async () => {
+ return await request.get({ url: `/member/sign-in/config/list` })
+}
+
+// 查询积分签到规则详情
+export const getSignInConfig = async (id: number) => {
+ return await request.get({ url: `/member/sign-in/config/get?id=` + id })
+}
+
+// 新增积分签到规则
+export const createSignInConfig = async (data: SignInConfigVO) => {
+ return await request.post({ url: `/member/sign-in/config/create`, data })
+}
+
+// 修改积分签到规则
+export const updateSignInConfig = async (data: SignInConfigVO) => {
+ return await request.put({ url: `/member/sign-in/config/update`, data })
+}
+
+// 删除积分签到规则
+export const deleteSignInConfig = async (id: number) => {
+ return await request.delete({ url: `/member/sign-in/config/delete?id=` + id })
+}
diff --git a/src/api/member/signin/record/index.ts b/src/api/member/signin/record/index.ts
new file mode 100644
index 0000000..7d13702
--- /dev/null
+++ b/src/api/member/signin/record/index.ts
@@ -0,0 +1,13 @@
+import request from '@/config/axios'
+
+export interface SignInRecordVO {
+ id: number
+ userId: number
+ day: number
+ point: number
+}
+
+// 查询用户签到积分列表
+export const getSignInRecordPage = async (params) => {
+ return await request.get({ url: `/member/sign-in/record/page`, params })
+}
diff --git a/src/api/member/tag/index.ts b/src/api/member/tag/index.ts
new file mode 100644
index 0000000..7ff6e9b
--- /dev/null
+++ b/src/api/member/tag/index.ts
@@ -0,0 +1,36 @@
+import request from '@/config/axios'
+
+export interface TagVO {
+ id: number
+ name: string
+}
+
+// 查询会员标签列表
+export const getMemberTagPage = async (params: any) => {
+ return await request.get({ url: `/member/tag/page`, params })
+}
+
+// 查询会员标签详情
+export const getMemberTag = async (id: number) => {
+ return await request.get({ url: `/member/tag/get?id=` + id })
+}
+
+// 查询会员标签 - 精简信息列表
+export const getSimpleTagList = async () => {
+ return await request.get({ url: `/member/tag/list-all-simple` })
+}
+
+// 新增会员标签
+export const createMemberTag = async (data: TagVO) => {
+ return await request.post({ url: `/member/tag/create`, data })
+}
+
+// 修改会员标签
+export const updateMemberTag = async (data: TagVO) => {
+ return await request.put({ url: `/member/tag/update`, data })
+}
+
+// 删除会员标签
+export const deleteMemberTag = async (id: number) => {
+ return await request.delete({ url: `/member/tag/delete?id=` + id })
+}
diff --git a/src/api/member/user/index.ts b/src/api/member/user/index.ts
new file mode 100644
index 0000000..e38206a
--- /dev/null
+++ b/src/api/member/user/index.ts
@@ -0,0 +1,53 @@
+import request from '@/config/axios'
+
+export interface UserVO {
+ id: number
+ avatar: string | undefined
+ birthday: number | undefined
+ createTime: number | undefined
+ loginDate: number | undefined
+ loginIp: string
+ mark: string
+ mobile: string
+ name: string | undefined
+ nickname: string | undefined
+ registerIp: string
+ sex: number
+ status: number
+ areaId: number | undefined
+ areaName: string | undefined
+ levelName: string | null
+ point: number | undefined | null
+ totalPoint: number | undefined | null
+ experience: number | null | undefined
+}
+
+// 查询会员用户列表
+export const getUserPage = async (params) => {
+ return await request.get({ url: `/member/user/page`, params })
+}
+
+// 查询会员用户详情
+export const getUser = async (id: number) => {
+ return await request.get({ url: `/member/user/get?id=` + id })
+}
+
+// 修改会员用户
+export const updateUser = async (data: UserVO) => {
+ return await request.put({ url: `/member/user/update`, data })
+}
+
+// 修改会员用户等级
+export const updateUserLevel = async (data: any) => {
+ return await request.put({ url: `/member/user/update-level`, data })
+}
+
+// 修改会员用户积分
+export const updateUserPoint = async (data: any) => {
+ return await request.put({ url: `/member/user/update-point`, data })
+}
+
+// 修改会员用户余额
+export const updateUserBalance = async (data: any) => {
+ return await request.put({ url: `/member/user/update-balance`, data })
+}
diff --git a/src/api/mp/account/index.ts b/src/api/mp/account/index.ts
new file mode 100644
index 0000000..e973cda
--- /dev/null
+++ b/src/api/mp/account/index.ts
@@ -0,0 +1,46 @@
+import request from '@/config/axios'
+
+export interface AccountVO {
+ id: number
+ name: string
+}
+
+// 创建公众号账号
+export const createAccount = async (data) => {
+ return await request.post({ url: '/mp/account/create', data })
+}
+
+// 更新公众号账号
+export const updateAccount = async (data) => {
+ return request.put({ url: '/mp/account/update', data: data })
+}
+
+// 删除公众号账号
+export const deleteAccount = async (id) => {
+ return request.delete({ url: '/mp/account/delete?id=' + id, method: 'delete' })
+}
+
+// 获得公众号账号
+export const getAccount = async (id) => {
+ return request.get({ url: '/mp/account/get?id=' + id })
+}
+
+// 获得公众号账号分页
+export const getAccountPage = async (query) => {
+ return request.get({ url: '/mp/account/page', params: query })
+}
+
+// 获取公众号账号精简信息列表
+export const getSimpleAccountList = async () => {
+ return request.get({ url: '/mp/account/list-all-simple' })
+}
+
+// 生成公众号二维码
+export const generateAccountQrCode = async (id) => {
+ return request.put({ url: '/mp/account/generate-qr-code?id=' + id })
+}
+
+// 清空公众号 API 配额
+export const clearAccountQuota = async (id) => {
+ return request.put({ url: '/mp/account/clear-quota?id=' + id })
+}
diff --git a/src/api/mp/autoReply/index.ts b/src/api/mp/autoReply/index.ts
new file mode 100644
index 0000000..5045e6d
--- /dev/null
+++ b/src/api/mp/autoReply/index.ts
@@ -0,0 +1,39 @@
+import request from '@/config/axios'
+
+// 创建公众号的自动回复
+export const createAutoReply = (data) => {
+ return request.post({
+ url: '/mp/auto-reply/create',
+ data: data
+ })
+}
+
+// 更新公众号的自动回复
+export const updateAutoReply = (data) => {
+ return request.put({
+ url: '/mp/auto-reply/update',
+ data: data
+ })
+}
+
+// 删除公众号的自动回复
+export const deleteAutoReply = (id) => {
+ return request.delete({
+ url: '/mp/auto-reply/delete?id=' + id
+ })
+}
+
+// 获得公众号的自动回复
+export const getAutoReply = (id) => {
+ return request.get({
+ url: '/mp/auto-reply/get?id=' + id
+ })
+}
+
+// 获得公众号的自动回复分页
+export const getAutoReplyPage = (query) => {
+ return request.get({
+ url: '/mp/auto-reply/page',
+ params: query
+ })
+}
diff --git a/src/api/mp/draft/index.ts b/src/api/mp/draft/index.ts
new file mode 100644
index 0000000..ce6a443
--- /dev/null
+++ b/src/api/mp/draft/index.ts
@@ -0,0 +1,35 @@
+import request from '@/config/axios'
+
+// 获得公众号草稿分页
+export const getDraftPage = (query) => {
+ return request.get({
+ url: '/mp/draft/page',
+ params: query
+ })
+}
+
+// 创建公众号草稿
+export const createDraft = (accountId, articles) => {
+ return request.post({
+ url: '/mp/draft/create?accountId=' + accountId,
+ data: {
+ articles
+ }
+ })
+}
+
+// 更新公众号草稿
+export const updateDraft = (accountId, mediaId, articles) => {
+ return request.put({
+ url: '/mp/draft/update?accountId=' + accountId + '&mediaId=' + mediaId,
+ method: 'put',
+ data: articles
+ })
+}
+
+// 删除公众号草稿
+export const deleteDraft = (accountId, mediaId) => {
+ return request.delete({
+ url: '/mp/draft/delete?accountId=' + accountId + '&mediaId=' + mediaId
+ })
+}
diff --git a/src/api/mp/freePublish/index.ts b/src/api/mp/freePublish/index.ts
new file mode 100644
index 0000000..beef026
--- /dev/null
+++ b/src/api/mp/freePublish/index.ts
@@ -0,0 +1,23 @@
+import request from '@/config/axios'
+
+// 获得公众号素材分页
+export const getFreePublishPage = (query) => {
+ return request.get({
+ url: '/mp/free-publish/page',
+ params: query
+ })
+}
+
+// 删除公众号素材
+export const deleteFreePublish = (accountId, articleId) => {
+ return request.delete({
+ url: '/mp/free-publish/delete?accountId=' + accountId + '&articleId=' + articleId
+ })
+}
+
+// 发布公众号素材
+export const submitFreePublish = (accountId, mediaId) => {
+ return request.post({
+ url: '/mp/free-publish/submit?accountId=' + accountId + '&mediaId=' + mediaId
+ })
+}
diff --git a/src/api/mp/material/index.ts b/src/api/mp/material/index.ts
new file mode 100644
index 0000000..fcc37ab
--- /dev/null
+++ b/src/api/mp/material/index.ts
@@ -0,0 +1,16 @@
+import request from '@/config/axios'
+
+// 获得公众号素材分页
+export const getMaterialPage = (query) => {
+ return request.get({
+ url: '/mp/material/page',
+ params: query
+ })
+}
+
+// 删除公众号永久素材
+export const deletePermanentMaterial = (id) => {
+ return request.delete({
+ url: '/mp/material/delete-permanent?id=' + id
+ })
+}
diff --git a/src/api/mp/menu/index.ts b/src/api/mp/menu/index.ts
new file mode 100644
index 0000000..cc78647
--- /dev/null
+++ b/src/api/mp/menu/index.ts
@@ -0,0 +1,26 @@
+import request from '@/config/axios'
+
+// 获得公众号菜单列表
+export const getMenuList = (accountId) => {
+ return request.get({
+ url: '/mp/menu/list?accountId=' + accountId
+ })
+}
+
+// 保存公众号菜单
+export const saveMenu = (accountId, menus) => {
+ return request.post({
+ url: '/mp/menu/save',
+ data: {
+ accountId,
+ menus
+ }
+ })
+}
+
+// 删除公众号菜单
+export const deleteMenu = (accountId) => {
+ return request.delete({
+ url: '/mp/menu/delete?accountId=' + accountId
+ })
+}
diff --git a/src/api/mp/message/index.ts b/src/api/mp/message/index.ts
new file mode 100644
index 0000000..ad9b95d
--- /dev/null
+++ b/src/api/mp/message/index.ts
@@ -0,0 +1,17 @@
+import request from '@/config/axios'
+
+// 获得公众号消息分页
+export const getMessagePage = (query: PageParam) => {
+ return request.get({
+ url: '/mp/message/page',
+ params: query
+ })
+}
+
+// 给粉丝发送消息
+export const sendMessage = (data) => {
+ return request.post({
+ url: '/mp/message/send',
+ data: data
+ })
+}
diff --git a/src/api/mp/statistics/index.ts b/src/api/mp/statistics/index.ts
new file mode 100644
index 0000000..72cae60
--- /dev/null
+++ b/src/api/mp/statistics/index.ts
@@ -0,0 +1,33 @@
+import request from '@/config/axios'
+
+// 获取消息发送概况数据
+export const getUpstreamMessage = (query) => {
+ return request.get({
+ url: '/mp/statistics/upstream-message',
+ params: query
+ })
+}
+
+// 用户增减数据
+export const getUserSummary = (query) => {
+ return request.get({
+ url: '/mp/statistics/user-summary',
+ params: query
+ })
+}
+
+// 获得用户累计数据
+export const getUserCumulate = (query) => {
+ return request.get({
+ url: '/mp/statistics/user-cumulate',
+ params: query
+ })
+}
+
+// 获得接口分析数据
+export const getInterfaceSummary = (query) => {
+ return request.get({
+ url: '/mp/statistics/interface-summary',
+ params: query
+ })
+}
diff --git a/src/api/mp/tag/index.ts b/src/api/mp/tag/index.ts
new file mode 100644
index 0000000..50183a5
--- /dev/null
+++ b/src/api/mp/tag/index.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+
+export interface TagVO {
+ id?: number
+ name: string
+ accountId: number
+ createTime: Date
+}
+
+// 创建公众号标签
+export const createTag = (data: TagVO) => {
+ return request.post({
+ url: '/mp/tag/create',
+ data: data
+ })
+}
+
+// 更新公众号标签
+export const updateTag = (data: TagVO) => {
+ return request.put({
+ url: '/mp/tag/update',
+ data: data
+ })
+}
+
+// 删除公众号标签
+export const deleteTag = (id: number) => {
+ return request.delete({
+ url: '/mp/tag/delete?id=' + id
+ })
+}
+
+// 获得公众号标签
+export const getTag = (id: number) => {
+ return request.get({
+ url: '/mp/tag/get?id=' + id
+ })
+}
+
+// 获得公众号标签分页
+export const getTagPage = (query: PageParam) => {
+ return request.get({
+ url: '/mp/tag/page',
+ params: query
+ })
+}
+
+// 获取公众号标签精简信息列表
+export const getSimpleTagList = () => {
+ return request.get({
+ url: '/mp/tag/list-all-simple'
+ })
+}
+
+// 同步公众号标签
+export const syncTag = (accountId: number) => {
+ return request.post({
+ url: '/mp/tag/sync?accountId=' + accountId
+ })
+}
diff --git a/src/api/mp/user/index.ts b/src/api/mp/user/index.ts
new file mode 100644
index 0000000..b89acc7
--- /dev/null
+++ b/src/api/mp/user/index.ts
@@ -0,0 +1,31 @@
+import request from '@/config/axios'
+
+// 更新公众号粉丝
+export const updateUser = (data) => {
+ return request.put({
+ url: '/mp/user/update',
+ data: data
+ })
+}
+
+// 获得公众号粉丝
+export const getUser = (id) => {
+ return request.get({
+ url: '/mp/user/get?id=' + id
+ })
+}
+
+// 获得公众号粉丝分页
+export const getUserPage = (query) => {
+ return request.get({
+ url: '/mp/user/page',
+ params: query
+ })
+}
+
+// 同步公众号粉丝
+export const syncUser = (accountId) => {
+ return request.post({
+ url: '/mp/user/sync?accountId=' + accountId
+ })
+}
diff --git a/src/api/pay/app/index.ts b/src/api/pay/app/index.ts
new file mode 100644
index 0000000..b1a2d0d
--- /dev/null
+++ b/src/api/pay/app/index.ts
@@ -0,0 +1,66 @@
+import request from '@/config/axios'
+
+export interface AppVO {
+ id: number
+ appKey: string
+ name: string
+ status: number
+ remark: string
+ payNotifyUrl: string
+ refundNotifyUrl: string
+ merchantId: number
+ merchantName: string
+ createTime: Date
+}
+
+export interface AppPageReqVO extends PageParam {
+ name?: string
+ status?: number
+ remark?: string
+ payNotifyUrl?: string
+ refundNotifyUrl?: string
+ merchantName?: string
+ createTime?: Date[]
+}
+
+export interface AppUpdateStatusReqVO {
+ id: number
+ status: number
+}
+
+// 查询列表支付应用
+export const getAppPage = (params: AppPageReqVO) => {
+ return request.get({ url: '/pay/app/page', params })
+}
+
+// 查询详情支付应用
+export const getApp = (id: number) => {
+ return request.get({ url: '/pay/app/get?id=' + id })
+}
+
+// 新增支付应用
+export const createApp = (data: AppVO) => {
+ return request.post({ url: '/pay/app/create', data })
+}
+
+// 修改支付应用
+export const updateApp = (data: AppVO) => {
+ return request.put({ url: '/pay/app/update', data })
+}
+
+// 支付应用信息状态修改
+export const changeAppStatus = (data: AppUpdateStatusReqVO) => {
+ return request.put({ url: '/pay/app/update-status', data: data })
+}
+
+// 删除支付应用
+export const deleteApp = (id: number) => {
+ return request.delete({ url: '/pay/app/delete?id=' + id })
+}
+
+// 获得支付应用列表
+export const getAppList = () => {
+ return request.get({
+ url: '/pay/app/list'
+ })
+}
diff --git a/src/api/pay/channel/index.ts b/src/api/pay/channel/index.ts
new file mode 100644
index 0000000..0f4ff42
--- /dev/null
+++ b/src/api/pay/channel/index.ts
@@ -0,0 +1,46 @@
+import request from '@/config/axios'
+
+export interface ChannelVO {
+ id: number
+ code: string
+ config: string
+ status: number
+ remark: string
+ feeRate: number
+ appId: number
+ createTime: Date
+}
+
+// 查询列表支付渠道
+export const getChannelPage = (params: PageParam) => {
+ return request.get({ url: '/pay/channel/page', params })
+}
+
+// 查询详情支付渠道
+export const getChannel = (appId: string, code: string) => {
+ const params = {
+ appId: appId,
+ code: code
+ }
+ return request.get({ url: '/pay/channel/get', params: params })
+}
+
+// 新增支付渠道
+export const createChannel = (data: ChannelVO) => {
+ return request.post({ url: '/pay/channel/create', data })
+}
+
+// 修改支付渠道
+export const updateChannel = (data: ChannelVO) => {
+ return request.put({ url: '/pay/channel/update', data })
+}
+
+// 删除支付渠道
+export const deleteChannel = (id: number) => {
+ return request.delete({ url: '/pay/channel/delete?id=' + id })
+}
+
+// 导出支付渠道
+export const exportChannel = (params) => {
+ return request.download({ url: '/pay/channel/export-excel', params })
+}
diff --git a/src/api/pay/demo/index.ts b/src/api/pay/demo/index.ts
new file mode 100644
index 0000000..3824a8b
--- /dev/null
+++ b/src/api/pay/demo/index.ts
@@ -0,0 +1,36 @@
+import request from '@/config/axios'
+
+export interface DemoOrderVO {
+ spuId: number
+ createTime: Date
+}
+
+// 创建示例订单
+export function createDemoOrder(data: DemoOrderVO) {
+ return request.post({
+ url: '/pay/demo-order/create',
+ data: data
+ })
+}
+
+// 获得示例订单
+export function getDemoOrder(id: number) {
+ return request.get({
+ url: '/pay/demo-order/get?id=' + id
+ })
+}
+
+// 获得示例订单分页
+export function getDemoOrderPage(query: PageParam) {
+ return request.get({
+ url: '/pay/demo-order/page',
+ params: query
+ })
+}
+
+// 退款示例订单
+export function refundDemoOrder(id) {
+ return request.put({
+ url: '/pay/demo-order/refund?id=' + id
+ })
+}
diff --git a/src/api/pay/demo/transfer/index.ts b/src/api/pay/demo/transfer/index.ts
new file mode 100644
index 0000000..a95b0d5
--- /dev/null
+++ b/src/api/pay/demo/transfer/index.ts
@@ -0,0 +1,25 @@
+import request from '@/config/axios'
+
+export interface DemoTransferVO {
+ price: number
+ type: number
+ userName: string
+ alipayLogonId: string
+ openid: string
+}
+
+// 创建示例转账单
+export function createDemoTransfer(data: DemoTransferVO) {
+ return request.post({
+ url: '/pay/demo-transfer/create',
+ data: data
+ })
+}
+
+// 获得示例订单分页
+export function getDemoTransferPage(query: PageParam) {
+ return request.get({
+ url: '/pay/demo-transfer/page',
+ params: query
+ })
+}
diff --git a/src/api/pay/notify/index.ts b/src/api/pay/notify/index.ts
new file mode 100644
index 0000000..dc8bd88
--- /dev/null
+++ b/src/api/pay/notify/index.ts
@@ -0,0 +1,16 @@
+import request from '@/config/axios'
+
+// 获得支付通知明细
+export const getNotifyTaskDetail = (id) => {
+ return request.get({
+ url: '/pay/notify/get-detail?id=' + id
+ })
+}
+
+// 获得支付通知分页
+export const getNotifyTaskPage = (query) => {
+ return request.get({
+ url: '/pay/notify/page',
+ params: query
+ })
+}
diff --git a/src/api/pay/order/index.ts b/src/api/pay/order/index.ts
new file mode 100644
index 0000000..71960a8
--- /dev/null
+++ b/src/api/pay/order/index.ts
@@ -0,0 +1,104 @@
+import request from '@/config/axios'
+
+export interface OrderVO {
+ id: number
+ merchantId: number
+ appId: number
+ channelId: number
+ channelCode: string
+ merchantOrderId: string
+ subject: string
+ body: string
+ notifyUrl: string
+ notifyStatus: number
+ amount: number
+ channelFeeRate: number
+ channelFeeAmount: number
+ status: number
+ userIp: string
+ expireTime: Date
+ successTime: Date
+ notifyTime: Date
+ successExtensionId: number
+ refundStatus: number
+ refundTimes: number
+ refundAmount: number
+ channelUserId: string
+ channelOrderNo: string
+ createTime: Date
+}
+
+export interface OrderPageReqVO extends PageParam {
+ merchantId?: number
+ appId?: number
+ channelId?: number
+ channelCode?: string
+ merchantOrderId?: string
+ subject?: string
+ body?: string
+ notifyUrl?: string
+ notifyStatus?: number
+ amount?: number
+ channelFeeRate?: number
+ channelFeeAmount?: number
+ status?: number
+ expireTime?: Date[]
+ successTime?: Date[]
+ notifyTime?: Date[]
+ successExtensionId?: number
+ refundStatus?: number
+ refundTimes?: number
+ channelUserId?: string
+ channelOrderNo?: string
+ createTime?: Date[]
+}
+
+export interface OrderExportReqVO {
+ merchantId?: number
+ appId?: number
+ channelId?: number
+ channelCode?: string
+ merchantOrderId?: string
+ subject?: string
+ body?: string
+ notifyUrl?: string
+ notifyStatus?: number
+ amount?: number
+ channelFeeRate?: number
+ channelFeeAmount?: number
+ status?: number
+ expireTime?: Date[]
+ successTime?: Date[]
+ notifyTime?: Date[]
+ successExtensionId?: number
+ refundStatus?: number
+ refundTimes?: number
+ channelUserId?: string
+ channelOrderNo?: string
+ createTime?: Date[]
+}
+
+// 查询列表支付订单
+export const getOrderPage = async (params: OrderPageReqVO) => {
+ return await request.get({ url: '/pay/order/page', params })
+}
+
+// 查询详情支付订单
+export const getOrder = async (id: number) => {
+ return await request.get({ url: '/pay/order/get?id=' + id })
+}
+
+// 获得支付订单的明细
+export const getOrderDetail = async (id: number) => {
+ return await request.get({ url: '/pay/order/get-detail?id=' + id })
+}
+
+// 提交支付订单
+export const submitOrder = async (data: any) => {
+ return await request.post({ url: '/pay/order/submit', data })
+}
+
+// 导出支付订单
+export const exportOrder = async (params: OrderExportReqVO) => {
+ return await request.download({ url: '/pay/order/export-excel', params })
+}
diff --git a/src/api/pay/refund/index.ts b/src/api/pay/refund/index.ts
new file mode 100644
index 0000000..4b587f2
--- /dev/null
+++ b/src/api/pay/refund/index.ts
@@ -0,0 +1,116 @@
+import request from '@/config/axios'
+
+export interface RefundVO {
+ id: number
+ merchantId: number
+ appId: number
+ channelId: number
+ channelCode: string
+ orderId: string
+ tradeNo: string
+ merchantOrderId: string
+ merchantRefundNo: string
+ notifyUrl: string
+ notifyStatus: number
+ status: number
+ type: number
+ payAmount: number
+ refundAmount: number
+ reason: string
+ userIp: string
+ channelOrderNo: string
+ channelRefundNo: string
+ channelErrorCode: string
+ channelErrorMsg: string
+ channelExtras: string
+ expireTime: Date
+ successTime: Date
+ notifyTime: Date
+ createTime: Date
+}
+
+export interface RefundPageReqVO extends PageParam {
+ merchantId?: number
+ appId?: number
+ channelId?: number
+ channelCode?: string
+ orderId?: string
+ tradeNo?: string
+ merchantOrderId?: string
+ merchantRefundNo?: string
+ notifyUrl?: string
+ notifyStatus?: number
+ status?: number
+ type?: number
+ payAmount?: number
+ refundAmount?: number
+ reason?: string
+ userIp?: string
+ channelOrderNo?: string
+ channelRefundNo?: string
+ channelErrorCode?: string
+ channelErrorMsg?: string
+ channelExtras?: string
+ expireTime?: Date[]
+ successTime?: Date[]
+ notifyTime?: Date[]
+ createTime?: Date[]
+}
+
+export interface PayRefundExportReqVO {
+ merchantId?: number
+ appId?: number
+ channelId?: number
+ channelCode?: string
+ orderId?: string
+ tradeNo?: string
+ merchantOrderId?: string
+ merchantRefundNo?: string
+ notifyUrl?: string
+ notifyStatus?: number
+ status?: number
+ type?: number
+ payAmount?: number
+ refundAmount?: number
+ reason?: string
+ userIp?: string
+ channelOrderNo?: string
+ channelRefundNo?: string
+ channelErrorCode?: string
+ channelErrorMsg?: string
+ channelExtras?: string
+ expireTime?: Date[]
+ successTime?: Date[]
+ notifyTime?: Date[]
+ createTime?: Date[]
+}
+
+// 查询列表退款订单
+export const getRefundPage = (params: RefundPageReqVO) => {
+ return request.get({ url: '/pay/refund/page', params })
+}
+
+// 查询详情退款订单
+export const getRefund = (id: number) => {
+ return request.get({ url: '/pay/refund/get?id=' + id })
+}
+
+// 新增退款订单
+export const createRefund = (data: RefundVO) => {
+ return request.post({ url: '/pay/refund/create', data })
+}
+
+// 修改退款订单
+export const updateRefund = (data: RefundVO) => {
+ return request.put({ url: '/pay/refund/update', data })
+}
+
+// 删除退款订单
+export const deleteRefund = (id: number) => {
+ return request.delete({ url: '/pay/refund/delete?id=' + id })
+}
+
+// 导出退款订单
+export const exportRefund = (params: PayRefundExportReqVO) => {
+ return request.download({ url: '/pay/refund/export-excel', params })
+}
diff --git a/src/api/pay/transfer/index.ts b/src/api/pay/transfer/index.ts
new file mode 100644
index 0000000..7a58abf
--- /dev/null
+++ b/src/api/pay/transfer/index.ts
@@ -0,0 +1,27 @@
+import request from '@/config/axios'
+
+export interface TransferVO {
+ appId: number
+ channelCode: string
+ merchantTransferId: string
+ type: number
+ price: number
+ subject: string
+ userName: string
+ alipayLogonId: string
+ openid: string
+}
+
+// 新增转账单
+export const createTransfer = async (data: TransferVO) => {
+ return await request.post({ url: `/pay/transfer/create`, data })
+}
+
+// 查询转账单列表
+export const getTransferPage = async (params) => {
+ return await request.get({ url: `/pay/transfer/page`, params })
+}
+
+export const getTransfer = async (id: number) => {
+ return await request.get({ url: '/pay/transfer/get?id=' + id })
+}
diff --git a/src/api/pay/wallet/balance/index.ts b/src/api/pay/wallet/balance/index.ts
new file mode 100644
index 0000000..3e5ab36
--- /dev/null
+++ b/src/api/pay/wallet/balance/index.ts
@@ -0,0 +1,26 @@
+import request from '@/config/axios'
+
+/** 用户钱包查询参数 */
+export interface PayWalletUserReqVO {
+ userId: number
+}
+/** 钱包 VO */
+export interface WalletVO {
+ id: number
+ userId: number
+ userType: number
+ balance: number
+ totalExpense: number
+ totalRecharge: number
+ freezePrice: number
+}
+
+/** 查询用户钱包详情 */
+export const getWallet = async (params: PayWalletUserReqVO) => {
+ return await request.get({ url: `/pay/wallet/get`, params })
+}
+
+// 查询会员钱包列表
+export const getWalletPage = async (params) => {
+ return await request.get({ url: `/pay/wallet/page`, params })
+}
diff --git a/src/api/pay/wallet/rechargePackage/index.ts b/src/api/pay/wallet/rechargePackage/index.ts
new file mode 100644
index 0000000..c8e4cc9
--- /dev/null
+++ b/src/api/pay/wallet/rechargePackage/index.ts
@@ -0,0 +1,34 @@
+import request from '@/config/axios'
+
+export interface WalletRechargePackageVO {
+ id: number
+ name: string
+ payPrice: number
+ bonusPrice: number
+ status: number
+}
+
+// 查询套餐充值列表
+export const getWalletRechargePackagePage = async (params) => {
+ return await request.get({ url: '/pay/wallet-recharge-package/page', params })
+}
+
+// 查询套餐充值详情
+export const getWalletRechargePackage = async (id: number) => {
+ return await request.get({ url: '/pay/wallet-recharge-package/get?id=' + id })
+}
+
+// 新增套餐充值
+export const createWalletRechargePackage = async (data: WalletRechargePackageVO) => {
+ return await request.post({ url: '/pay/wallet-recharge-package/create', data })
+}
+
+// 修改套餐充值
+export const updateWalletRechargePackage = async (data: WalletRechargePackageVO) => {
+ return await request.put({ url: '/pay/wallet-recharge-package/update', data })
+}
+
+// 删除套餐充值
+export const deleteWalletRechargePackage = async (id: number) => {
+ return await request.delete({ url: '/pay/wallet-recharge-package/delete?id=' + id })
+}
diff --git a/src/api/pay/wallet/transaction/index.ts b/src/api/pay/wallet/transaction/index.ts
new file mode 100644
index 0000000..3377ffa
--- /dev/null
+++ b/src/api/pay/wallet/transaction/index.ts
@@ -0,0 +1,14 @@
+import request from '@/config/axios'
+
+export interface WalletTransactionVO {
+ id: number
+ walletId: number
+ title: string
+ price: number
+ balance: number
+}
+
+// 查询会员钱包流水列表
+export const getWalletTransactionPage = async (params) => {
+ return await request.get({ url: `/pay/wallet-transaction/page`, params })
+}
diff --git a/src/api/system/area/index.ts b/src/api/system/area/index.ts
new file mode 100644
index 0000000..e91a499
--- /dev/null
+++ b/src/api/system/area/index.ts
@@ -0,0 +1,11 @@
+import request from '@/config/axios'
+
+// 获得地区树
+export const getAreaTree = async () => {
+ return await request.get({ url: '/system/area/tree' })
+}
+
+// 获得 IP 对应的地区名
+export const getAreaByIp = async (ip: string) => {
+ return await request.get({ url: '/system/area/get-by-ip?ip=' + ip })
+}
diff --git a/src/api/system/dept/index.ts b/src/api/system/dept/index.ts
new file mode 100644
index 0000000..04d5c88
--- /dev/null
+++ b/src/api/system/dept/index.ts
@@ -0,0 +1,43 @@
+import request from '@/config/axios'
+
+export interface DeptVO {
+ id?: number
+ name: string
+ parentId: number
+ status: number
+ sort: number
+ leaderUserId: number
+ phone: string
+ email: string
+ createTime: Date
+}
+
+// 查询部门(精简)列表
+export const getSimpleDeptList = async (): Promise => {
+ return await request.get({ url: '/system/dept/simple-list' })
+}
+
+// 查询部门列表
+export const getDeptPage = async (params: PageParam) => {
+ return await request.get({ url: '/system/dept/list', params })
+}
+
+// 查询部门详情
+export const getDept = async (id: number) => {
+ return await request.get({ url: '/system/dept/get?id=' + id })
+}
+
+// 新增部门
+export const createDept = async (data: DeptVO) => {
+ return await request.post({ url: '/system/dept/create', data: data })
+}
+
+// 修改部门
+export const updateDept = async (params: DeptVO) => {
+ return await request.put({ url: '/system/dept/update', data: params })
+}
+
+// 删除部门
+export const deleteDept = async (id: number) => {
+ return await request.delete({ url: '/system/dept/delete?id=' + id })
+}
diff --git a/src/api/system/dict/dict.data.ts b/src/api/system/dict/dict.data.ts
new file mode 100644
index 0000000..f428648
--- /dev/null
+++ b/src/api/system/dict/dict.data.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+export type DictDataVO = {
+ id: number | undefined
+ sort: number | undefined
+ label: string
+ value: string
+ dictType: string
+ status: number
+ colorType: string
+ cssClass: string
+ remark: string
+ createTime: Date
+}
+
+// 查询字典数据(精简)列表
+export const getSimpleDictDataList = () => {
+ return request.get({ url: '/system/dict-data/simple-list' })
+}
+
+// 查询字典数据列表
+export const getDictDataPage = (params: PageParam) => {
+ return request.get({ url: '/system/dict-data/page', params })
+}
+
+// 查询字典数据详情
+export const getDictData = (id: number) => {
+ return request.get({ url: '/system/dict-data/get?id=' + id })
+}
+
+// 新增字典数据
+export const createDictData = (data: DictDataVO) => {
+ return request.post({ url: '/system/dict-data/create', data })
+}
+
+// 修改字典数据
+export const updateDictData = (data: DictDataVO) => {
+ return request.put({ url: '/system/dict-data/update', data })
+}
+
+// 删除字典数据
+export const deleteDictData = (id: number) => {
+ return request.delete({ url: '/system/dict-data/delete?id=' + id })
+}
+
+// 导出字典类型数据
+export const exportDictData = (params) => {
+ return request.download({ url: '/system/dict-data/export', params })
+}
diff --git a/src/api/system/dict/dict.type.ts b/src/api/system/dict/dict.type.ts
new file mode 100644
index 0000000..eaa5fb6
--- /dev/null
+++ b/src/api/system/dict/dict.type.ts
@@ -0,0 +1,44 @@
+import request from '@/config/axios'
+
+export type DictTypeVO = {
+ id: number | undefined
+ name: string
+ type: string
+ status: number
+ remark: string
+ createTime: Date
+}
+
+// 查询字典(精简)列表
+export const getSimpleDictTypeList = () => {
+ return request.get({ url: '/system/dict-type/list-all-simple' })
+}
+
+// 查询字典列表
+export const getDictTypePage = (params: PageParam) => {
+ return request.get({ url: '/system/dict-type/page', params })
+}
+
+// 查询字典详情
+export const getDictType = (id: number) => {
+ return request.get({ url: '/system/dict-type/get?id=' + id })
+}
+
+// 新增字典
+export const createDictType = (data: DictTypeVO) => {
+ return request.post({ url: '/system/dict-type/create', data })
+}
+
+// 修改字典
+export const updateDictType = (data: DictTypeVO) => {
+ return request.put({ url: '/system/dict-type/update', data })
+}
+
+// 删除字典
+export const deleteDictType = (id: number) => {
+ return request.delete({ url: '/system/dict-type/delete?id=' + id })
+}
+// 导出字典类型
+export const exportDictType = (params) => {
+ return request.download({ url: '/system/dict-type/export', params })
+}
diff --git a/src/api/system/loginLog/index.ts b/src/api/system/loginLog/index.ts
new file mode 100644
index 0000000..7296f25
--- /dev/null
+++ b/src/api/system/loginLog/index.ts
@@ -0,0 +1,25 @@
+import request from '@/config/axios'
+
+export interface LoginLogVO {
+ id: number
+ logType: number
+ traceId: number
+ userId: number
+ userType: number
+ username: string
+ result: number
+ status: number
+ userIp: string
+ userAgent: string
+ createTime: Date
+}
+
+// 查询登录日志列表
+export const getLoginLogPage = (params: PageParam) => {
+ return request.get({ url: '/system/login-log/page', params })
+}
+
+// 导出登录日志
+export const exportLoginLog = (params) => {
+ return request.download({ url: '/system/login-log/export', params })
+}
diff --git a/src/api/system/mail/account/index.ts b/src/api/system/mail/account/index.ts
new file mode 100644
index 0000000..15e0391
--- /dev/null
+++ b/src/api/system/mail/account/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+export interface MailAccountVO {
+ id: number
+ mail: string
+ username: string
+ password: string
+ host: string
+ port: number
+ sslEnable: boolean
+ starttlsEnable: boolean
+}
+
+// 查询邮箱账号列表
+export const getMailAccountPage = async (params: PageParam) => {
+ return await request.get({ url: '/system/mail-account/page', params })
+}
+
+// 查询邮箱账号详情
+export const getMailAccount = async (id: number) => {
+ return await request.get({ url: '/system/mail-account/get?id=' + id })
+}
+
+// 新增邮箱账号
+export const createMailAccount = async (data: MailAccountVO) => {
+ return await request.post({ url: '/system/mail-account/create', data })
+}
+
+// 修改邮箱账号
+export const updateMailAccount = async (data: MailAccountVO) => {
+ return await request.put({ url: '/system/mail-account/update', data })
+}
+
+// 删除邮箱账号
+export const deleteMailAccount = async (id: number) => {
+ return await request.delete({ url: '/system/mail-account/delete?id=' + id })
+}
+
+// 获得邮箱账号精简列表
+export const getSimpleMailAccountList = async () => {
+ return request.get({ url: '/system/mail-account/simple-list' })
+}
diff --git a/src/api/system/mail/log/index.ts b/src/api/system/mail/log/index.ts
new file mode 100644
index 0000000..13172a7
--- /dev/null
+++ b/src/api/system/mail/log/index.ts
@@ -0,0 +1,30 @@
+import request from '@/config/axios'
+
+export interface MailLogVO {
+ id: number
+ userId: number
+ userType: number
+ toMail: string
+ accountId: number
+ fromMail: string
+ templateId: number
+ templateCode: string
+ templateNickname: string
+ templateTitle: string
+ templateContent: string
+ templateParams: string
+ sendStatus: number
+ sendTime: Date
+ sendMessageId: string
+ sendException: string
+}
+
+// 查询邮件日志列表
+export const getMailLogPage = async (params: PageParam) => {
+ return await request.get({ url: '/system/mail-log/page', params })
+}
+
+// 查询邮件日志详情
+export const getMailLog = async (id: number) => {
+ return await request.get({ url: '/system/mail-log/get?id=' + id })
+}
diff --git a/src/api/system/mail/template/index.ts b/src/api/system/mail/template/index.ts
new file mode 100644
index 0000000..fb7ce5e
--- /dev/null
+++ b/src/api/system/mail/template/index.ts
@@ -0,0 +1,50 @@
+import request from '@/config/axios'
+
+export interface MailTemplateVO {
+ id: number
+ name: string
+ code: string
+ accountId: number
+ nickname: string
+ title: string
+ content: string
+ params: string
+ status: number
+ remark: string
+}
+
+export interface MailSendReqVO {
+ mail: string
+ templateCode: string
+ templateParams: Map
+}
+
+// 查询邮件模版列表
+export const getMailTemplatePage = async (params: PageParam) => {
+ return await request.get({ url: '/system/mail-template/page', params })
+}
+
+// 查询邮件模版详情
+export const getMailTemplate = async (id: number) => {
+ return await request.get({ url: '/system/mail-template/get?id=' + id })
+}
+
+// 新增邮件模版
+export const createMailTemplate = async (data: MailTemplateVO) => {
+ return await request.post({ url: '/system/mail-template/create', data })
+}
+
+// 修改邮件模版
+export const updateMailTemplate = async (data: MailTemplateVO) => {
+ return await request.put({ url: '/system/mail-template/update', data })
+}
+
+// 删除邮件模版
+export const deleteMailTemplate = async (id: number) => {
+ return await request.delete({ url: '/system/mail-template/delete?id=' + id })
+}
+
+// 发送邮件
+export const sendMail = (data: MailSendReqVO) => {
+ return request.post({ url: '/system/mail-template/send-mail', data })
+}
diff --git a/src/api/system/menu/index.ts b/src/api/system/menu/index.ts
new file mode 100644
index 0000000..5a80668
--- /dev/null
+++ b/src/api/system/menu/index.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+export interface MenuVO {
+ id: number
+ name: string
+ permission: string
+ type: number
+ sort: number
+ parentId: number
+ path: string
+ icon: string
+ component: string
+ componentName?: string
+ status: number
+ visible: boolean
+ keepAlive: boolean
+ alwaysShow?: boolean
+ createTime: Date
+}
+
+// 查询菜单(精简)列表
+export const getSimpleMenusList = () => {
+ return request.get({ url: '/system/menu/simple-list' })
+}
+
+// 查询菜单列表
+export const getMenuList = (params) => {
+ return request.get({ url: '/system/menu/list', params })
+}
+
+// 获取菜单详情
+export const getMenu = (id: number) => {
+ return request.get({ url: '/system/menu/get?id=' + id })
+}
+
+// 新增菜单
+export const createMenu = (data: MenuVO) => {
+ return request.post({ url: '/system/menu/create', data })
+}
+
+// 修改菜单
+export const updateMenu = (data: MenuVO) => {
+ return request.put({ url: '/system/menu/update', data })
+}
+
+// 删除菜单
+export const deleteMenu = (id: number) => {
+ return request.delete({ url: '/system/menu/delete?id=' + id })
+}
diff --git a/src/api/system/notice/index.ts b/src/api/system/notice/index.ts
new file mode 100644
index 0000000..f643469
--- /dev/null
+++ b/src/api/system/notice/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+export interface NoticeVO {
+ id: number | undefined
+ title: string
+ type: number
+ content: string
+ status: number
+ remark: string
+ creator: string
+ createTime: Date
+}
+
+// 查询公告列表
+export const getNoticePage = (params: PageParam) => {
+ return request.get({ url: '/system/notice/page', params })
+}
+
+// 查询公告详情
+export const getNotice = (id: number) => {
+ return request.get({ url: '/system/notice/get?id=' + id })
+}
+
+// 新增公告
+export const createNotice = (data: NoticeVO) => {
+ return request.post({ url: '/system/notice/create', data })
+}
+
+// 修改公告
+export const updateNotice = (data: NoticeVO) => {
+ return request.put({ url: '/system/notice/update', data })
+}
+
+// 删除公告
+export const deleteNotice = (id: number) => {
+ return request.delete({ url: '/system/notice/delete?id=' + id })
+}
+
+// 推送公告
+export const pushNotice = (id: number) => {
+ return request.post({ url: '/system/notice/push?id=' + id })
+}
diff --git a/src/api/system/notify/message/index.ts b/src/api/system/notify/message/index.ts
new file mode 100644
index 0000000..e407c77
--- /dev/null
+++ b/src/api/system/notify/message/index.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+import qs from 'qs'
+
+export interface NotifyMessageVO {
+ id: number
+ userId: number
+ userType: number
+ templateId: number
+ templateCode: string
+ templateNickname: string
+ templateContent: string
+ templateType: number
+ templateParams: string
+ readStatus: boolean
+ readTime: Date
+ createTime: Date
+}
+
+// 查询站内信消息列表
+export const getNotifyMessagePage = async (params: PageParam) => {
+ return await request.get({ url: '/system/notify-message/page', params })
+}
+
+// 获得我的站内信分页
+export const getMyNotifyMessagePage = async (params: PageParam) => {
+ return await request.get({ url: '/system/notify-message/my-page', params })
+}
+
+// 批量标记已读
+export const updateNotifyMessageRead = async (ids) => {
+ return await request.put({
+ url: '/system/notify-message/update-read?' + qs.stringify({ ids: ids }, { indices: false })
+ })
+}
+
+// 标记所有站内信为已读
+export const updateAllNotifyMessageRead = async () => {
+ return await request.put({ url: '/system/notify-message/update-all-read' })
+}
+
+// 获取当前用户的最新站内信列表
+export const getUnreadNotifyMessageList = async () => {
+ return await request.get({ url: '/system/notify-message/get-unread-list' })
+}
+
+// 获得当前用户的未读站内信数量
+export const getUnreadNotifyMessageCount = async () => {
+ return await request.get({ url: '/system/notify-message/get-unread-count' })
+}
diff --git a/src/api/system/notify/template/index.ts b/src/api/system/notify/template/index.ts
new file mode 100644
index 0000000..44355df
--- /dev/null
+++ b/src/api/system/notify/template/index.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+
+export interface NotifyTemplateVO {
+ id?: number
+ name: string
+ nickname: string
+ code: string
+ content: string
+ type?: number
+ params: string
+ status: number
+ remark: string
+}
+
+export interface NotifySendReqVO {
+ userId: number | null
+ templateCode: string
+ templateParams: Map
+}
+
+// 查询站内信模板列表
+export const getNotifyTemplatePage = async (params: PageParam) => {
+ return await request.get({ url: '/system/notify-template/page', params })
+}
+
+// 查询站内信模板详情
+export const getNotifyTemplate = async (id: number) => {
+ return await request.get({ url: '/system/notify-template/get?id=' + id })
+}
+
+// 新增站内信模板
+export const createNotifyTemplate = async (data: NotifyTemplateVO) => {
+ return await request.post({ url: '/system/notify-template/create', data })
+}
+
+// 修改站内信模板
+export const updateNotifyTemplate = async (data: NotifyTemplateVO) => {
+ return await request.put({ url: '/system/notify-template/update', data })
+}
+
+// 删除站内信模板
+export const deleteNotifyTemplate = async (id: number) => {
+ return await request.delete({ url: '/system/notify-template/delete?id=' + id })
+}
+
+// 发送站内信
+export const sendNotify = (data: NotifySendReqVO) => {
+ return request.post({ url: '/system/notify-template/send-notify', data })
+}
diff --git a/src/api/system/oauth2/client.ts b/src/api/system/oauth2/client.ts
new file mode 100644
index 0000000..6f71aca
--- /dev/null
+++ b/src/api/system/oauth2/client.ts
@@ -0,0 +1,47 @@
+import request from '@/config/axios'
+
+export interface OAuth2ClientVO {
+ id: number
+ clientId: string
+ secret: string
+ name: string
+ logo: string
+ description: string
+ status: number
+ accessTokenValiditySeconds: number
+ refreshTokenValiditySeconds: number
+ redirectUris: string[]
+ autoApprove: boolean
+ authorizedGrantTypes: string[]
+ scopes: string[]
+ authorities: string[]
+ resourceIds: string[]
+ additionalInformation: string
+ isAdditionalInformationJson: boolean
+ createTime: Date
+}
+
+// 查询 OAuth2 客户端的列表
+export const getOAuth2ClientPage = (params: PageParam) => {
+ return request.get({ url: '/system/oauth2-client/page', params })
+}
+
+// 查询 OAuth2 客户端的详情
+export const getOAuth2Client = (id: number) => {
+ return request.get({ url: '/system/oauth2-client/get?id=' + id })
+}
+
+// 新增 OAuth2 客户端
+export const createOAuth2Client = (data: OAuth2ClientVO) => {
+ return request.post({ url: '/system/oauth2-client/create', data })
+}
+
+// 修改 OAuth2 客户端
+export const updateOAuth2Client = (data: OAuth2ClientVO) => {
+ return request.put({ url: '/system/oauth2-client/update', data })
+}
+
+// 删除 OAuth2
+export const deleteOAuth2Client = (id: number) => {
+ return request.delete({ url: '/system/oauth2-client/delete?id=' + id })
+}
diff --git a/src/api/system/oauth2/token.ts b/src/api/system/oauth2/token.ts
new file mode 100644
index 0000000..ac89ae8
--- /dev/null
+++ b/src/api/system/oauth2/token.ts
@@ -0,0 +1,22 @@
+import request from '@/config/axios'
+
+export interface OAuth2TokenVO {
+ id: number
+ accessToken: string
+ refreshToken: string
+ userId: number
+ userType: number
+ clientId: string
+ createTime: Date
+ expiresTime: Date
+}
+
+// 查询 token列表
+export const getAccessTokenPage = (params: PageParam) => {
+ return request.get({ url: '/system/oauth2-token/page', params })
+}
+
+// 删除 token
+export const deleteAccessToken = (accessToken: string) => {
+ return request.delete({ url: '/system/oauth2-token/delete?accessToken=' + accessToken })
+}
diff --git a/src/api/system/operatelog/index.ts b/src/api/system/operatelog/index.ts
new file mode 100644
index 0000000..cdb713e
--- /dev/null
+++ b/src/api/system/operatelog/index.ts
@@ -0,0 +1,30 @@
+import request from '@/config/axios'
+
+export type OperateLogVO = {
+ id: number
+ traceId: string
+ userType: number
+ userId: number
+ userName: string
+ type: string
+ subType: string
+ bizId: number
+ action: string
+ extra: string
+ requestMethod: string
+ requestUrl: string
+ userIp: string
+ userAgent: string
+ creator: string
+ creatorName: string
+ createTime: Date
+}
+
+// 查询操作日志列表
+export const getOperateLogPage = (params: PageParam) => {
+ return request.get({ url: '/system/operate-log/page', params })
+}
+// 导出操作日志
+export const exportOperateLog = (params: any) => {
+ return request.download({ url: '/system/operate-log/export', params })
+}
diff --git a/src/api/system/permission/index.ts b/src/api/system/permission/index.ts
new file mode 100644
index 0000000..b3c7696
--- /dev/null
+++ b/src/api/system/permission/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+export interface PermissionAssignUserRoleReqVO {
+ userId: number
+ roleIds: number[]
+}
+
+export interface PermissionAssignRoleMenuReqVO {
+ roleId: number
+ menuIds: number[]
+}
+
+export interface PermissionAssignRoleDataScopeReqVO {
+ roleId: number
+ dataScope: number
+ dataScopeDeptIds: number[]
+}
+
+// 查询角色拥有的菜单权限
+export const getRoleMenuList = async (roleId: number) => {
+ return await request.get({ url: '/system/permission/list-role-menus?roleId=' + roleId })
+}
+
+// 赋予角色菜单权限
+export const assignRoleMenu = async (data: PermissionAssignRoleMenuReqVO) => {
+ return await request.post({ url: '/system/permission/assign-role-menu', data })
+}
+
+// 赋予角色数据权限
+export const assignRoleDataScope = async (data: PermissionAssignRoleDataScopeReqVO) => {
+ return await request.post({ url: '/system/permission/assign-role-data-scope', data })
+}
+
+// 查询用户拥有的角色数组
+export const getUserRoleList = async (userId: number) => {
+ return await request.get({ url: '/system/permission/list-user-roles?userId=' + userId })
+}
+
+// 赋予用户角色
+export const assignUserRole = async (data: PermissionAssignUserRoleReqVO) => {
+ return await request.post({ url: '/system/permission/assign-user-role', data })
+}
diff --git a/src/api/system/post/index.ts b/src/api/system/post/index.ts
new file mode 100644
index 0000000..0e6f2ca
--- /dev/null
+++ b/src/api/system/post/index.ts
@@ -0,0 +1,46 @@
+import request from '@/config/axios'
+
+export interface PostVO {
+ id?: number
+ name: string
+ code: string
+ sort: number
+ status: number
+ remark: string
+ createTime?: Date
+}
+
+// 查询岗位列表
+export const getPostPage = async (params: PageParam) => {
+ return await request.get({ url: '/system/post/page', params })
+}
+
+// 获取岗位精简信息列表
+export const getSimplePostList = async (): Promise => {
+ return await request.get({ url: '/system/post/simple-list' })
+}
+
+// 查询岗位详情
+export const getPost = async (id: number) => {
+ return await request.get({ url: '/system/post/get?id=' + id })
+}
+
+// 新增岗位
+export const createPost = async (data: PostVO) => {
+ return await request.post({ url: '/system/post/create', data })
+}
+
+// 修改岗位
+export const updatePost = async (data: PostVO) => {
+ return await request.put({ url: '/system/post/update', data })
+}
+
+// 删除岗位
+export const deletePost = async (id: number) => {
+ return await request.delete({ url: '/system/post/delete?id=' + id })
+}
+
+// 导出岗位
+export const exportPost = async (params) => {
+ return await request.download({ url: '/system/post/export', params })
+}
diff --git a/src/api/system/role/index.ts b/src/api/system/role/index.ts
new file mode 100644
index 0000000..3325dde
--- /dev/null
+++ b/src/api/system/role/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+export interface RoleVO {
+ id: number
+ name: string
+ code: string
+ sort: number
+ status: number
+ type: number
+ dataScope: number
+ dataScopeDeptIds: number[]
+ createTime: Date
+}
+
+export interface UpdateStatusReqVO {
+ id: number
+ status: number
+}
+
+// 查询角色列表
+export const getRolePage = async (params: PageParam) => {
+ return await request.get({ url: '/system/role/page', params })
+}
+
+// 查询角色(精简)列表
+export const getSimpleRoleList = async (): Promise => {
+ return await request.get({ url: '/system/role/simple-list' })
+}
+
+// 查询角色详情
+export const getRole = async (id: number) => {
+ return await request.get({ url: '/system/role/get?id=' + id })
+}
+
+// 新增角色
+export const createRole = async (data: RoleVO) => {
+ return await request.post({ url: '/system/role/create', data })
+}
+
+// 修改角色
+export const updateRole = async (data: RoleVO) => {
+ return await request.put({ url: '/system/role/update', data })
+}
+
+// 修改角色状态
+export const updateRoleStatus = async (data: UpdateStatusReqVO) => {
+ return await request.put({ url: '/system/role/update-status', data })
+}
+
+// 删除角色
+export const deleteRole = async (id: number) => {
+ return await request.delete({ url: '/system/role/delete?id=' + id })
+}
+
+// 导出角色
+export const exportRole = (params) => {
+ return request.download({
+ url: '/system/role/export-excel',
+ params
+ })
+}
diff --git a/src/api/system/sms/smsChannel/index.ts b/src/api/system/sms/smsChannel/index.ts
new file mode 100644
index 0000000..bcdaa7f
--- /dev/null
+++ b/src/api/system/sms/smsChannel/index.ts
@@ -0,0 +1,43 @@
+import request from '@/config/axios'
+
+export interface SmsChannelVO {
+ id: number
+ code: string
+ status: number
+ signature: string
+ remark: string
+ apiKey: string
+ apiSecret: string
+ callbackUrl: string
+ createTime: Date
+}
+
+// 查询短信渠道列表
+export const getSmsChannelPage = (params: PageParam) => {
+ return request.get({ url: '/system/sms-channel/page', params })
+}
+
+// 获得短信渠道精简列表
+export function getSimpleSmsChannelList() {
+ return request.get({ url: '/system/sms-channel/simple-list' })
+}
+
+// 查询短信渠道详情
+export const getSmsChannel = (id: number) => {
+ return request.get({ url: '/system/sms-channel/get?id=' + id })
+}
+
+// 新增短信渠道
+export const createSmsChannel = (data: SmsChannelVO) => {
+ return request.post({ url: '/system/sms-channel/create', data })
+}
+
+// 修改短信渠道
+export const updateSmsChannel = (data: SmsChannelVO) => {
+ return request.put({ url: '/system/sms-channel/update', data })
+}
+
+// 删除短信渠道
+export const deleteSmsChannel = (id: number) => {
+ return request.delete({ url: '/system/sms-channel/delete?id=' + id })
+}
diff --git a/src/api/system/sms/smsLog/index.ts b/src/api/system/sms/smsLog/index.ts
new file mode 100644
index 0000000..f989171
--- /dev/null
+++ b/src/api/system/sms/smsLog/index.ts
@@ -0,0 +1,37 @@
+import request from '@/config/axios'
+
+export interface SmsLogVO {
+ id: number | null
+ channelId: number | null
+ channelCode: string
+ templateId: number | null
+ templateCode: string
+ templateType: number | null
+ templateContent: string
+ templateParams: Map | null
+ apiTemplateId: string
+ mobile: string
+ userId: number | null
+ userType: number | null
+ sendStatus: number | null
+ sendTime: Date | null
+ apiSendCode: string
+ apiSendMsg: string
+ apiRequestId: string
+ apiSerialNo: string
+ receiveStatus: number | null
+ receiveTime: Date | null
+ apiReceiveCode: string
+ apiReceiveMsg: string
+ createTime: Date | null
+}
+
+// 查询短信日志列表
+export const getSmsLogPage = (params: PageParam) => {
+ return request.get({ url: '/system/sms-log/page', params })
+}
+
+// 导出短信日志
+export const exportSmsLog = (params) => {
+ return request.download({ url: '/system/sms-log/export-excel', params })
+}
diff --git a/src/api/system/sms/smsTemplate/index.ts b/src/api/system/sms/smsTemplate/index.ts
new file mode 100644
index 0000000..868ddd4
--- /dev/null
+++ b/src/api/system/sms/smsTemplate/index.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+
+export interface SmsTemplateVO {
+ id?: number
+ type?: number
+ status: number
+ code: string
+ name: string
+ content: string
+ remark: string
+ apiTemplateId: string
+ channelId?: number
+ channelCode?: string
+ params?: string[]
+ createTime?: Date
+}
+
+export interface SendSmsReqVO {
+ mobile: string
+ templateCode: string
+ templateParams: Map
+}
+
+// 查询短信模板列表
+export const getSmsTemplatePage = (params: PageParam) => {
+ return request.get({ url: '/system/sms-template/page', params })
+}
+
+// 查询短信模板详情
+export const getSmsTemplate = (id: number) => {
+ return request.get({ url: '/system/sms-template/get?id=' + id })
+}
+
+// 新增短信模板
+export const createSmsTemplate = (data: SmsTemplateVO) => {
+ return request.post({ url: '/system/sms-template/create', data })
+}
+
+// 修改短信模板
+export const updateSmsTemplate = (data: SmsTemplateVO) => {
+ return request.put({ url: '/system/sms-template/update', data })
+}
+
+// 删除短信模板
+export const deleteSmsTemplate = (id: number) => {
+ return request.delete({ url: '/system/sms-template/delete?id=' + id })
+}
+
+// 导出短信模板
+export const exportSmsTemplate = (params) => {
+ return request.download({
+ url: '/system/sms-template/export-excel',
+ params
+ })
+}
+
+// 发送短信
+export const sendSms = (data: SendSmsReqVO) => {
+ return request.post({ url: '/system/sms-template/send-sms', data })
+}
diff --git a/src/api/system/social/client/index.ts b/src/api/system/social/client/index.ts
new file mode 100644
index 0000000..bf13ab4
--- /dev/null
+++ b/src/api/system/social/client/index.ts
@@ -0,0 +1,37 @@
+import request from '@/config/axios'
+
+export interface SocialClientVO {
+ id: number
+ name: string
+ socialType: number
+ userType: number
+ clientId: string
+ clientSecret: string
+ agentId: string
+ status: number
+}
+
+// 查询社交客户端列表
+export const getSocialClientPage = async (params) => {
+ return await request.get({ url: `/system/social-client/page`, params })
+}
+
+// 查询社交客户端详情
+export const getSocialClient = async (id: number) => {
+ return await request.get({ url: `/system/social-client/get?id=` + id })
+}
+
+// 新增社交客户端
+export const createSocialClient = async (data: SocialClientVO) => {
+ return await request.post({ url: `/system/social-client/create`, data })
+}
+
+// 修改社交客户端
+export const updateSocialClient = async (data: SocialClientVO) => {
+ return await request.put({ url: `/system/social-client/update`, data })
+}
+
+// 删除社交客户端
+export const deleteSocialClient = async (id: number) => {
+ return await request.delete({ url: `/system/social-client/delete?id=` + id })
+}
diff --git a/src/api/system/social/user/index.ts b/src/api/system/social/user/index.ts
new file mode 100644
index 0000000..f11231b
--- /dev/null
+++ b/src/api/system/social/user/index.ts
@@ -0,0 +1,24 @@
+import request from '@/config/axios'
+
+export interface SocialUserVO {
+ id: number
+ type: number
+ openid: string
+ token: string
+ rawTokenInfo: string
+ nickname: string
+ avatar: string
+ rawUserInfo: string
+ code: string
+ state: string
+}
+
+// 查询社交用户列表
+export const getSocialUserPage = async (params) => {
+ return await request.get({ url: `/system/social-user/page`, params })
+}
+
+// 查询社交用户详情
+export const getSocialUser = async (id: number) => {
+ return await request.get({ url: `/system/social-user/get?id=` + id })
+}
diff --git a/src/api/system/tenant/index.ts b/src/api/system/tenant/index.ts
new file mode 100644
index 0000000..176c375
--- /dev/null
+++ b/src/api/system/tenant/index.ts
@@ -0,0 +1,62 @@
+import request from '@/config/axios'
+
+export interface TenantVO {
+ id: number
+ name: string
+ contactName: string
+ contactMobile: string
+ status: number
+ domain: string
+ packageId: number
+ username: string
+ password: string
+ expireTime: Date
+ accountCount: number
+ createTime: Date
+}
+
+export interface TenantPageReqVO extends PageParam {
+ name?: string
+ contactName?: string
+ contactMobile?: string
+ status?: number
+ createTime?: Date[]
+}
+
+export interface TenantExportReqVO {
+ name?: string
+ contactName?: string
+ contactMobile?: string
+ status?: number
+ createTime?: Date[]
+}
+
+// 查询租户列表
+export const getTenantPage = (params: TenantPageReqVO) => {
+ return request.get({ url: '/system/tenant/page', params })
+}
+
+// 查询租户详情
+export const getTenant = (id: number) => {
+ return request.get({ url: '/system/tenant/get?id=' + id })
+}
+
+// 新增租户
+export const createTenant = (data: TenantVO) => {
+ return request.post({ url: '/system/tenant/create', data })
+}
+
+// 修改租户
+export const updateTenant = (data: TenantVO) => {
+ return request.put({ url: '/system/tenant/update', data })
+}
+
+// 删除租户
+export const deleteTenant = (id: number) => {
+ return request.delete({ url: '/system/tenant/delete?id=' + id })
+}
+
+// 导出租户
+export const exportTenant = (params: TenantExportReqVO) => {
+ return request.download({ url: '/system/tenant/export-excel', params })
+}
diff --git a/src/api/system/tenantPackage/index.ts b/src/api/system/tenantPackage/index.ts
new file mode 100644
index 0000000..e01375a
--- /dev/null
+++ b/src/api/system/tenantPackage/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+export interface TenantPackageVO {
+ id: number
+ name: string
+ status: number
+ remark: string
+ creator: string
+ updater: string
+ updateTime: string
+ menuIds: number[]
+ createTime: Date
+}
+
+// 查询租户套餐列表
+export const getTenantPackagePage = (params: PageParam) => {
+ return request.get({ url: '/system/tenant-package/page', params })
+}
+
+// 获得租户
+export const getTenantPackage = (id: number) => {
+ return request.get({ url: '/system/tenant-package/get?id=' + id })
+}
+
+// 新增租户套餐
+export const createTenantPackage = (data: TenantPackageVO) => {
+ return request.post({ url: '/system/tenant-package/create', data })
+}
+
+// 修改租户套餐
+export const updateTenantPackage = (data: TenantPackageVO) => {
+ return request.put({ url: '/system/tenant-package/update', data })
+}
+
+// 删除租户套餐
+export const deleteTenantPackage = (id: number) => {
+ return request.delete({ url: '/system/tenant-package/delete?id=' + id })
+}
+// 获取租户套餐精简信息列表
+export const getTenantPackageList = () => {
+ return request.get({ url: '/system/tenant-package/simple-list' })
+}
diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts
new file mode 100644
index 0000000..beb6e51
--- /dev/null
+++ b/src/api/system/user/index.ts
@@ -0,0 +1,81 @@
+import request from '@/config/axios'
+
+export interface UserVO {
+ id: number
+ username: string
+ nickname: string
+ deptId: number
+ postIds: string[]
+ email: string
+ mobile: string
+ sex: number
+ avatar: string
+ loginIp: string
+ status: number
+ remark: string
+ loginDate: Date
+ createTime: Date
+}
+
+// 查询用户管理列表
+export const getUserPage = (params: PageParam) => {
+ return request.get({ url: '/system/user/page', params })
+}
+
+// 查询所有用户列表
+export const getAllUser = () => {
+ return request.get({ url: '/system/user/all' })
+}
+
+// 查询用户详情
+export const getUser = (id: number) => {
+ return request.get({ url: '/system/user/get?id=' + id })
+}
+
+// 新增用户
+export const createUser = (data: UserVO) => {
+ return request.post({ url: '/system/user/create', data })
+}
+
+// 修改用户
+export const updateUser = (data: UserVO) => {
+ return request.put({ url: '/system/user/update', data })
+}
+
+// 删除用户
+export const deleteUser = (id: number) => {
+ return request.delete({ url: '/system/user/delete?id=' + id })
+}
+
+// 导出用户
+export const exportUser = (params) => {
+ return request.download({ url: '/system/user/export', params })
+}
+
+// 下载用户导入模板
+export const importUserTemplate = () => {
+ return request.download({ url: '/system/user/get-import-template' })
+}
+
+// 用户密码重置
+export const resetUserPwd = (id: number, password: string) => {
+ const data = {
+ id,
+ password
+ }
+ return request.put({ url: '/system/user/update-password', data: data })
+}
+
+// 用户状态修改
+export const updateUserStatus = (id: number, status: number) => {
+ const data = {
+ id,
+ status
+ }
+ return request.put({ url: '/system/user/update-status', data: data })
+}
+
+// 获取用户精简信息列表
+export const getSimpleUserList = (): Promise => {
+ return request.get({ url: '/system/user/simple-list' })
+}
diff --git a/src/api/system/user/profile.ts b/src/api/system/user/profile.ts
new file mode 100644
index 0000000..1e80e85
--- /dev/null
+++ b/src/api/system/user/profile.ts
@@ -0,0 +1,65 @@
+import request from '@/config/axios'
+
+export interface ProfileVO {
+ id: number
+ username: string
+ nickname: string
+ dept: {
+ id: number
+ name: string
+ }
+ roles: {
+ id: number
+ name: string
+ }[]
+ posts: {
+ id: number
+ name: string
+ }[]
+ socialUsers: {
+ type: number
+ openid: string
+ }[]
+ email: string
+ mobile: string
+ sex: number
+ avatar: string
+ status: number
+ remark: string
+ loginIp: string
+ loginDate: Date
+ createTime: Date
+}
+
+export interface UserProfileUpdateReqVO {
+ nickname: string
+ email: string
+ mobile: string
+ sex: number
+}
+
+// 查询用户个人信息
+export const getUserProfile = () => {
+ return request.get({ url: '/system/user/profile/get' })
+}
+
+// 修改用户个人信息
+export const updateUserProfile = (data: UserProfileUpdateReqVO) => {
+ return request.put({ url: '/system/user/profile/update', data })
+}
+
+// 用户密码重置
+export const updateUserPassword = (oldPassword: string, newPassword: string) => {
+ return request.put({
+ url: '/system/user/profile/update-password',
+ data: {
+ oldPassword: oldPassword,
+ newPassword: newPassword
+ }
+ })
+}
+
+// 用户头像上传
+export const uploadAvatar = (data) => {
+ return request.upload({ url: '/system/user/profile/update-avatar', data: data })
+}
diff --git a/src/api/system/user/socialUser.ts b/src/api/system/user/socialUser.ts
new file mode 100644
index 0000000..79f4d40
--- /dev/null
+++ b/src/api/system/user/socialUser.ts
@@ -0,0 +1,31 @@
+import request from '@/config/axios'
+
+// 社交绑定,使用 code 授权码
+export const socialBind = (type, code, state) => {
+ return request.post({
+ url: '/system/social-user/bind',
+ data: {
+ type,
+ code,
+ state
+ }
+ })
+}
+
+// 取消社交绑定
+export const socialUnbind = (type, openid) => {
+ return request.delete({
+ url: '/system/social-user/unbind',
+ data: {
+ type,
+ openid
+ }
+ })
+}
+
+// 社交授权的跳转
+export const socialAuthRedirect = (type, redirectUri) => {
+ return request.get({
+ url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
+ })
+}
diff --git a/src/assets/ai/copy-style2.svg b/src/assets/ai/copy-style2.svg
new file mode 100644
index 0000000..2d56a87
--- /dev/null
+++ b/src/assets/ai/copy-style2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/ai/copy.svg b/src/assets/ai/copy.svg
new file mode 100644
index 0000000..f51f8d8
--- /dev/null
+++ b/src/assets/ai/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/ai/dall2.jpg b/src/assets/ai/dall2.jpg
new file mode 100644
index 0000000..c07374d
Binary files /dev/null and b/src/assets/ai/dall2.jpg differ
diff --git a/src/assets/ai/dall3.jpg b/src/assets/ai/dall3.jpg
new file mode 100644
index 0000000..7f45803
Binary files /dev/null and b/src/assets/ai/dall3.jpg differ
diff --git a/src/assets/ai/delete.svg b/src/assets/ai/delete.svg
new file mode 100644
index 0000000..d2ee18e
--- /dev/null
+++ b/src/assets/ai/delete.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/ai/gpt.svg b/src/assets/ai/gpt.svg
new file mode 100644
index 0000000..603e2e9
--- /dev/null
+++ b/src/assets/ai/gpt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/ai/qingxi.jpg b/src/assets/ai/qingxi.jpg
new file mode 100644
index 0000000..d76b815
Binary files /dev/null and b/src/assets/ai/qingxi.jpg differ
diff --git a/src/assets/ai/ziran.jpg b/src/assets/ai/ziran.jpg
new file mode 100644
index 0000000..6290724
Binary files /dev/null and b/src/assets/ai/ziran.jpg differ
diff --git a/src/assets/audio/response.mp3 b/src/assets/audio/response.mp3
new file mode 100644
index 0000000..b7cb777
Binary files /dev/null and b/src/assets/audio/response.mp3 differ
diff --git a/src/assets/imgs/avatar.gif b/src/assets/imgs/avatar.gif
new file mode 100644
index 0000000..fdbd32c
Binary files /dev/null and b/src/assets/imgs/avatar.gif differ
diff --git a/src/assets/imgs/avatar.jpg b/src/assets/imgs/avatar.jpg
new file mode 100644
index 0000000..d46a70a
Binary files /dev/null and b/src/assets/imgs/avatar.jpg differ
diff --git a/src/assets/imgs/diy/app-nav-bar-mp.png b/src/assets/imgs/diy/app-nav-bar-mp.png
new file mode 100644
index 0000000..c982804
Binary files /dev/null and b/src/assets/imgs/diy/app-nav-bar-mp.png differ
diff --git a/src/assets/imgs/diy/statusBar.png b/src/assets/imgs/diy/statusBar.png
new file mode 100644
index 0000000..b85562e
Binary files /dev/null and b/src/assets/imgs/diy/statusBar.png differ
diff --git a/src/assets/imgs/logo.png b/src/assets/imgs/logo.png
new file mode 100644
index 0000000..7e1043f
Binary files /dev/null and b/src/assets/imgs/logo.png differ
diff --git a/src/assets/imgs/profile.jpg b/src/assets/imgs/profile.jpg
new file mode 100644
index 0000000..e4bcf87
Binary files /dev/null and b/src/assets/imgs/profile.jpg differ
diff --git a/src/assets/imgs/wechat.png b/src/assets/imgs/wechat.png
new file mode 100644
index 0000000..6afc5e4
Binary files /dev/null and b/src/assets/imgs/wechat.png differ
diff --git a/src/assets/map/json/china.json b/src/assets/map/json/china.json
new file mode 100644
index 0000000..bbc0a83
--- /dev/null
+++ b/src/assets/map/json/china.json
@@ -0,0 +1,856 @@
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "id": "710000",
+ "properties": {
+ "id": "710000",
+ "cp": [121.509062, 24.044332],
+ "name": "台湾",
+ "childNum": 6
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@°Ü¯Û"],
+ [
+ "@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚänÜƤɊĂǀĆĴĤNJŨxĚĮǂƺòƌâÔ®ĮXŦţƸZûÐƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ¿@ăƑ¥ĘWǬÏĶŁâ"
+ ],
+ ["@@\\p|WoYG¿¥Ij@¢"],
+ ["@@
¡@V^RqBbAnTXeRz¤L«³I"],
+ ["@@ÆEEkWqë @"],
+ ["@@fced"],
+ ["@@¯ɜÄèaì¯ØǓIġĽ"],
+ ["@@çûĖëĄhòř "]
+ ],
+ "encodeOffsets": [
+ [[122886, 24033]],
+ [[123335, 22980]],
+ [[122375, 24193]],
+ [[122518, 24117]],
+ [[124427, 22618]],
+ [[124862, 26043]],
+ [[126259, 26318]],
+ [[127671, 26683]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "130000",
+ "properties": {
+ "id": "130000",
+ "cp": [114.502461, 38.045474],
+ "name": "河北",
+ "childNum": 3
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@o~Z]ªrºc_ħ²G¼s`jΟnüsÂłNX_M`ǽÓnUK
Ĝēs¤©yrý§uģcJe"],
+ ["@@U`Ts¿mÂ"],
+ [
+ "@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiñÖ`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒQgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝlNd®²Ğ džiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç°
N«úmH¯âDùyŜŲIÄuШD¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu
{Z}Ö@U´
ʚLg®¯Oı°Ãw ^VbÉsmA
ê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅna@³@ďyýIĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«P˵EFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅaVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MðoťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒ¾ùƀ^juųœKUFyƝ
īÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥ÍpDž¡KąÅkĝęěhq}HyÃ]¹ǧ£
Í÷¿qᵧg¤o^á¾ZE¤i`ij{nOl»WÝĔįhgF[¿¡ßkOüš_ūiDZàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"
+ ]
+ ],
+ "encodeOffsets": [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "140000",
+ "properties": {
+ "id": "140000",
+ "cp": [111.849248, 36.857014],
+ "name": "山西",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@ÞĩÒSra}ÁyWix±Üe´lèßÓǏokćiµVZģ¡coTS˹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£Pmc¸mQÝWďȥoÅîɡųAďä³aÏJ½¥PGąSM
EÅruµéYÓŌ_dĒCoȵ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]±cݯÑÃmQÍ~_apm
~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©bs^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs×¥ŅxÊdÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° ƬDj¬¸|CĞKqºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBÊTŸʂōĖĴŞȀÆÿȄlŤĒötνî¼ĨXh|ªM¤Ðz"
+ ],
+ "encodeOffsets": [[116874, 41716]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "150000",
+ "properties": {
+ "id": "150000",
+ "cp": [111.670801, 41.818311],
+ "name": "内蒙古",
+ "childNum": 2
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ [
+ "@@¯PqFB
|S³C|kñHdiÄ¥sʼnÅ
PóÑÑE^ÅPpy_YtShQ·aHwsOnʼnÃs©iqjUSiº]ïW«gW¡ARë¥_sgÁnUI«m
]jvV¼euhwqAaW_µj
»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkŹ£k|e]olkVͼÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyxþp]ÉvïèvƀnÂĴÖ@V~Ĉv¦wĖtējyÄDXÄxGQuv_i¦aBçw˛wD©{tāmQ{EJ§KPśƘƿ¥@sCTÉ}ɃwƇy±gÑ}T[÷kÐ禫
SÒ¥¸ëBX½HáŵÀğtSÝÂa[ƣ°¯¦Pï¡]£ġÒk®G²èQ°óMq}EóƐÇ\\@áügQÍu¥FTÕ¿Jû]|mvāÎYua^WoÀa·ząÒot׶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjb£ĦS_éQZ_lwgOiýe`YYLq§IÁdz£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA}
×Wu©ÅaųijƳhB{·TQqÙIķËZđ©Yc|M¡
LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃOrÍdÆÍz]±
ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}w
VaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª
»E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈ
ŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėDžjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšDž_ÃĀɗ±ąijĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC£µsKC
GS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdʼn_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋDžFù^it«Č¯[hAi©á¥ÇĚ×l|¹y¯YȵƓñǙµïċĻ|Düȭ¶¡oŽäÕG\\ÄT¿Òõr¯LguÏYęRƩɷŌO\\İТæ^Ŋ IJȶȆbÜGĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľ]ėl¥ËĭûÁėéV©±ćn©ȇÍq¯½YÃÔʼnÉNÑÅÝy¹NqáʅDǡËñƁYÅy̱os§ȋµʽǘǏƬɱàưN¢ƔÊuľýľώȪƺɂļxZĈ}ÌʼnŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~ǼȳÐUfdIxÿ\\G zâɏÙOº·pqy£@qþ@Ǟ˽IBäƣzsÂZÁàĻdñ°ŕzéØűzșCìDȐĴĺf®Àľưø@ɜÖÞKĊŇƄ§͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФÔ¤ƌĞ̪Qʤ´¼mȠJˀƲÀɠmǐnǔĎȆÞǠN~ʢĜ¶ƌĆĘźʆȬ˪ĚĒ¸ĞGȖƴƀj`ĢçĶāàŃºēĢĖćYÀŎüôQÐÂŎŞdžŞêƖoˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^ªƂ`ªt¾äƚêĦĀ¼ÐĔǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDÄ|ø˂˜ƮЬɚwɲFjĔ²Äw°dždÀÉ_ĸdîàŎjÊêTЪŌŜWÈ|tqĢUB~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\TתV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅyġLûŇV®ÄÈƀĎ°P|ªVVªj¬ĚÒêp¬E|ŬÂc|ÀtƐK f{ĘFĒƌXƲąo½Ę\\¥o}Ûu£çkX{uĩ«āíÓUŅßŢqŤ¥lyň[oi{¦LńðFȪȖĒL¿Ìf£K£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬
qehqsuH{¸kH¡
ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ġu¦öČ^â£ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\̀ʉÌÛM
Ā[bÓEn}¶Vc
ês"
+ ]
+ ],
+ "encodeOffsets": [[[129102, 52189]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "210000",
+ "properties": {
+ "id": "210000",
+ "cp": [123.429096, 41.796767],
+ "name": "辽宁",
+ "childNum": 16
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@L@@sa"],
+ ["@@MnNm"],
+ ["@@dc"],
+ ["@@eÀC@b"],
+ ["@@f
XwkbrÄ`qg"],
+ ["@@^jtWQ"],
+ ["@@~ Y]c"],
+ ["@@G`ĔN^_¿ZÃM"],
+ ["@@iX¶BY"],
+ ["@@YZ"],
+ ["@@L_{Epf"],
+ ["@@^WqCT\\"],
+ ["@@\\[§t|¤_"],
+ ["@@m`n_"],
+ ["@@Ïxnj{q_×^Giip"],
+ [
+ "@@@é^BntaÊU]x ¯ÄPIJ°hʙK³VÕ@Y~|EvĹsǦL^pòŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSȦªVÊÏÆZÆŶ®²^ÎyÅÎcPqńĚDMħĜŁHkçvV[ij¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľã¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRZk°IS§fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXmÛݺGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«zZf²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ÍOt¹·C¥GDrí@wÕKţëV·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćO
k^ģÁFıĉĥMoEqqZûěʼn³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EżĀdQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSha[¦´ÂghwmBШźhI|VV|p] ¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|Əlij¥ãn·±PmÍada CLǑkùó¡³Ï«QaċÏOÃ¥ÕđQȥċƭy³ÃA"
+ ]
+ ],
+ "encodeOffsets": [
+ [[123686, 41445]],
+ [[126019, 40435]],
+ [[124393, 40128]],
+ [[126117, 39963]],
+ [[125322, 40140]],
+ [[126686, 40700]],
+ [[126041, 40374]],
+ [[125584, 40168]],
+ [[125453, 40165]],
+ [[125362, 40214]],
+ [[125280, 40291]],
+ [[125774, 39997]],
+ [[125976, 40496]],
+ [[125822, 39993]],
+ [[125509, 40217]],
+ [[122731, 40949]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "220000",
+ "properties": { "id": "220000", "cp": [125.3245, 43.886841], "name": "吉林", "childNum": 1 },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@pä³PClFbbÍzwBGĭZÅi»lYċ²SgkÇ£^Sqd¯R
©é£¯S\\cZ¹iűƏCuƍÓXoR}M^o£
R}oªUF
uuXHlEÅÏ©¤ÛmTþ¤D²ÄufàÀXXȱAeyYw¬dvõ´KÊ£\\rµÄlidā]|DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúv𼤠N°ąO¥«³[éǡű_°Õ\\ÚÊĝþâőàerR¨JYlďQ[ ÏYëЧTGztnß¡gFkMāGÁ¤ia Éȹ`\\xs¬dĆkNnuNUuP@vRY¾\\¢
GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±HÑlĢ^¤¢OðævxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TѬè¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZвCH AxiukdGgetqmcÛ£Ozy¥cE}|
¾cZ
k¿uŐã[oxGikfeäT@
SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚij¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌDzÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀľ{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĀÖŠåưÎslyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`©GMehccďÏd©ÑW_ÏYƅ»
é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ýL¡ýqT^rme\\PpZZbyuybQefµ]UhĿDCmûvaÙNSkCwncćfv~
YÇG"
+ ],
+ "encodeOffsets": [[130196, 42528]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "230000",
+ "properties": {
+ "id": "230000",
+ "cp": [128.642464, 46.756967],
+ "name": "黑龙江",
+ "childNum": 2
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ [
+ "@@UµNÿ¥īèçHÍøƕ¶Lǽ|g¨|a¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝDZÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűѱĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tŽ¸ĻN_yX`biNKu
P£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇ
µf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ć
UÕ@Áijſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]}
AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËܲɶGxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîĪ¬|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨSfm ĊƀP̎ēz©ĊÄÕÊmgÇsJ¥ƔŊśæÎÑqv¿íUOµªÂnĦÁ_½ä@êí
£P}Ġ[@gġ}gɊ×ûÏWXá¢užƻÌsNͽƎÁ§čŐAēeL³àydl¦ĘVçŁpśdžĽĺſÊQíÜçÛġÔsĕ¬Ǹ¯YßċġHµ ¡eå`ļrĉŘóƢFìĎWøxÊkƈdƬv|I|·©NqńRŀ¤éeŊŀàŀU²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr°oú¬Ħ
ŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E 寰WKɱ_d_}}vyõu¬ï¹ÓU±½@gÏ¿rýDg
Cdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭNJË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYR
ŋ@{¤SJ}D Ûǖ֍]gr¡µŷjqWÛham³~S«Þ]"
+ ]
+ ],
+ "encodeOffsets": [[[134456, 44547]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "320000",
+ "properties": {
+ "id": "320000",
+ "cp": [119.767413, 33.041544],
+ "name": "江苏",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@cþÅPi`ZRu¥É\\]~°Y`µÓ^phÁbnÀşúòaĬºTÖŒbe¦¦{¸ZâćNp©Hr|^mjhSEb\\afv`sz^lkljÄtg¤D¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@Ę¹hågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtIJyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdfå
qm¿QûùŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yxcitğ®jű¢KOķCoy`å®VTa_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋÄÄÍīçÛɈǥ£ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^ÒogĉIµÛÅʹK
¤½phMü`oæŀ"
+ ],
+ "encodeOffsets": [[121740, 32276]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "330000",
+ "properties": {
+ "id": "330000",
+ "cp": [120.153576, 29.287459],
+ "name": "浙江",
+ "childNum": 45
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@E^dQ]K"],
+ ["@@jX^j"],
+ ["@@sfbU"],
+ ["@@qP\\xz[ck"],
+ ["@@R¢FX}°[s_"],
+ ["@@Cb\\}"],
+ ["@@e|v\\la{u"],
+ ["@@v~u}"],
+ ["@@QxÂF¯}"],
+ ["@@¹nvÞs¯o"],
+ ["@@rSkUEj"],
+ ["@@biZP"],
+ ["@@p[}INf"],
+ ["@@À¿"],
+ ["@@¹dnb
"],
+ ["@@rSBnR"],
+ ["@@g~h}"],
+ ["@@FlEk"],
+ ["@@OdPc"],
+ ["@@v[u\\"],
+ ["@@FjâL~wyoo~sµL\\"],
+ ["@@¬e¹aN"],
+ ["@@\\nÔ¡q]L³ë\\ÿ®QÖ"],
+ ["@@ÊA©[¬"],
+ ["@@Kxv"],
+ ["@@@hlIk]"],
+ ["@@pW{o||j"],
+ ["@@Md|_mC"],
+ ["@@¢
X£ÏylD¼XtH"],
+ ["@@hlÜ[LykAvyfw^E¤"],
+ ["@@fp¤MusR"],
+ ["@@®_ma~LÁ¬Z"],
+ ["@@iMxZ"],
+ ["@@ZcYd"],
+ ["@@Z~dOSo|A¿qZv"],
+ ["@@@`EN¡v"],
+ ["@@|TY{"],
+ ["@@@n@m"],
+ ["@@XWkCT\\"],
+ ["@@ºwZRkĕWO¢"],
+ ["@@X®±Grƪ\\ÔáXq{"],
+ ["@@ůTG°ĄLHm°UC"],
+ [
+ "@@¤aÜx~}dtüGæţŎíĔcŖpMËÐjē¢·ðĄÆMzjWKĎ¢Q¶À_ê_Bıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªÁŖHŗʼnåqûõi¨hÜ·ñt»¹ýv_[«¸mYL¯Qª
mĉÅdMgÇjcº«ę¬K´B«Âącoċ\\xKd¡gěŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹ģSĜkáƉÔĈZB{aMµfzʼnfåÂŧįƋǝÊĕġć£g³neą»@¦S®\\ßðChiqªĭiAuAµ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ}þÙ]¡FKwsPlU[}¦Rvn`hq¬\\nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@Pú
Øz©PCÈÚĒ±hŖl¬â~nm¨f©iļ«mntuÖZÜÄjL®EÌFª²iÊxبIÈhhst"
+ ],
+ ["@@o\\VzRZ}y"],
+ ["@@@°¡mÛGĕ¨§Ianá[ýƤjfæØLäGr"]
+ ],
+ "encodeOffsets": [
+ [[125592, 31553]],
+ [[125785, 31436]],
+ [[125729, 31431]],
+ [[125513, 31380]],
+ [[125223, 30438]],
+ [[125115, 30114]],
+ [[124815, 29155]],
+ [[124419, 28746]],
+ [[124095, 28635]],
+ [[124005, 28609]],
+ [[125000, 30713]],
+ [[125111, 30698]],
+ [[125078, 30682]],
+ [[125150, 30684]],
+ [[124014, 28103]],
+ [[125008, 31331]],
+ [[125411, 31468]],
+ [[125329, 31479]],
+ [[125626, 30916]],
+ [[125417, 30956]],
+ [[125254, 30976]],
+ [[125199, 30997]],
+ [[125095, 31058]],
+ [[125083, 30915]],
+ [[124885, 31015]],
+ [[125218, 30798]],
+ [[124867, 30838]],
+ [[124755, 30788]],
+ [[124802, 30809]],
+ [[125267, 30657]],
+ [[125218, 30578]],
+ [[125200, 30562]],
+ [[124968, 30474]],
+ [[125167, 30396]],
+ [[124955, 29879]],
+ [[124714, 29781]],
+ [[124762, 29462]],
+ [[124325, 28754]],
+ [[123990, 28459]],
+ [[125366, 31477]],
+ [[125115, 30363]],
+ [[125369, 31139]],
+ [[122495, 31878]],
+ [[125329, 30690]],
+ [[125192, 30787]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "340000",
+ "properties": { "id": "340000", "cp": [117.283042, 31.26119], "name": "安徽", "childNum": 3 },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@^iuLX^"],
+ ["@@e©Ehl"],
+ [
+ "@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊzÖgņtÀÁĂÆáhEz|WzqD¹°Eŧl{ævÜcA`¤C`|´qxIJkq^³³GšµbíZ
¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjCh߸iÝbÛªCC¿mRV§¢A|t^iĠGÀtÚsd]ĮÐDE¶zAb àiödK¡~H¸íæAǿYj{ď¿À½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp
Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mvˊBÜƶĊJhpc¹O]iŠ]¥ jtsggJǧw×jÉ©±EFËKiÛÃÕYv
sm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOjNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßF¶X®¿mw
RIÞfßoG³¾©uyHį{Ɓħ¯AFnuP
ÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEзÖdÖsƘѨ[Û^Xr¢¼§xvÄƵ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē
ßúLÃÃ_ÈÏ|]ÂÏFlg`ben¾¢pUh~ƴĖ¶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³
]u}f
ïQl{skloNdjäËzDvčoQďHI¦rbtHĔ~BmlRV_ħTLnñH±DL¼Lªl§Ťa¸ĚlK²\\RòvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóZ ň¶vHrľ\\ÊJuxAT|dmÀO[ÃÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálwKhïgA¢ųÆ©Þ¤OÈm°K´"
+ ]
+ ],
+ "encodeOffsets": [[[121722, 32278]], [[119475, 30423]], [[119168, 35472]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "350000",
+ "properties": {
+ "id": "350000",
+ "cp": [118.306239, 26.075302],
+ "name": "福建",
+ "childNum": 18
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@zht´]"],
+ ["@@aj^~ĆG©O"],
+ ["@@ed¨C}}i"],
+ ["@@@vPGsQ"],
+ ["@@sBzddW]Q"],
+ ["@@S¨Q{"],
+ ["@@NVucW"],
+ ["@@qptBAq"],
+ ["@@¸[mu"],
+ ["@@Q\\pD]_"],
+ ["@@jSwUadpF"],
+ ["@@eXª~"],
+ ["@@AjvFso"],
+ ["@@fT_Çí\\v|ba¦jZÆy°"],
+ ["@@IjJi"],
+ ["@@wJIx«¼AoNe{M"],
+ ["@@K±¡ÓČäeZ"],
+ [
+ "@@k¡¹Eh~c®wBkUplÀ¡I~Māe£bN¨gZý¡a±Öcp©PhI¢Qq
ÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBy
cpě
¼³Ăp·¤¥ohqqÚ¡ŅLs^á§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧSW¥Qûŗ½ùěcݧSùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ
^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņIJg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀEttĸr]ðM¤ĶIJHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AΦĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡«¢±¨Y®Ø¶^AvWĶGĒĢPlzfļtàAvWYãO_¤sD§ssČġ[kƤPX¦`¶®BBvĪjv©jx[L¥àï[F
¼ÍË»ğV`«Ip}ccÅĥZEãoP
´B@D¸m±z«Ƴ¿å³BRضWlâþäą`]Z£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLʼnËĥW[ÂGIÂNxij¤D¢îĎÎB§°_JGs¥E@
¤uć
PåcuMuw¢BI¿]zG¹guĮck\\_"
+ ]
+ ],
+ "encodeOffsets": [
+ [[123250, 27563]],
+ [[122541, 27268]],
+ [[123020, 27189]],
+ [[122916, 27125]],
+ [[122887, 26845]],
+ [[122808, 26762]],
+ [[122568, 25912]],
+ [[122778, 26197]],
+ [[122515, 26757]],
+ [[122816, 26587]],
+ [[123388, 27005]],
+ [[122450, 26243]],
+ [[122578, 25962]],
+ [[121255, 25103]],
+ [[120987, 24903]],
+ [[122339, 25802]],
+ [[121042, 25093]],
+ [[122439, 26024]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "360000",
+ "properties": {
+ "id": "360000",
+ "cp": [115.592151, 27.676493],
+ "name": "江西",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@ĢĨƐgļ¼ÂMD~ņªe^\\^§ý©j×cZبzdÒa¶lÒJìõ`oz÷@¤u޸´ôęöY¼HČƶajlÞƩ¥éZ[|h}^U ¥pĄžƦO lt¸Æ Q\\aÆ|CnÂOjtĚĤdÈF`¶@Ðë ¦ōÒ¨SêvHĢûXD®
QgÄWiØPÞìºr¤džNĠ¢lĄtZoCƞÔºCxrpĠV®Ê{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬
^DhÆyøJhØxĢĀLÊƠPżċĄwȠ̦G®ǒĤäTŠÆ~Ħw«|TF¡nc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀWEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýêPóqoě±_Êw§ÑªåƗā¼mĉŹ¿NQ
YBąrwģcÍ¥BŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluī
BÐGsĵıN£ï^ķqss¿FūūVÕ·´Ç{éĈýÿOER_đûIċâJhŅıNȩĕB
¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[×zkKN¶Õ»lčÓ{XSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyáV¼Ã~
`gsÙfIƋlę¹e|~udjuTlXµf`¿Jd[\\L²"
+ ],
+ "encodeOffsets": [[116689, 26234]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "370000",
+ "properties": {
+ "id": "370000",
+ "cp": [118.000923, 36.275807],
+ "name": "山东",
+ "childNum": 13
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@Xjd]{K"],
+ ["@@itbFHy"],
+ ["@@HlGk"],
+ ["@@TGy"],
+ ["@@K¬U"],
+ ["@@WdXc"],
+ ["@@PtOs"],
+ ["@@LnXhc"],
+ ["@@ppVu]Or"],
+ ["@@cdzAUa"],
+ ["@@udRhnCI"],
+ ["@@oIpR"],
+ [
+ "@@Ľč{fzƤîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆdž¢Îo¦cvKbgr°WhmZp L]LºcUÆnżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞEzVL®öØBkŖÝĐĖ¹ŧ̄±ÀbÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéõė ƿ¸lµ¾Z|ZWyFY¨Mf~C¿`à_RÇzwƌfQnny´INoƬèôº|sTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lC
MrDÇ]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ïW
uøCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxãČ×GDyäÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶GY§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGu
IZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~Ż¸YI] PumŝrƿIā[xedzL¯v¯s¬ÁY
~}
ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖR¬ŢƱùęOÑM³FÛWp["
+ ]
+ ],
+ "encodeOffsets": [
+ [[123806, 39303]],
+ [[123821, 39266]],
+ [[123742, 39256]],
+ [[123702, 39203]],
+ [[123649, 39066]],
+ [[123847, 38933]],
+ [[123580, 38839]],
+ [[123894, 37288]],
+ [[123043, 36624]],
+ [[123344, 38676]],
+ [[123522, 38857]],
+ [[123628, 38858]],
+ [[118260, 36742]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "410000",
+ "properties": {
+ "id": "410000",
+ "cp": [113.665412, 33.757975],
+ "name": "河南",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØx¶@«ŕŕQGYfa[şußǩđš_X³ijÕčC]kbc¥CS¯ëÍB©÷³Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr
|J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ
Ť]MÛfaQpě±ǽ¾]uFu÷nčįADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íijgfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvƶN¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsDzßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m"
+ ],
+ "encodeOffsets": [[118256, 37017]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "420000",
+ "properties": {
+ "id": "420000",
+ "cp": [113.298572, 30.684355],
+ "name": "湖北",
+ "childNum": 3
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@AB"],
+ ["@@lskt"],
+ [
+ "@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPL¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēIJ}Z³½Mŧïeyp·uk³DsѨL¶_Åuèw»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bprf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy
¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ ÑbŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fć
QÑÀQ{°fLÔ~wXgītêݾĺHd³fJd]HJ²
EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼
äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆĢ¶Ûo
d
ĔňТJqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdʧĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤"
+ ]
+ ],
+ "encodeOffsets": [[[113712, 34000]], [[115612, 30507]], [[113649, 34054]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "430000",
+ "properties": { "id": "430000", "cp": [111.782279, 28.09409], "name": "湖南", "childNum": 3 },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@nFTs"],
+ ["@@ßÅÆá½ÔXrCO
ËRïÿĩTooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚij¥ÏĢ¾edÄ©ĸG
àGhM¤Â_U}Ċ}¢pczfþg¤ÇòAVM"],
+ [
+ "@@©KA·³CQ±Á«³BUƑ¹AtćOwD]JiØSm¯b£ylX
HËѱH«C^õľAŧ¤É¥ïyuǙuA¢^{ÌC´¦ŷJ£^[ª¿ĕ~Ƈ
N
skóā¹¿ï]ă~÷O§@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąMąıuZmZcÒ IJĪ²SÊDŽŶ¨ƚCÖŎªQؼrŭ«}NÏürʬmjr@ĘrTW SsdHzƓ^ÇÂyUi¯DÅYlŹu{hT}mĉ¹¥ěDÿë©ıÓ[Oº£¥ótł¹MÕƪ`P
DiÛU¾ÅâìUñBÈ£ýhedy¡oċ`pfmjP~kZa
ZsÐd°wj§@Ĵ®w~^kÀÅKvNmX\\¨aŃqvíó¿F¤¡@ũÑVw}S@j}¾«pĂrªg àÀ²NJ¶¶Dô
K|^ª°LX¾ŴäPĪ±£EXd^¶IJÞÜ~u¸ǔMRhsR
e`ÄofIÔ\\Ø ićymnú¨cj ¢»GČìƊÿШXeĈĀ¾Oð Fi ¢|[jVxrIQ_EzAN¦zLU`cªxOTu RLÄ¢dVi`p˔vŎµªÉF~Ød¢ºgİàw¸Áb[¦Zb¦z½xBĖ@ªpºlS¸Ö\\Ĕ[N¥ˀmĎăJ\\ŀ`
ňSÚĖÁĐiOĜ«BxDõĚivSÌ}iùÜnкG{p°M´wÀÒzJ²ò¨ oTçüöoÛÿñőФùTz²CȆȸǎŪƑÐc°dPÎğ˶[Ƚu¯½WM¡ÉB·rínZÒ `¨GA¾\\pēXhÃRCüWGġu
Té§ŎÑ©ò³I±³}_EÃħg®ęisÁPDmÅ{b[RÅs·kPŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõ
ó·³vŝ£ø@pyö_ëIkѵbcѧy
×dYتiþ¨[]f]Ņ©C}ÁN»hĻħƏĩ"
+ ]
+ ],
+ "encodeOffsets": [[[115640, 30489]], [[112543, 27312]], [[116690, 26230]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "440000",
+ "properties": {
+ "id": "440000",
+ "cp": [113.280637, 23.125178],
+ "name": "广东",
+ "childNum": 24
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@QdAua"],
+ ["@@lxDLo"],
+ ["@@sbhNLo"],
+ ["@@Ă ā"],
+ ["@@WltO[["],
+ ["@@Kr]S"],
+ ["@@eI]y"],
+ ["@@I|Mym"],
+ ["@@Û³LS¼Y"],
+ ["@@nvºBëui©`¾"],
+ ["@@zdÛJw®"],
+ ["@@°
¯"],
+ ["@@a yAª¸ËJIxØ@ĀHAmÃV¡ofuo"],
+ ["@@sŗÃÔėAƁZÄ ~°ČPäh"],
+ ["@@¶ÝÌvmĞhıQ"],
+ ["@@HdSjĒ¢D}war
u«ZqadYM"],
+ ["@@el\\LqqU"],
+ ["@@~rMo\\"],
+ ["@@f^C"],
+ ["@@øPªoj÷ÍÝħXČx°Q¨ıXNv"],
+ ["@@gÇƳo[~tly"],
+ ["@@EÆC¿"],
+ ["@@OP"],
+ [
+ "@@wđógĝ[³¡VÙæÅöM̳¹pÁaËýý©D©ÜJŹƕģGą¤{Ùū
ÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGO|KPȏŹãŝIŕŭŕ@Óoo¿ē±ß}
ŭIJWÈCőâUâǙIğʼn©IijE×
Á³AówXJþ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊ̲iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƂªFbwEÀ©\\
¤]ŸI®¥D³|Ë]CöAŤ¦
æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºV¸@¾ªR²ĨN]´_eavSivc}p}Đ¼ƌkJÚe th_¸ ºx±ò_xN˲@ă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIǪ`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCI
özx¢PnÈñ @ĥÒ¦]ƞV}³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀyŧΡÈYDÑům}ý|m[węõĉZÅxUO}÷N¹³ĉo_qtăqwµŁYÙǝŕ¹tïÛUïmRCº
ĭ|µÕÊK½Rē ó]GªęAx»HO£|ām¡diď×YïYWªʼnOeÚtĐ«zđ¹T
āúEá²\\ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃOj YÇ÷Qěi"
+ ]
+ ],
+ "encodeOffsets": [
+ [[117381, 22988]],
+ [[116552, 22934]],
+ [[116790, 22617]],
+ [[116973, 22545]],
+ [[116444, 22536]],
+ [[116931, 22515]],
+ [[116496, 22490]],
+ [[116453, 22449]],
+ [[113301, 21439]],
+ [[118726, 21604]],
+ [[118709, 21486]],
+ [[113210, 20816]],
+ [[115482, 22082]],
+ [[113171, 21585]],
+ [[113199, 21590]],
+ [[115232, 22102]],
+ [[115739, 22373]],
+ [[115134, 22184]],
+ [[113056, 21175]],
+ [[119573, 21271]],
+ [[119957, 24020]],
+ [[115859, 22356]],
+ [[116561, 22649]],
+ [[116285, 22746]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "450000",
+ "properties": { "id": "450000", "cp": [108.320004, 22.82402], "name": "广西", "childNum": 2 },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@H TQ§A"],
+ [
+ "@@ĨʪLƊDÎĹĐCǦė¸zÚGn£¾rªŀÜt¬@ÖÚSx~øOŒŶÐÂæȠ\\ÈÜObĖw^oÞLf¬°bI lTØBÌF£Ć¹gñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H[~|aB£ÖsºdAĐzNÂðsÞÆ
Ĥªbab`ho¡³F«èVlo¤ÔRzpp®SĪº¨ÖºN
ijd`a¦¤F³ºDÎńĀìCĜº¦Ċ~nS|gźvZkCÆj°zVÈÁƔ]LÊFZg
čPkini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYIJvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucà÷gÕuíÙćĝ}FĻ¼Ĺ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[B
ÑÏGáşşƇe
ăYSsFQ}BwtYğÃ@~
CÍQ ×Wj˱rÉ¥oÏ ±«ÓÂ¥kwWűmcih³K~µh¯e]lµélEģEďsmÇŧē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡y¦CezYwa[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ±
dy¹T^dûÅÑŦ·PĻþÙ`K¦
¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺШc}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡
qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ¯TbÜÈk¡ĠvàhÂƄ¢J"
+ ]
+ ],
+ "encodeOffsets": [[[111707, 21520]], [[107619, 25527]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "460000",
+ "properties": { "id": "460000", "cp": [109.83119, 19.031971], "name": "海南", "childNum": 1 },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@¦Ŝil¢XƦƞòïè§ŞCêɕrŧůÇąĻõ·ĉ³œ̅kÇm@ċȧŧĥĽʉƅſȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀоjNðĀÒRZdžzÐŘΰH¨Ƣb²_Ġ "
+ ],
+ "encodeOffsets": [[112750, 20508]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "510000",
+ "properties": {
+ "id": "510000",
+ "cp": [104.065735, 30.659462],
+ "name": "四川",
+ "childNum": 2
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@LqKr"],
+ [
+ "@@[ĻéV£_ţġñpG réÏ·~ąSfy×Í·ºſƽiÍıƣıĻmHH}siaX@iÇ°ÁÃ×t«T¤JJJyJÈ`Ohߦ¡uËhIyCjmÿw
ZG
TiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhܸºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO½a[×]`ÃiüL¦LabbTÀåc}ÍhÆh®BHî|îºÉk¤Sy£ia©taį·Ɖ`ō¥UhO
ĝLk}©Fos´JmµlŁu
ønÑJWΪYÀïAetTŅÓGË«bo{ıwodƟ½OġܵxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌЧnÇ
¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒ
ćhG¬CMõƤąAvüVéŀ_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń
·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ
þTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§d
i´ezÝúØã]HqkIþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæQPJvÄz^Đ¹Æ¯fLà´GC²dtĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@Ŏk\\Ç´£YW}z@Z}öoû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖɪXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkijnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFΤ¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xäJÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEb
ee_v¡}ìęNJē}qÉåT¯µRs¡M@}ůaa¯wvƉåZw\\Z{åû^"
+ ]
+ ],
+ "encodeOffsets": [[[108815, 30935]], [[110617, 31811]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "520000",
+ "properties": {
+ "id": "520000",
+ "cp": [106.713478, 26.578343],
+ "name": "贵州",
+ "childNum": 3
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@G\\lY£in"],
+ ["@@q|mc¯tÏVSÎ"],
+ [
+ "@@hÑ£IsNgßHHªķÃh_¹¡ĝħń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaD
K°ºâ_£ùbµmÁÛĹM[q|hlaªāI}ѵ@swtwm^oµD鼊yVky°ÉûÛR
³e¥]RÕěħ[ƅåÛDpJiVÂF²I
»mN·£LbÒYbWsÀbpkiTZĄă¶Hq`
ĥ_J¯ae«KpÝx]aĕÛPÇȟ[ÁåŵÏő÷Pw}TÙ@Õs«ĿÛq©½m¤ÙH·yǥĘĉBµĨÕnđ]K©œáG级ÕßgǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊw¶øV¤w²Ĉ]ÊKx|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[Kv
JPhèhCrĂĚÂ^Êƌ wZLĠ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾E쬬ôxÌO¢ K³ŀºäYPVgŎ¦Ŋm޼VZwVlz¤
£Tl®ctĽÚó{GAÇge~Îd¿æaSba¥KKûj®_Ä^\\ؾbP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸
`V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢Æ
ÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Á뺰rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_Ã
ftQQgR·Ǔv}Ý×ĵ]µWc¤F²OĩųãW½¯K©
]{LóµCIµ±Mß¿h©āq¬o½~@i~TUxŪÒ¢@£ÀEîôruńb[§nWuMÆLl¿]x}ij½"
+ ]
+ ],
+ "encodeOffsets": [[[112158, 27383]], [[112105, 27474]], [[112095, 27476]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "530000",
+ "properties": {
+ "id": "530000",
+ "cp": [101.512251, 24.740609],
+ "name": "云南",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@[ùx½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅF¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hWæßUËs¡¦}teèƶStÇÇ}Fd£jĈZĆƤTč\\D}O÷£U§~ŃGåŃDĝ¸Tsd¶¶Bª¤u¢ŌĎo~t¾ÍŶÒtD¦ÚiôözØX²ghįh½Û±¯ÿm·zR¦Ɵ`ªŊÃh¢rOÔ´£Ym¼èêf¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈAÎô¶RäQ^Øu¬°_Èôc´¹ò¨P΢hlϦ´ĦÆ´sâÇŲPnÊD^¯°Upv}®BP̪jǬxSöwlfòªvqĸ|`HviļndĜĆhňem·FyÞqóSį¯³X_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CDhMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VظE^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fǸYi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM
~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\Ī¼Ä£UsȯLbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcIJx|ap̬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿S
rEFsÕūkóVǥʼniTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^ɱćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HA
àÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [jâôDôď[}z¿msSh¯{jïğl}šĹ[őgK©U·µË@¾m_~q¡f¹
ÅË^»f³ø}Q¡Ö˳gͱ^Ç
\\ëÃA_¿bWÏ[¶ƛé£F{īZgm@|kHǭƁć¦UĔť×ë}ǝeďºȡȘÏíBÉ£āĘPªij¶ʼnÿy©nď£G¹¡I±LÉĺÑdĉÜW¥}gÁ{aqÃ¥aıęÏZï`"
+ ],
+ "encodeOffsets": [[104636, 22969]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "540000",
+ "properties": { "id": "540000", "cp": [89.132212, 30.860361], "name": "西藏", "childNum": 1 },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@ÂhľxŖxÒVºÅâAĪÝȆµę¯Ňa±r_w~uSÕňqOj]ɄQ
£Z
UDûoY»©M[L¼qãË{VÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥cc¡ÙaSyFÖkuRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾƺcxwf]Y
´¦|QLn°adĊ
\\¨oǀÍŎ´ĩĀd`tÊQŞŕ|¨C^©Ĉ¦¦ÎJĊ{ëĎjª²rÐl`¼Ą[t|¦Stè¾PÜK¸dƄı]s¤î_v¹ÎVòŦj£Əsc¬_Ğ´|Ł¦Av¦w`ăaÝaa¢e¤ı²©ªSªÈMĄwÉØŔì@T¤Ę\\õª@þo´xA sÂtŎKzó´ÇĊµ¢r^nĊƬ×üG¢³ {âĊ]G~bÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀŻ¦¿ģŁéì±H
ãd«g[ؼēÀcīľġ¬cJµ
ÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIijÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k´ÓH@¹TZ¥¢į·ÌAЧ®Zc
v½Z¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»GeeƃīQ}J[ÒK
¬Ə|oėjġĠÑN¡ð¯EBčnwôɍėª²CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛęgſ¶ҍć`ĘąŌJÞä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷f±iMÝ@ĥ°G¬ÃM¥n£Øąğ¯ß§aëbéüÑOčk£{\\eµª×MÉfm«Ƒ{Å×Gŏǩãy³©WÑăû··Qòı}¯ãIéÕÂZ¨īès¶ZÈsæĔTŘvgÌsN@îá¾ó@ÙwU±ÉT廣TđWxq¹Zobs[ׯcĩvėŧ³BM|¹kªħ¥TzNYnÝßpęrñĠĉRS~½ěVVµõ«M££µBĉ¥áºae~³AuĐh`ܳç@BÛïĿa©|z²Ý¼D£àč²ŸIûI āóK¥}rÝ_Á´éMaň¨~ªSĈ½½KÙóĿeƃÆB·¬ën×W|Uº}LJrƳlŒµ`bÔ`QÐÓ@s¬ñIÍ@ûws¡åQÑßÁ`ŋĴ{ĪTÚÅTSijYo|Ç[ǾµMW¢ĭiÕØ¿@Mh
pÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸c
bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB\\qTGªÇĜçPoÿfñòą¦óQīÈáPābß{ZŗĸIæÅhnszÁCËìñÏ·ąĚÝUm®óL·ăUÈíoù´Êj°ŁŤ_uµ^°ìÇ@tĶĒ¡ÆM³Ģ«İĨÅ®ğRāðggheÆ¢zÊ©Ô\\°ÝĎz~ź¤PnMĪÖB£kn駿ćĆKĒ°¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴ
ÀBon|H@Êx¦BpŰŌ¿fµƌA¾zLjRx¶FkĄźRzŀ~¶[´HnªVƞuĒȨƎcƽÌm¸ÁÈM¦x͊ëÀxdžBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±üWƜǀRÂŶUńĖ[QhlLüAÜ\\qRĄ©"
+ ],
+ "encodeOffsets": [[90849, 37210]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "610000",
+ "properties": {
+ "id": "610000",
+ "cp": [108.948024, 34.263161],
+ "name": "陕西",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@p¢ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌdž¬stRÆdĠİwܸôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTΨÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sʼnǷY¹W@µ÷K
ãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅ
Y¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DدC´ʼnƒópģ}ċcEË
FéGU¥×K
§¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO
ÿEËߌĤNĔwƇÄńwĪo[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ßå¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇϳħZ«mJ
×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OĻ¹S|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi
^MicĎ°Â[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^ŵMThĠܤko¼Ŏìąǜh`[tRd²IJ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpIJÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍrqƶRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSj"
+ ],
+ "encodeOffsets": [[110234, 38774]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "620000",
+ "properties": {
+ "id": "620000",
+ "cp": [103.823557, 36.058039],
+ "name": "甘肃",
+ "childNum": 2
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@VuUv"],
+ [
+ "@@ũEĠtt~nkh`Q¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡ĨÒ¤úSHbjÎB°aZ¢KJO[|A£Dx}NìHUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZ
sKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©IJ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IʼnÈīoıÓÑAçÑ|«LÝcspīðÍg
të_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋI
aBDR¹ȥr¯GºßK¨jWkɱOqWij\\aQ\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz
³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğij@ ©O{¤ĸm¢E·®«|@Xwg]Aģ±¯XǁÑdzªcwQÚŝñsÕ³ÛV_ý¥\\ů¥©¾÷w©WÕÊĩhÿÖÁRo¸V¬âDb¨hûxÊ×nj~Zâg|XÁnßYoº§ZÅŘv[ĭÖʃuďxcVbnUSf
B¯³_TzºÎO©çMÑ~M³]µ^püµÄY~y@X~¤Z³[Èōl@®Å¼£QK·Di¡ByÿQ_´D¥hŗy^ĭÁZ]cIzýah¹MĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®Rʺ¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|Ì°ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b
ð÷®üszMzÖĖQdȨýv§Tè|ªHþa¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØE«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ʼnĖýZso§HÑiYw[ß\\X¦¥c]ÔƩÜ·«jÐqvÁ¦m^ċ±R¦ƈťĚgÀ»IïĨʗƮ°ƝĻþÍAƉſ±tÍEÕÞāNUÍ¡\\ſčåÒʻĘm ƭÌŹöʥëQ¤µÇcƕªoIýIÉ_mkl³ăƓ¦j¡YzŇi}Msßõīʋ }ÁVm_[n}eıUĥ¼ªI{ΧDÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńǾV¬ufÓÉCtÓ̻
¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂKq´ï¦ºĒDzņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|DŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿ĽĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY
tÁƤyAã˾J@ǝrý@¤
rz¸oP¹ɐÚyáHĀ[Jw
cVeȴÏ»ÈĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔĹŊũ~ËUă{ĻƹɁύȩþĽvĽƓÉ@ēĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶¨c~c¼īeXǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈôe]gx}|KK}xklL]c¦£fRtív¦PĤoH{tK"
+ ]
+ ],
+ "encodeOffsets": [[[108619, 36299]], [[108589, 36341]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "630000",
+ "properties": { "id": "630000", "cp": [96.778916, 35.623178], "name": "青海", "childNum": 2 },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@InJm"],
+ [
+ "@@CƽOŃĦsΰ~Ē³¦@@Ņi±è}ШƄ˹A³r_ĞǒNĪĐw¤^ŬĵªpĺSZgrpiƼĘÔ¨C|ÍJ©Ħ»®VIJ~f\\m `UnÂ~ʌĬàöNt~ňjy¢ZiƔ¥Ąk´nl`JÊJþ©pdƖ®È£¶ìRʦźõƮËnʼėæÑƀĎ[¢VÎĂMÖÝÎF²sƊƀÎBļýƞ¯ʘƭðħ¼Jh¿ŦęΌƇ¥²Q]Č¥nuÂÏri¸¬ƪÛ^Ó¦d¥[Wà
x\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJð̬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u
ºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéĽG©ã¤G
uȧþRcÕĕNyyûtøï»a½ē¿BMoį£Íj}éZËqbʍƬh¹ìÿÓAçãnIáI`ks£CGěUy×Cy
@¶ʡÊBnāzGơMē¼±O÷õJËĚăVĪũƆ£¯{ËL½ÌzżVR|ĠTbuvJvµhĻĖHAëáa
OÇðñęNw
œľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«`
ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉij¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į´FRådČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūЩÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qĉ¶³ÈyôōLÁstB®wn±ă¥HSòė£Së@לÊăxÇN©©T±ª£IJ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃIJc·ÛLO½sç¥Ts{ă\\_»kϱq©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿΧp[ĉc¯bKmR¥{³Ze^wx¹dƽŽôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ijŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňbĚ°ªiƶGQ¾²x¦PmlŜ[Ĥ¡ΞsĦÔÏâ\\ªÚŒU\\f
¢N²§x|¤§xĔsZPòʛ²SÐqF`ªVÞŜĶƨVZÌL`¢dŐIqr\\oäõF礻Ŷ×h¹]ClÙ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ´ÃbEÄlbʔC|CŮkƮ[ʼ¬ň´KŮÈΰÌĪ¶ƶlðļATUvdTGº̼ÔsÊDÔveOg"
+ ]
+ ],
+ "encodeOffsets": [[[105308, 37219]], [[95370, 40081]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "640000",
+ "properties": { "id": "640000", "cp": [106.278179, 37.26637], "name": "宁夏", "childNum": 2 },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ [
+ "@@KëÀęĞ«Oęȿȕı]ʼn¡åįÕÔ«ǴõƪĚQÐZhv K°öqÀÑS[ÃÖHƖčËnL]ûc
Ùß@ĝ¾}w»»oģF¹»kÌÏ·{zP§B¢íyÅt@@á]Yv_ssģ¼ißĻL¾ġsKD£¡N_
X¸}B~HaiÅf{«x»ge_bsKF¯¡IxmELcÿZ¤ĢÝsuBLùtYdmVtNmtOPhRw~bd
¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyEKzuÔ¡qQ¤xZÑ¢^ļöܾEp±âbÊÑÆ^fk¬
NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨IÆ¢¥dXªƅx¿]mtÏwßRĶX¢͎vÆzƂZò®ǢÌʆCrâºMÞzÆMÒÊÓŊZľr°Î®Ȉmª²ĈUªĚîøºĮ¦ÌĘk^FłĬhĚiĀĖ¾iİbjÕ"
+ ],
+ ["@@mfwěwMrŢªv@G"]
+ ],
+ "encodeOffsets": [[[109366, 40242]], [[108600, 36303]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "650000",
+ "properties": { "id": "650000", "cp": [85.617733, 40.792818], "name": "新疆", "childNum": 1 },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@QØĔ²X¨~ǘBºjʐßØvKƔX¨vĊO÷¢i@~cĝe_«E}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX
êÎf`C¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥OéÈ¿ÖğǤǷÂFÒzÉx[]Ĥĝœ¦EP}ûƥé¿İƷTėƫœŕƅƱB»Đ±ēO
¦E}`cȺrĦáŖuÒª«IJπdƺÏØZƴwʄ¤ĖGĐǂZĶèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLjì¥Βba¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»òmqóŘĝč˾ăC
ćāƿÝɽ©DZŅ¹đ¥³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕUv£ƁQïƵkŏ½ΉÃŭdzLŇʻ«ƭ\\lŭD{ʓDkaFÃÄa³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍöůʼnT¡c_ËKYƧUśĵÝU_©rETÏʜ±OñtYwē¨{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹Æ
ÑUwŕĽw[mG½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KϽĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³hgËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc
¤³Xù]DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®ƝvUm©³G\\}µĿQyŹlăµEwLJQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AijŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁ
č|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAйn~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷Aê[ÄäI®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉvidzHQµâFùÂœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍE˨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|IJXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàIJaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³àjĨoâȴLÊȮĐĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öøu®Ê¾ãØ"
+ ],
+ "encodeOffsets": [[88824, 50096]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "110000",
+ "properties": {
+ "id": "110000",
+ "cp": [116.405285, 39.904989],
+ "name": "北京",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@ĽOÁûtŷmiÍt_H»Ĩ±d`¹{bw
Yr³S]§§o¹qGtm_SŧoaFLgQN_dV@Zom_ć\\ßc±x¯oœRcfe
£o§ËgToÛJíĔóu
|wP¤XnO¢ÉŦ¯rNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwŚ¨Ud®bêņ¾jnŎGŃŶnzÚSeîĜZczî¾i]ÍQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¥A¨ÏѨj¯X\\¯MKpA³[H
īu}}"
+ ],
+ "encodeOffsets": [[120023, 41045]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "120000",
+ "properties": {
+ "id": "120000",
+ "cp": [117.190182, 39.125596],
+ "name": "天津",
+ "childNum": 1
+ },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ "@@ŬgX§Ü«E
¶F̬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥îakS¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZŏR§òoY×Ógc
ĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_ÈNW~zbĬvG²ZmDM~~"
+ ],
+ "encodeOffsets": [[120237, 41215]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "310000",
+ "properties": {
+ "id": "310000",
+ "cp": [121.472644, 31.231706],
+ "name": "上海",
+ "childNum": 6
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@ɧư¬EpƸÁxc"],
+ ["@@©ª"],
+ ["@@MA"],
+ ["@@QpİE§ÉC¾"],
+ ["@@bŝÕÕEȣÚƥêImɇǦèÜĠÚÃƌÃ͎ó"],
+ ["@@ǜûȬɋŭ×^sYɍDŋŽąñCG²«ªč@h_p¯A{oloY¬j@IJ`gQÚhr|ǀ^MIJvtbe´R¯Ô¬¨Yô¤r]ìƬį"]
+ ],
+ "encodeOffsets": [
+ [[124702, 32062]],
+ [[124547, 32200]],
+ [[124808, 31991]],
+ [[124726, 32110]],
+ [[124903, 32376]],
+ [[124438, 32149]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "500000",
+ "properties": {
+ "id": "500000",
+ "cp": [107.304962, 29.533155],
+ "name": "重庆",
+ "childNum": 2
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ [
+ "@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p
\\_ æüY|[YxƊæu°xb®
Űb@~¢NQt°¶Sæ Ê~rljĔëĚ¢~uf`faĔJåĊnÖ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈüD|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqʼn÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦
pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓeXsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»ê\\ÂoVnÓØͲ«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©Þűā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝ
Mwå}]|FmÏCawu_p¯sfÙgY
DHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LY
FDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬Øsμ£N"
+ ],
+ ["@@ifjN@s"]
+ ],
+ "encodeOffsets": [[[109628, 30765]], [[111725, 31320]]]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "810000",
+ "properties": {
+ "id": "810000",
+ "cp": [114.173355, 22.320048],
+ "name": "香港",
+ "childNum": 5
+ },
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ ["@@AlBk"],
+ ["@@mn"],
+ ["@@EpFo"],
+ ["@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX
´AI¹
[yDU]W`çwZkmc
MpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÈc"],
+ ["@@rMUwAS®e"]
+ ],
+ "encodeOffsets": [
+ [[117111, 23002]],
+ [[117072, 22876]],
+ [[117045, 22887]],
+ [[116975, 23082]],
+ [[116882, 22747]]
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "id": "820000",
+ "properties": { "id": "820000", "cp": [113.54909, 22.198951], "name": "澳门", "childNum": 1 },
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": ["@@kÊd°å§s"],
+ "encodeOffsets": [[116279, 22639]]
+ }
+ }
+ ],
+ "UTF8Encoding": true
+}
diff --git a/src/assets/svgs/403.svg b/src/assets/svgs/403.svg
new file mode 100644
index 0000000..4500596
--- /dev/null
+++ b/src/assets/svgs/403.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/404.svg b/src/assets/svgs/404.svg
new file mode 100644
index 0000000..5244d8d
--- /dev/null
+++ b/src/assets/svgs/404.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/500.svg b/src/assets/svgs/500.svg
new file mode 100644
index 0000000..9c02092
--- /dev/null
+++ b/src/assets/svgs/500.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/audit1.svg b/src/assets/svgs/audit1.svg
new file mode 100644
index 0000000..5908c13
--- /dev/null
+++ b/src/assets/svgs/audit1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/audit2.svg b/src/assets/svgs/audit2.svg
new file mode 100644
index 0000000..06aa09d
--- /dev/null
+++ b/src/assets/svgs/audit2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/audit3.svg b/src/assets/svgs/audit3.svg
new file mode 100644
index 0000000..21fd5f6
--- /dev/null
+++ b/src/assets/svgs/audit3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/icon.svg b/src/assets/svgs/icon.svg
new file mode 100644
index 0000000..7024bec
--- /dev/null
+++ b/src/assets/svgs/icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/login-bg.svg b/src/assets/svgs/login-bg.svg
new file mode 100644
index 0000000..bbe06c1
--- /dev/null
+++ b/src/assets/svgs/login-bg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/login-box-bg.svg b/src/assets/svgs/login-box-bg.svg
new file mode 100644
index 0000000..ab10040
--- /dev/null
+++ b/src/assets/svgs/login-box-bg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/member_balance.svg b/src/assets/svgs/member_balance.svg
new file mode 100644
index 0000000..5395b23
--- /dev/null
+++ b/src/assets/svgs/member_balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/member_expenditure_balance.svg b/src/assets/svgs/member_expenditure_balance.svg
new file mode 100644
index 0000000..02d498c
--- /dev/null
+++ b/src/assets/svgs/member_expenditure_balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/member_level.svg b/src/assets/svgs/member_level.svg
new file mode 100644
index 0000000..cbcc686
--- /dev/null
+++ b/src/assets/svgs/member_level.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/member_point.svg b/src/assets/svgs/member_point.svg
new file mode 100644
index 0000000..b849ddb
--- /dev/null
+++ b/src/assets/svgs/member_point.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/member_recharge_balance.svg b/src/assets/svgs/member_recharge_balance.svg
new file mode 100644
index 0000000..7519bb2
--- /dev/null
+++ b/src/assets/svgs/member_recharge_balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/message.svg b/src/assets/svgs/message.svg
new file mode 100644
index 0000000..14ca817
--- /dev/null
+++ b/src/assets/svgs/message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/money.svg b/src/assets/svgs/money.svg
new file mode 100644
index 0000000..c1580de
--- /dev/null
+++ b/src/assets/svgs/money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/alipay_app.svg b/src/assets/svgs/pay/icon/alipay_app.svg
new file mode 100644
index 0000000..ebf1188
--- /dev/null
+++ b/src/assets/svgs/pay/icon/alipay_app.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/alipay_bar.svg b/src/assets/svgs/pay/icon/alipay_bar.svg
new file mode 100644
index 0000000..eb1e1e8
--- /dev/null
+++ b/src/assets/svgs/pay/icon/alipay_bar.svg
@@ -0,0 +1,2 @@
+
diff --git a/src/assets/svgs/pay/icon/alipay_pc.svg b/src/assets/svgs/pay/icon/alipay_pc.svg
new file mode 100644
index 0000000..2a75277
--- /dev/null
+++ b/src/assets/svgs/pay/icon/alipay_pc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/alipay_qr.svg b/src/assets/svgs/pay/icon/alipay_qr.svg
new file mode 100644
index 0000000..4833750
--- /dev/null
+++ b/src/assets/svgs/pay/icon/alipay_qr.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/alipay_wap.svg b/src/assets/svgs/pay/icon/alipay_wap.svg
new file mode 100644
index 0000000..87075db
--- /dev/null
+++ b/src/assets/svgs/pay/icon/alipay_wap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/mock.svg b/src/assets/svgs/pay/icon/mock.svg
new file mode 100644
index 0000000..27b09ea
--- /dev/null
+++ b/src/assets/svgs/pay/icon/mock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/wx_app.svg b/src/assets/svgs/pay/icon/wx_app.svg
new file mode 100644
index 0000000..ad40b2a
--- /dev/null
+++ b/src/assets/svgs/pay/icon/wx_app.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/wx_bar.svg b/src/assets/svgs/pay/icon/wx_bar.svg
new file mode 100644
index 0000000..11292e6
--- /dev/null
+++ b/src/assets/svgs/pay/icon/wx_bar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/wx_lite.svg b/src/assets/svgs/pay/icon/wx_lite.svg
new file mode 100644
index 0000000..0c925cf
--- /dev/null
+++ b/src/assets/svgs/pay/icon/wx_lite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/wx_native.svg b/src/assets/svgs/pay/icon/wx_native.svg
new file mode 100644
index 0000000..bf3ba2b
--- /dev/null
+++ b/src/assets/svgs/pay/icon/wx_native.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/pay/icon/wx_pub.svg b/src/assets/svgs/pay/icon/wx_pub.svg
new file mode 100644
index 0000000..3a6d15b
--- /dev/null
+++ b/src/assets/svgs/pay/icon/wx_pub.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/peoples.svg b/src/assets/svgs/peoples.svg
new file mode 100644
index 0000000..aab852e
--- /dev/null
+++ b/src/assets/svgs/peoples.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/send.svg b/src/assets/svgs/send.svg
new file mode 100644
index 0000000..6fbc984
--- /dev/null
+++ b/src/assets/svgs/send.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svgs/shopping.svg b/src/assets/svgs/shopping.svg
new file mode 100644
index 0000000..f395bc7
--- /dev/null
+++ b/src/assets/svgs/shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/AppLinkInput/AppLinkSelectDialog.vue b/src/components/AppLinkInput/AppLinkSelectDialog.vue
new file mode 100644
index 0000000..63f1966
--- /dev/null
+++ b/src/components/AppLinkInput/AppLinkSelectDialog.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
diff --git a/src/components/AppLinkInput/data.ts b/src/components/AppLinkInput/data.ts
new file mode 100644
index 0000000..1916e08
--- /dev/null
+++ b/src/components/AppLinkInput/data.ts
@@ -0,0 +1,228 @@
+// APP 链接分组
+export interface AppLinkGroup {
+ // 分组名称
+ name: string
+ // 链接列表
+ links: AppLink[]
+}
+// APP 链接
+export interface AppLink {
+ // 链接名称
+ name: string
+ // 链接地址
+ path: string
+ // 链接的类型
+ type?: APP_LINK_TYPE_ENUM
+}
+
+// APP 链接类型(需要特殊处理,例如商品详情)
+export const enum APP_LINK_TYPE_ENUM {
+ // 拼团活动
+ ACTIVITY_COMBINATION,
+ // 秒杀活动
+ ACTIVITY_SECKILL,
+ // 文章详情
+ ARTICLE_DETAIL,
+ // 优惠券详情
+ COUPON_DETAIL,
+ // 自定义页面详情
+ DIY_PAGE_DETAIL,
+ // 品类列表
+ PRODUCT_CATEGORY_LIST,
+ // 商品列表
+ PRODUCT_LIST,
+ // 商品详情
+ PRODUCT_DETAIL_NORMAL,
+ // 拼团商品详情
+ PRODUCT_DETAIL_COMBINATION,
+ // 秒杀商品详情
+ PRODUCT_DETAIL_SECKILL
+}
+
+// APP 链接列表(做一下持久化?)
+export const APP_LINK_GROUP_LIST = [
+ {
+ name: '商城',
+ links: [
+ {
+ name: '首页',
+ path: '/pages/index/index'
+ },
+ {
+ name: '商品分类',
+ path: '/pages/index/category',
+ type: APP_LINK_TYPE_ENUM.PRODUCT_CATEGORY_LIST
+ },
+ {
+ name: '购物车',
+ path: '/pages/index/cart'
+ },
+ {
+ name: '个人中心',
+ path: '/pages/index/user'
+ },
+ {
+ name: '商品搜索',
+ path: '/pages/index/search'
+ },
+ {
+ name: '自定义页面',
+ path: '/pages/index/page',
+ type: APP_LINK_TYPE_ENUM.DIY_PAGE_DETAIL
+ },
+ {
+ name: '客服',
+ path: '/pages/chat/index'
+ },
+ {
+ name: '系统设置',
+ path: '/pages/public/setting'
+ },
+ {
+ name: '常见问题',
+ path: '/pages/public/faq'
+ }
+ ]
+ },
+ {
+ name: '商品',
+ links: [
+ {
+ name: '商品列表',
+ path: '/pages/goods/list',
+ type: APP_LINK_TYPE_ENUM.PRODUCT_LIST
+ },
+ {
+ name: '商品详情',
+ path: '/pages/goods/index',
+ type: APP_LINK_TYPE_ENUM.PRODUCT_DETAIL_NORMAL
+ },
+ {
+ name: '拼团商品详情',
+ path: '/pages/goods/groupon',
+ type: APP_LINK_TYPE_ENUM.PRODUCT_DETAIL_COMBINATION
+ },
+ {
+ name: '秒杀商品详情',
+ path: '/pages/goods/seckill',
+ type: APP_LINK_TYPE_ENUM.PRODUCT_DETAIL_SECKILL
+ }
+ ]
+ },
+ {
+ name: '营销活动',
+ links: [
+ {
+ name: '拼团订单',
+ path: '/pages/activity/groupon/order'
+ },
+ {
+ name: '营销商品',
+ path: '/pages/activity/index'
+ },
+ {
+ name: '拼团活动',
+ path: '/pages/activity/groupon/list',
+ type: APP_LINK_TYPE_ENUM.ACTIVITY_COMBINATION
+ },
+ {
+ name: '秒杀活动',
+ path: '/pages/activity/seckill/list',
+ type: APP_LINK_TYPE_ENUM.ACTIVITY_SECKILL
+ },
+ {
+ name: '签到中心',
+ path: '/pages/app/sign'
+ },
+ {
+ name: '优惠券中心',
+ path: '/pages/coupon/list'
+ },
+ {
+ name: '优惠券详情',
+ path: '/pages/coupon/detail',
+ type: APP_LINK_TYPE_ENUM.COUPON_DETAIL
+ },
+ {
+ name: '文章详情',
+ path: '/pages/public/richtext',
+ type: APP_LINK_TYPE_ENUM.ARTICLE_DETAIL
+ }
+ ]
+ },
+ {
+ name: '分销商城',
+ links: [
+ {
+ name: '分销中心',
+ path: '/pages/commission/index'
+ },
+ {
+ name: '推广商品',
+ path: '/pages/commission/goods'
+ },
+ {
+ name: '分销订单',
+ path: '/pages/commission/order'
+ },
+ {
+ name: '我的团队',
+ path: '/pages/commission/team'
+ }
+ ]
+ },
+ {
+ name: '支付',
+ links: [
+ {
+ name: '充值余额',
+ path: '/pages/pay/recharge'
+ },
+ {
+ name: '充值记录',
+ path: '/pages/pay/recharge-log'
+ }
+ ]
+ },
+ {
+ name: '用户中心',
+ links: [
+ {
+ name: '用户信息',
+ path: '/pages/user/info'
+ },
+ {
+ name: '用户订单',
+ path: '/pages/order/list'
+ },
+ {
+ name: '售后订单',
+ path: '/pages/order/aftersale/list'
+ },
+ {
+ name: '商品收藏',
+ path: '/pages/user/goods-collect'
+ },
+ {
+ name: '浏览记录',
+ path: '/pages/user/goods-log'
+ },
+ {
+ name: '地址管理',
+ path: '/pages/user/address/list'
+ },
+ {
+ name: '用户佣金',
+ path: '/pages/user/wallet/commission'
+ },
+ {
+ name: '用户余额',
+ path: '/pages/user/wallet/money'
+ },
+ {
+ name: '用户积分',
+ path: '/pages/user/wallet/score'
+ }
+ ]
+ }
+] as AppLinkGroup[]
diff --git a/src/components/AppLinkInput/index.vue b/src/components/AppLinkInput/index.vue
new file mode 100644
index 0000000..ff71382
--- /dev/null
+++ b/src/components/AppLinkInput/index.vue
@@ -0,0 +1,43 @@
+
+
+
+ 选择
+
+
+
+
+
diff --git a/src/components/Backtop/index.ts b/src/components/Backtop/index.ts
new file mode 100644
index 0000000..96de88d
--- /dev/null
+++ b/src/components/Backtop/index.ts
@@ -0,0 +1,3 @@
+import Backtop from './src/Backtop.vue'
+
+export { Backtop }
diff --git a/src/components/Backtop/src/Backtop.vue b/src/components/Backtop/src/Backtop.vue
new file mode 100644
index 0000000..5d79f51
--- /dev/null
+++ b/src/components/Backtop/src/Backtop.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/src/components/Card/index.ts b/src/components/Card/index.ts
new file mode 100644
index 0000000..f4c0d86
--- /dev/null
+++ b/src/components/Card/index.ts
@@ -0,0 +1,3 @@
+import CardTitle from './src/CardTitle.vue'
+
+export { CardTitle }
diff --git a/src/components/Card/src/CardTitle.vue b/src/components/Card/src/CardTitle.vue
new file mode 100644
index 0000000..76a8356
--- /dev/null
+++ b/src/components/Card/src/CardTitle.vue
@@ -0,0 +1,37 @@
+
+
+
+ {{ title }}
+
+
+
diff --git a/src/components/ColorInput/index.vue b/src/components/ColorInput/index.vue
new file mode 100644
index 0000000..63ff73c
--- /dev/null
+++ b/src/components/ColorInput/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ConfigGlobal/index.ts b/src/components/ConfigGlobal/index.ts
new file mode 100644
index 0000000..dda2462
--- /dev/null
+++ b/src/components/ConfigGlobal/index.ts
@@ -0,0 +1,3 @@
+import ConfigGlobal from './src/ConfigGlobal.vue'
+
+export { ConfigGlobal }
diff --git a/src/components/ConfigGlobal/src/ConfigGlobal.vue b/src/components/ConfigGlobal/src/ConfigGlobal.vue
new file mode 100644
index 0000000..af543df
--- /dev/null
+++ b/src/components/ConfigGlobal/src/ConfigGlobal.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
diff --git a/src/components/ContentDetailWrap/index.ts b/src/components/ContentDetailWrap/index.ts
new file mode 100644
index 0000000..1871cac
--- /dev/null
+++ b/src/components/ContentDetailWrap/index.ts
@@ -0,0 +1,3 @@
+import ContentDetailWrap from './src/ContentDetailWrap.vue'
+
+export { ContentDetailWrap }
diff --git a/src/components/ContentDetailWrap/src/ContentDetailWrap.vue b/src/components/ContentDetailWrap/src/ContentDetailWrap.vue
new file mode 100644
index 0000000..a9eacc0
--- /dev/null
+++ b/src/components/ContentDetailWrap/src/ContentDetailWrap.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+ {{ t('common.back') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ContentWrap/index.ts b/src/components/ContentWrap/index.ts
new file mode 100644
index 0000000..8c22cc8
--- /dev/null
+++ b/src/components/ContentWrap/index.ts
@@ -0,0 +1,3 @@
+import ContentWrap from './src/ContentWrap.vue'
+
+export { ContentWrap }
diff --git a/src/components/ContentWrap/src/ContentWrap.vue b/src/components/ContentWrap/src/ContentWrap.vue
new file mode 100644
index 0000000..c75e4b7
--- /dev/null
+++ b/src/components/ContentWrap/src/ContentWrap.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
{{ title }}
+
+
+ {{ message }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/CountTo/index.ts b/src/components/CountTo/index.ts
new file mode 100644
index 0000000..2119f02
--- /dev/null
+++ b/src/components/CountTo/index.ts
@@ -0,0 +1,3 @@
+import CountTo from './src/CountTo.vue'
+
+export { CountTo }
diff --git a/src/components/CountTo/src/CountTo.vue b/src/components/CountTo/src/CountTo.vue
new file mode 100644
index 0000000..7a19bec
--- /dev/null
+++ b/src/components/CountTo/src/CountTo.vue
@@ -0,0 +1,182 @@
+
+
+
+
+ {{ displayValue }}
+
+
diff --git a/src/components/Crontab/index.ts b/src/components/Crontab/index.ts
new file mode 100644
index 0000000..6beeef8
--- /dev/null
+++ b/src/components/Crontab/index.ts
@@ -0,0 +1,2 @@
+import Crontab from './src/Crontab.vue'
+export { Crontab }
diff --git a/src/components/Crontab/src/Crontab.vue b/src/components/Crontab/src/Crontab.vue
new file mode 100644
index 0000000..0914bb7
--- /dev/null
+++ b/src/components/Crontab/src/Crontab.vue
@@ -0,0 +1,1015 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
秒
+ {{ value_second }}
+
+
+
+
+
+ 任意值
+ 范围
+ 间隔
+ 指定
+
+
+
+
+ -
+
+
+
+
+ 秒开始,每
+
+ 秒执行一次
+
+
+
+
+
+
+
+
+
+
+
+
分钟
+ {{ value_minute }}
+
+
+
+
+
+ 任意值
+ 范围
+ 间隔
+ 指定
+
+
+
+
+ -
+
+
+
+
+ 分钟开始,每
+
+ 分钟执行一次
+
+
+
+
+
+
+
+
+
+
+
+
小时
+ {{ value_hour }}
+
+
+
+
+
+ 任意值
+ 范围
+ 间隔
+ 指定
+
+
+
+
+ -
+
+
+
+
+ 小时开始,每
+
+ 小时执行一次
+
+
+
+
+
+
+
+
+
+
+
+
日
+ {{ value_day }}
+
+
+
+
+
+ 任意值
+ 范围
+ 间隔
+ 指定
+ 本月最后一天
+ 不指定
+
+
+
+
+ -
+
+
+
+
+ 号开始,每
+
+ 天执行一次
+
+
+
+
+
+
+
+
+
+
+
+
月
+ {{ value_month }}
+
+
+
+
+
+ 任意值
+ 范围
+ 间隔
+ 指定
+
+
+
+
+ -
+
+
+
+
+ 月开始,每
+
+ 月执行一次
+
+
+
+
+
+
+
+
+
+
+
+
周
+ {{ value_week }}
+
+
+
+
+
+
+ 任意值
+ 范围
+ 间隔
+ 指定
+ 本月最后一周
+ 不指定
+
+
+
+
+
+
+ -
+
+
+
+
+
+ 第
+
+ 周的星期
+
+
+
+ 执行一次
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
年
+ {{ value_year }}
+
+
+
+
+
+ 忽略
+ 任意值
+ 范围
+ 间隔
+ 指定
+
+
+
+
+ -
+
+
+
+
+ 年开始,每
+
+ 年执行一次
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+ 确 认
+
+
+
+
+
diff --git a/src/components/Cropper/index.ts b/src/components/Cropper/index.ts
new file mode 100644
index 0000000..8fcc618
--- /dev/null
+++ b/src/components/Cropper/index.ts
@@ -0,0 +1,4 @@
+import CropperImage from './src/Cropper.vue'
+import CropperAvatar from './src/CropperAvatar.vue'
+
+export { CropperImage, CropperAvatar }
diff --git a/src/components/Cropper/src/CopperModal.vue b/src/components/Cropper/src/CopperModal.vue
new file mode 100644
index 0000000..27052b8
--- /dev/null
+++ b/src/components/Cropper/src/CopperModal.vue
@@ -0,0 +1,261 @@
+
+
+
+
+
+
+
diff --git a/src/components/Cropper/src/Cropper.vue b/src/components/Cropper/src/Cropper.vue
new file mode 100644
index 0000000..871aed8
--- /dev/null
+++ b/src/components/Cropper/src/Cropper.vue
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
diff --git a/src/components/Cropper/src/CropperAvatar.vue b/src/components/Cropper/src/CropperAvatar.vue
new file mode 100644
index 0000000..9464c2a
--- /dev/null
+++ b/src/components/Cropper/src/CropperAvatar.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+ {{ btnText ? btnText : t('cropper.selectImage') }}
+
+
+
+
+
+
diff --git a/src/components/Cropper/src/types.ts b/src/components/Cropper/src/types.ts
new file mode 100644
index 0000000..bcad3b4
--- /dev/null
+++ b/src/components/Cropper/src/types.ts
@@ -0,0 +1,8 @@
+import type Cropper from 'cropperjs'
+
+export interface CropendResult {
+ imgBase64: string
+ imgInfo: Cropper.Data
+}
+
+export type { Cropper }
diff --git a/src/components/Descriptions/index.ts b/src/components/Descriptions/index.ts
new file mode 100644
index 0000000..243bc39
--- /dev/null
+++ b/src/components/Descriptions/index.ts
@@ -0,0 +1,4 @@
+import Descriptions from './src/Descriptions.vue'
+import DescriptionsItemLabel from './src/DescriptionsItemLabel.vue'
+
+export { Descriptions, DescriptionsItemLabel }
diff --git a/src/components/Descriptions/src/Descriptions.vue b/src/components/Descriptions/src/Descriptions.vue
new file mode 100644
index 0000000..184d95c
--- /dev/null
+++ b/src/components/Descriptions/src/Descriptions.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{
+ data[item.field] !== null ? dayjs(data[item.field]).format(item.dateFormat) : ''
+ }}
+
+
+
+
+
+ {{
+ item.mappedField ? data[item.mappedField] : data[item.field]
+ }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Descriptions/src/DescriptionsItemLabel.vue b/src/components/Descriptions/src/DescriptionsItemLabel.vue
new file mode 100644
index 0000000..4efb2fb
--- /dev/null
+++ b/src/components/Descriptions/src/DescriptionsItemLabel.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+ {{ label }}
+
+
+
+
diff --git a/src/components/Dialog/index.ts b/src/components/Dialog/index.ts
new file mode 100644
index 0000000..1655dad
--- /dev/null
+++ b/src/components/Dialog/index.ts
@@ -0,0 +1,3 @@
+import Dialog from './src/Dialog.vue'
+
+export { Dialog }
diff --git a/src/components/Dialog/src/Dialog.vue b/src/components/Dialog/src/Dialog.vue
new file mode 100644
index 0000000..a1eb550
--- /dev/null
+++ b/src/components/Dialog/src/Dialog.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DictTag/index.ts b/src/components/DictTag/index.ts
new file mode 100644
index 0000000..4db2742
--- /dev/null
+++ b/src/components/DictTag/index.ts
@@ -0,0 +1,3 @@
+import DictTag from './src/DictTag.vue'
+
+export { DictTag }
diff --git a/src/components/DictTag/src/DictTag.vue b/src/components/DictTag/src/DictTag.vue
new file mode 100644
index 0000000..8835774
--- /dev/null
+++ b/src/components/DictTag/src/DictTag.vue
@@ -0,0 +1,90 @@
+
diff --git a/src/components/DiyEditor/components/ComponentContainer.vue b/src/components/DiyEditor/components/ComponentContainer.vue
new file mode 100644
index 0000000..4856722
--- /dev/null
+++ b/src/components/DiyEditor/components/ComponentContainer.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+ {{ component.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/ComponentContainerProperty.vue b/src/components/DiyEditor/components/ComponentContainerProperty.vue
new file mode 100644
index 0000000..25119a5
--- /dev/null
+++ b/src/components/DiyEditor/components/ComponentContainerProperty.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 纯色
+ 图片
+
+
+
+
+
+
+
+ 建议宽度 750px
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/ComponentLibrary.vue b/src/components/DiyEditor/components/ComponentLibrary.vue
new file mode 100644
index 0000000..fdb0b1d
--- /dev/null
+++ b/src/components/DiyEditor/components/ComponentLibrary.vue
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+
组件放置区域
+
+
+ {{ element.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/Carousel/config.ts b/src/components/DiyEditor/components/mobile/Carousel/config.ts
new file mode 100644
index 0000000..3e74a51
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Carousel/config.ts
@@ -0,0 +1,50 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 轮播图属性 */
+export interface CarouselProperty {
+ // 类型:默认 | 卡片
+ type: 'default' | 'card'
+ // 指示器样式:点 | 数字
+ indicator: 'dot' | 'number'
+ // 是否自动播放
+ autoplay: boolean
+ // 播放间隔
+ interval: number
+ // 轮播内容
+ items: CarouselItemProperty[]
+ // 组件样式
+ style: ComponentStyle
+}
+// 轮播内容属性
+export interface CarouselItemProperty {
+ // 类型:图片 | 视频
+ type: 'img' | 'video'
+ // 图片链接
+ imgUrl: string
+ // 视频链接
+ videoUrl: string
+ // 跳转链接
+ url: string
+}
+
+// 定义组件
+export const component = {
+ id: 'Carousel',
+ name: '轮播图',
+ icon: 'system-uicons:carousel',
+ property: {
+ type: 'default',
+ indicator: 'dot',
+ autoplay: false,
+ interval: 3,
+ items: [
+ { type: 'img', imgUrl: 'https://static.iocoder.cn/mall/banner-01.jpg', videoUrl: '' },
+ { type: 'img', imgUrl: 'https://static.iocoder.cn/mall/banner-02.jpg', videoUrl: '' }
+ ] as CarouselItemProperty[],
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/Carousel/index.vue b/src/components/DiyEditor/components/mobile/Carousel/index.vue
new file mode 100644
index 0000000..360b4a4
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Carousel/index.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
{{ currentIndex }} / {{ property.items.length }}
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/Carousel/property.vue b/src/components/DiyEditor/components/mobile/Carousel/property.vue
new file mode 100644
index 0000000..e11b032
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Carousel/property.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 小圆点
+ 数字
+
+
+
+
+
+
+
+ 单位:秒
+
+
+
+
+
+
+
+ 图片
+ 视频
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/CouponCard/component.tsx b/src/components/DiyEditor/components/mobile/CouponCard/component.tsx
new file mode 100644
index 0000000..689690b
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/CouponCard/component.tsx
@@ -0,0 +1,73 @@
+import * as CouponTemplateApi from '@/api/mall/promotion/coupon/couponTemplate'
+import { CouponTemplateValidityTypeEnum, PromotionDiscountTypeEnum } from '@/utils/constants'
+import { floatToFixed2 } from '@/utils'
+import { formatDate } from '@/utils/formatTime'
+import { object } from 'vue-types'
+
+// 优惠值
+export const CouponDiscount = defineComponent({
+ name: 'CouponDiscount',
+ props: {
+ coupon: object()
+ },
+ setup(props) {
+ const coupon = props.coupon as CouponTemplateApi.CouponTemplateVO
+ // 折扣
+ let value = coupon.discountPercent + ''
+ let suffix = ' 折'
+ // 满减
+ if (coupon.discountType === PromotionDiscountTypeEnum.PRICE.type) {
+ value = floatToFixed2(coupon.discountPrice)
+ suffix = ' 元'
+ }
+ return () => (
+
+ {value}
+ {suffix}
+
+ )
+ }
+})
+
+// 优惠描述
+export const CouponDiscountDesc = defineComponent({
+ name: 'CouponDiscountDesc',
+ props: {
+ coupon: object()
+ },
+ setup(props) {
+ const coupon = props.coupon as CouponTemplateApi.CouponTemplateVO
+ // 使用条件
+ const useCondition = coupon.usePrice > 0 ? `满${floatToFixed2(coupon.usePrice)}元,` : ''
+ // 优惠描述
+ const discountDesc =
+ coupon.discountType === PromotionDiscountTypeEnum.PRICE.type
+ ? `减${floatToFixed2(coupon.discountPrice)}元`
+ : `打${coupon.discountPercent}折`
+ return () => (
+
+ {useCondition}
+ {discountDesc}
+
+ )
+ }
+})
+
+// 有效期
+export const CouponValidTerm = defineComponent({
+ name: 'CouponValidTerm',
+ props: {
+ coupon: object()
+ },
+ setup(props) {
+ const coupon = props.coupon as CouponTemplateApi.CouponTemplateVO
+ const text =
+ coupon.validityType === CouponTemplateValidityTypeEnum.DATE.type
+ ? `有效期:${formatDate(coupon.validStartTime, 'YYYY-MM-DD')} 至 ${formatDate(
+ coupon.validEndTime,
+ 'YYYY-MM-DD'
+ )}`
+ : `领取后第 ${coupon.fixedStartTerm} - ${coupon.fixedEndTerm} 天内可用`
+ return () => {text}
+ }
+})
diff --git a/src/components/DiyEditor/components/mobile/CouponCard/config.ts b/src/components/DiyEditor/components/mobile/CouponCard/config.ts
new file mode 100644
index 0000000..304533d
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/CouponCard/config.ts
@@ -0,0 +1,47 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 商品卡片属性 */
+export interface CouponCardProperty {
+ // 列数
+ columns: number
+ // 背景图
+ bgImg: string
+ // 文字颜色
+ textColor: string
+ // 按钮样式
+ button: {
+ // 颜色
+ color: string
+ // 背景颜色
+ bgColor: string
+ }
+ // 间距
+ space: number
+ // 优惠券编号列表
+ couponIds: number[]
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'CouponCard',
+ name: '优惠券',
+ icon: 'ep:ticket',
+ property: {
+ columns: 1,
+ bgImg: '',
+ textColor: '#E9B461',
+ button: {
+ color: '#434343',
+ bgColor: ''
+ },
+ space: 0,
+ couponIds: [],
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/CouponCard/index.vue b/src/components/DiyEditor/components/mobile/CouponCard/index.vue
new file mode 100644
index 0000000..3e2302a
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/CouponCard/index.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
{{ coupon.name }}
+
+
+
+
+
+
+
+
{{ coupon.name }}
+
+ 立即领取
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/CouponCard/property.vue b/src/components/DiyEditor/components/mobile/CouponCard/property.vue
new file mode 100644
index 0000000..4f69000
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/CouponCard/property.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+ {{ coupon.name }}
+
+ 满{{ floatToFixed2(coupon.usePrice) }}元,
+
+ 减{{ floatToFixed2(coupon.discountPrice) }}元
+
+ 打{{ coupon.discountPercent }}折
+
+
+
+
+ 添加
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/Divider/config.ts b/src/components/DiyEditor/components/mobile/Divider/config.ts
new file mode 100644
index 0000000..9b55360
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Divider/config.ts
@@ -0,0 +1,29 @@
+import { DiyComponent } from '@/components/DiyEditor/util'
+
+/** 分割线属性 */
+export interface DividerProperty {
+ // 高度
+ height: number
+ // 线宽
+ lineWidth: number
+ // 边距类型
+ paddingType: 'none' | 'horizontal'
+ // 颜色
+ lineColor: string
+ // 类型
+ borderType: 'solid' | 'dashed' | 'dotted' | 'none'
+}
+
+// 定义组件
+export const component = {
+ id: 'Divider',
+ name: '分割线',
+ icon: 'tdesign:component-divider-vertical',
+ property: {
+ height: 30,
+ lineWidth: 1,
+ paddingType: 'none',
+ lineColor: '#dcdfe6',
+ borderType: 'solid'
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/Divider/index.vue b/src/components/DiyEditor/components/mobile/Divider/index.vue
new file mode 100644
index 0000000..f778504
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Divider/index.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/Divider/property.vue b/src/components/DiyEditor/components/mobile/Divider/property.vue
new file mode 100644
index 0000000..0c3cb0e
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Divider/property.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/FloatingActionButton/config.ts b/src/components/DiyEditor/components/mobile/FloatingActionButton/config.ts
new file mode 100644
index 0000000..fcf129f
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/FloatingActionButton/config.ts
@@ -0,0 +1,36 @@
+import { DiyComponent } from '@/components/DiyEditor/util'
+
+// 悬浮按钮属性
+export interface FloatingActionButtonProperty {
+ // 展开方向
+ direction: 'horizontal' | 'vertical'
+ // 是否显示文字
+ showText: boolean
+ // 按钮列表
+ list: FloatingActionButtonItemProperty[]
+}
+
+// 悬浮按钮项属性
+export interface FloatingActionButtonItemProperty {
+ // 图片地址
+ imgUrl: string
+ // 跳转连接
+ url: string
+ // 文字
+ text: string
+ // 文字颜色
+ textColor: string
+}
+
+// 定义组件
+export const component = {
+ id: 'FloatingActionButton',
+ name: '悬浮按钮',
+ icon: 'tabler:float-right',
+ position: 'fixed',
+ property: {
+ direction: 'vertical',
+ showText: true,
+ list: [{ textColor: '#fff' }]
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/FloatingActionButton/index.vue b/src/components/DiyEditor/components/mobile/FloatingActionButton/index.vue
new file mode 100644
index 0000000..19e42cb
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/FloatingActionButton/index.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/FloatingActionButton/property.vue b/src/components/DiyEditor/components/mobile/FloatingActionButton/property.vue
new file mode 100644
index 0000000..df459ff
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/FloatingActionButton/property.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 垂直
+ 水平
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/HotZone/components/HotZoneEditDialog/controller.ts b/src/components/DiyEditor/components/mobile/HotZone/components/HotZoneEditDialog/controller.ts
new file mode 100644
index 0000000..a7bd762
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/HotZone/components/HotZoneEditDialog/controller.ts
@@ -0,0 +1,143 @@
+import { HotZoneItemProperty } from '@/components/DiyEditor/components/mobile/HotZone/config'
+import { StyleValue } from 'vue'
+
+// 热区的最小宽高
+export const HOT_ZONE_MIN_SIZE = 100
+
+// 控制的类型
+export enum CONTROL_TYPE_ENUM {
+ LEFT,
+ TOP,
+ WIDTH,
+ HEIGHT
+}
+
+// 定义热区的控制点
+export interface ControlDot {
+ position: string
+ types: CONTROL_TYPE_ENUM[]
+ style: StyleValue
+}
+
+// 热区的8个控制点
+export const CONTROL_DOT_LIST = [
+ {
+ position: '左上角',
+ types: [
+ CONTROL_TYPE_ENUM.LEFT,
+ CONTROL_TYPE_ENUM.TOP,
+ CONTROL_TYPE_ENUM.WIDTH,
+ CONTROL_TYPE_ENUM.HEIGHT
+ ],
+ style: { left: '-5px', top: '-5px', cursor: 'nwse-resize' }
+ },
+ {
+ position: '上方中间',
+ types: [CONTROL_TYPE_ENUM.TOP, CONTROL_TYPE_ENUM.HEIGHT],
+ style: { left: '50%', top: '-5px', cursor: 'n-resize', transform: 'translateX(-50%)' }
+ },
+ {
+ position: '右上角',
+ types: [CONTROL_TYPE_ENUM.TOP, CONTROL_TYPE_ENUM.WIDTH, CONTROL_TYPE_ENUM.HEIGHT],
+ style: { right: '-5px', top: '-5px', cursor: 'nesw-resize' }
+ },
+ {
+ position: '右侧中间',
+ types: [CONTROL_TYPE_ENUM.WIDTH],
+ style: { right: '-5px', top: '50%', cursor: 'e-resize', transform: 'translateX(-50%)' }
+ },
+ {
+ position: '右下角',
+ types: [CONTROL_TYPE_ENUM.WIDTH, CONTROL_TYPE_ENUM.HEIGHT],
+ style: { right: '-5px', bottom: '-5px', cursor: 'nwse-resize' }
+ },
+ {
+ position: '下方中间',
+ types: [CONTROL_TYPE_ENUM.HEIGHT],
+ style: { left: '50%', bottom: '-5px', cursor: 's-resize', transform: 'translateX(-50%)' }
+ },
+ {
+ position: '左下角',
+ types: [CONTROL_TYPE_ENUM.LEFT, CONTROL_TYPE_ENUM.WIDTH, CONTROL_TYPE_ENUM.HEIGHT],
+ style: { left: '-5px', bottom: '-5px', cursor: 'nesw-resize' }
+ },
+ {
+ position: '左侧中间',
+ types: [CONTROL_TYPE_ENUM.LEFT, CONTROL_TYPE_ENUM.WIDTH],
+ style: { left: '-5px', top: '50%', cursor: 'w-resize', transform: 'translateX(-50%)' }
+ }
+] as ControlDot[]
+
+//region 热区的缩放
+// 热区的缩放比例
+export const HOT_ZONE_SCALE_RATE = 2
+// 缩小:缩回适合手机屏幕的大小
+export const zoomOut = (list?: HotZoneItemProperty[]) => {
+ return (
+ list?.map((hotZone) => ({
+ ...hotZone,
+ left: (hotZone.left /= HOT_ZONE_SCALE_RATE),
+ top: (hotZone.top /= HOT_ZONE_SCALE_RATE),
+ width: (hotZone.width /= HOT_ZONE_SCALE_RATE),
+ height: (hotZone.height /= HOT_ZONE_SCALE_RATE)
+ })) || []
+ )
+}
+// 放大:作用是为了方便在电脑屏幕上编辑
+export const zoomIn = (list?: HotZoneItemProperty[]) => {
+ return (
+ list?.map((hotZone) => ({
+ ...hotZone,
+ left: (hotZone.left *= HOT_ZONE_SCALE_RATE),
+ top: (hotZone.top *= HOT_ZONE_SCALE_RATE),
+ width: (hotZone.width *= HOT_ZONE_SCALE_RATE),
+ height: (hotZone.height *= HOT_ZONE_SCALE_RATE)
+ })) || []
+ )
+}
+//endregion
+
+/**
+ * 封装热区拖拽
+ *
+ * 注:为什么不使用vueuse的useDraggable。在本场景下,其使用方式比较复杂
+ * @param hotZone 热区
+ * @param downEvent 鼠标按下事件
+ * @param callback 回调函数
+ */
+export const useDraggable = (
+ hotZone: HotZoneItemProperty,
+ downEvent: MouseEvent,
+ callback: (
+ left: number,
+ top: number,
+ width: number,
+ height: number,
+ moveWidth: number,
+ moveHeight: number
+ ) => void
+) => {
+ // 阻止事件冒泡
+ downEvent.stopPropagation()
+
+ // 移动前的鼠标坐标
+ const { clientX: startX, clientY: startY } = downEvent
+ // 移动前的热区坐标、大小
+ const { left, top, width, height } = hotZone
+
+ // 监听鼠标移动
+ document.onmousemove = (e) => {
+ // 移动宽度
+ const moveWidth = e.clientX - startX
+ // 移动高度
+ const moveHeight = e.clientY - startY
+ // 移动回调
+ callback(left, top, width, height, moveWidth, moveHeight)
+ }
+
+ // 松开鼠标后,结束拖拽
+ document.onmouseup = () => {
+ document.onmousemove = null
+ document.onmouseup = null
+ }
+}
diff --git a/src/components/DiyEditor/components/mobile/HotZone/components/HotZoneEditDialog/index.vue b/src/components/DiyEditor/components/mobile/HotZone/components/HotZoneEditDialog/index.vue
new file mode 100644
index 0000000..3925057
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/HotZone/components/HotZoneEditDialog/index.vue
@@ -0,0 +1,236 @@
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/HotZone/config.ts b/src/components/DiyEditor/components/mobile/HotZone/config.ts
new file mode 100644
index 0000000..80ed855
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/HotZone/config.ts
@@ -0,0 +1,43 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 热区属性 */
+export interface HotZoneProperty {
+ // 图片地址
+ imgUrl: string
+ // 导航菜单列表
+ list: HotZoneItemProperty[]
+ // 组件样式
+ style: ComponentStyle
+}
+
+/** 热区项目属性 */
+export interface HotZoneItemProperty {
+ // 链接的名称
+ name: string
+ // 链接
+ url: string
+ // 宽
+ width: number
+ // 高
+ height: number
+ // 上
+ top: number
+ // 左
+ left: number
+}
+
+// 定义组件
+export const component = {
+ id: 'HotZone',
+ name: '热区',
+ icon: 'tabler:hand-click',
+ property: {
+ imgUrl: '',
+ list: [] as HotZoneItemProperty[],
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/HotZone/index.vue b/src/components/DiyEditor/components/mobile/HotZone/index.vue
new file mode 100644
index 0000000..3a9b842
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/HotZone/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/HotZone/property.vue b/src/components/DiyEditor/components/mobile/HotZone/property.vue
new file mode 100644
index 0000000..495cbdc
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/HotZone/property.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+ 推荐宽度 750
+
+
+
+
+
+
+ 设置热区
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/ImageBar/config.ts b/src/components/DiyEditor/components/mobile/ImageBar/config.ts
new file mode 100644
index 0000000..68edf72
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ImageBar/config.ts
@@ -0,0 +1,27 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 图片展示属性 */
+export interface ImageBarProperty {
+ // 图片链接
+ imgUrl: string
+ // 跳转链接
+ url: string
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'ImageBar',
+ name: '图片展示',
+ icon: 'ep:picture',
+ property: {
+ imgUrl: '',
+ url: '',
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/ImageBar/index.vue b/src/components/DiyEditor/components/mobile/ImageBar/index.vue
new file mode 100644
index 0000000..d9685b5
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ImageBar/index.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/ImageBar/property.vue b/src/components/DiyEditor/components/mobile/ImageBar/property.vue
new file mode 100644
index 0000000..d816361
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ImageBar/property.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+ 建议宽度750
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MagicCube/config.ts b/src/components/DiyEditor/components/mobile/MagicCube/config.ts
new file mode 100644
index 0000000..5e10ab5
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MagicCube/config.ts
@@ -0,0 +1,49 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 广告魔方属性 */
+export interface MagicCubeProperty {
+ // 上圆角
+ borderRadiusTop: number
+ // 下圆角
+ borderRadiusBottom: number
+ // 间隔
+ space: number
+ // 导航菜单列表
+ list: MagicCubeItemProperty[]
+ // 组件样式
+ style: ComponentStyle
+}
+
+/** 广告魔方项目属性 */
+export interface MagicCubeItemProperty {
+ // 图标链接
+ imgUrl: string
+ // 链接
+ url: string
+ // 宽
+ width: number
+ // 高
+ height: number
+ // 上
+ top: number
+ // 左
+ left: number
+}
+
+// 定义组件
+export const component = {
+ id: 'MagicCube',
+ name: '广告魔方',
+ icon: 'bi:columns',
+ property: {
+ borderRadiusTop: 0,
+ borderRadiusBottom: 0,
+ space: 0,
+ list: [],
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/MagicCube/index.vue b/src/components/DiyEditor/components/mobile/MagicCube/index.vue
new file mode 100644
index 0000000..48fb6c7
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MagicCube/index.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MagicCube/property.vue b/src/components/DiyEditor/components/mobile/MagicCube/property.vue
new file mode 100644
index 0000000..fe938e5
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MagicCube/property.vue
@@ -0,0 +1,76 @@
+
+
+
+
+ 魔方设置
+ 每格尺寸187 * 187
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MenuGrid/config.ts b/src/components/DiyEditor/components/mobile/MenuGrid/config.ts
new file mode 100644
index 0000000..9f91ceb
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuGrid/config.ts
@@ -0,0 +1,79 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+import { cloneDeep } from 'lodash-es'
+
+/** 宫格导航属性 */
+export interface MenuGridProperty {
+ // 列数
+ column: number
+ // 导航菜单列表
+ list: MenuGridItemProperty[]
+ // 组件样式
+ style: ComponentStyle
+}
+
+/** 宫格导航项目属性 */
+export interface MenuGridItemProperty {
+ // 图标链接
+ iconUrl: string
+ // 标题
+ title: string
+ // 标题颜色
+ titleColor: string
+ // 副标题
+ subtitle: string
+ // 副标题颜色
+ subtitleColor: string
+ // 链接
+ url: string
+ // 角标
+ badge: {
+ // 是否显示
+ show: boolean
+ // 角标文字
+ text: string
+ // 角标文字颜色
+ textColor: string
+ // 角标背景颜色
+ bgColor: string
+ }
+}
+
+export const EMPTY_MENU_GRID_ITEM_PROPERTY = {
+ title: '标题',
+ titleColor: '#333',
+ subtitle: '副标题',
+ subtitleColor: '#bbb',
+ badge: {
+ show: false,
+ textColor: '#fff',
+ bgColor: '#FF6000'
+ }
+} as MenuGridItemProperty
+
+// 定义组件
+export const component = {
+ id: 'MenuGrid',
+ name: '宫格导航',
+ icon: 'bi:grid-3x3-gap',
+ property: {
+ column: 3,
+ list: [cloneDeep(EMPTY_MENU_GRID_ITEM_PROPERTY)],
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8,
+ marginLeft: 8,
+ marginRight: 8,
+ padding: 8,
+ paddingTop: 8,
+ paddingRight: 8,
+ paddingBottom: 8,
+ paddingLeft: 8,
+ borderRadius: 8,
+ borderTopLeftRadius: 8,
+ borderTopRightRadius: 8,
+ borderBottomRightRadius: 8,
+ borderBottomLeftRadius: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/MenuGrid/index.vue b/src/components/DiyEditor/components/mobile/MenuGrid/index.vue
new file mode 100644
index 0000000..1c5ef1d
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuGrid/index.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+ {{ item.badge.text }}
+
+
+
+ {{ item.title }}
+
+
+ {{ item.subtitle }}
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MenuGrid/property.vue b/src/components/DiyEditor/components/mobile/MenuGrid/property.vue
new file mode 100644
index 0000000..bb944c9
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuGrid/property.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+ 3个
+ 4个
+
+
+
+
+
+
+
+
+ 建议尺寸:44 * 44
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MenuList/config.ts b/src/components/DiyEditor/components/mobile/MenuList/config.ts
new file mode 100644
index 0000000..f96fd0a
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuList/config.ts
@@ -0,0 +1,48 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+import { cloneDeep } from 'lodash-es'
+
+/** 列表导航属性 */
+export interface MenuListProperty {
+ // 导航菜单列表
+ list: MenuListItemProperty[]
+ // 组件样式
+ style: ComponentStyle
+}
+
+/** 列表导航项目属性 */
+export interface MenuListItemProperty {
+ // 图标链接
+ iconUrl: string
+ // 标题
+ title: string
+ // 标题颜色
+ titleColor: string
+ // 副标题
+ subtitle: string
+ // 副标题颜色
+ subtitleColor: string
+ // 链接
+ url: string
+}
+
+export const EMPTY_MENU_LIST_ITEM_PROPERTY = {
+ title: '标题',
+ titleColor: '#333',
+ subtitle: '副标题',
+ subtitleColor: '#bbb'
+}
+
+// 定义组件
+export const component = {
+ id: 'MenuList',
+ name: '列表导航',
+ icon: 'fa-solid:list',
+ property: {
+ list: [cloneDeep(EMPTY_MENU_LIST_ITEM_PROPERTY)],
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/MenuList/index.vue b/src/components/DiyEditor/components/mobile/MenuList/index.vue
new file mode 100644
index 0000000..9a56fd9
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuList/index.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+ {{ item.title }}
+
+
+ {{ item.subtitle }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MenuList/property.vue b/src/components/DiyEditor/components/mobile/MenuList/property.vue
new file mode 100644
index 0000000..a5fb460
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuList/property.vue
@@ -0,0 +1,45 @@
+
+
+ 菜单设置
+ 拖动左侧的小圆点可以调整顺序
+
+
+
+
+
+
+
+ 建议尺寸:44 * 44
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MenuSwiper/config.ts b/src/components/DiyEditor/components/mobile/MenuSwiper/config.ts
new file mode 100644
index 0000000..fe5f4e8
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuSwiper/config.ts
@@ -0,0 +1,66 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+import { cloneDeep } from 'lodash-es'
+
+/** 菜单导航属性 */
+export interface MenuSwiperProperty {
+ // 布局: 图标+文字 | 图标
+ layout: 'iconText' | 'icon'
+ // 行数
+ row: number
+ // 列数
+ column: number
+ // 导航菜单列表
+ list: MenuSwiperItemProperty[]
+ // 组件样式
+ style: ComponentStyle
+}
+/** 菜单导航项目属性 */
+export interface MenuSwiperItemProperty {
+ // 图标链接
+ iconUrl: string
+ // 标题
+ title: string
+ // 标题颜色
+ titleColor: string
+ // 链接
+ url: string
+ // 角标
+ badge: {
+ // 是否显示
+ show: boolean
+ // 角标文字
+ text: string
+ // 角标文字颜色
+ textColor: string
+ // 角标背景颜色
+ bgColor: string
+ }
+}
+
+export const EMPTY_MENU_SWIPER_ITEM_PROPERTY = {
+ title: '标题',
+ titleColor: '#333',
+ badge: {
+ show: false,
+ textColor: '#fff',
+ bgColor: '#FF6000'
+ }
+} as MenuSwiperItemProperty
+
+// 定义组件
+export const component = {
+ id: 'MenuSwiper',
+ name: '菜单导航',
+ icon: 'bi:grid-3x2-gap',
+ property: {
+ layout: 'iconText',
+ row: 1,
+ column: 3,
+ list: [cloneDeep(EMPTY_MENU_SWIPER_ITEM_PROPERTY)],
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/MenuSwiper/index.vue b/src/components/DiyEditor/components/mobile/MenuSwiper/index.vue
new file mode 100644
index 0000000..f8e2bbc
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuSwiper/index.vue
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+ {{ item.badge.text }}
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/MenuSwiper/property.vue b/src/components/DiyEditor/components/mobile/MenuSwiper/property.vue
new file mode 100644
index 0000000..fbae83c
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/MenuSwiper/property.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+ 图标+文字
+ 仅图标
+
+
+
+
+ 1行
+ 2行
+
+
+
+
+ 3列
+ 4列
+ 5列
+
+
+
+
+
+
+
+
+ 建议尺寸:98 * 98
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue b/src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue
new file mode 100644
index 0000000..2c3bd54
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+ 文字
+ 图片
+ 搜索框
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议尺寸 56*56
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/NavigationBar/config.ts b/src/components/DiyEditor/components/mobile/NavigationBar/config.ts
new file mode 100644
index 0000000..36612a3
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/NavigationBar/config.ts
@@ -0,0 +1,82 @@
+import { DiyComponent } from '@/components/DiyEditor/util'
+
+/** 顶部导航栏属性 */
+export interface NavigationBarProperty {
+ // 背景类型
+ bgType: 'color' | 'img'
+ // 背景颜色
+ bgColor: string
+ // 图片链接
+ bgImg: string
+ // 样式类型:默认 | 沉浸式
+ styleType: 'normal' | 'inner'
+ // 常驻显示
+ alwaysShow: boolean
+ // 小程序单元格列表
+ mpCells: NavigationBarCellProperty[]
+ // 其它平台单元格列表
+ otherCells: NavigationBarCellProperty[]
+ // 本地变量
+ _local: {
+ // 预览顶部导航(小程序)
+ previewMp: boolean
+ // 预览顶部导航(非小程序)
+ previewOther: boolean
+ }
+}
+
+/** 顶部导航栏 - 单元格 属性 */
+export interface NavigationBarCellProperty {
+ // 类型:文字 | 图片 | 搜索框
+ type: 'text' | 'image' | 'search'
+ // 宽度
+ width: number
+ // 高度
+ height: number
+ // 顶部位置
+ top: number
+ // 左侧位置
+ left: number
+ // 文字内容
+ text: string
+ // 文字颜色
+ textColor: string
+ // 图片地址
+ imgUrl: string
+ // 图片链接
+ url: string
+ // 搜索框:提示文字
+ placeholder: string
+ // 搜索框:边框圆角半径
+ borderRadius: number
+}
+
+// 定义组件
+export const component = {
+ id: 'NavigationBar',
+ name: '顶部导航栏',
+ icon: 'tabler:layout-navbar',
+ property: {
+ bgType: 'color',
+ bgColor: '#fff',
+ bgImg: '',
+ styleType: 'normal',
+ alwaysShow: true,
+ mpCells: [
+ {
+ type: 'text',
+ textColor: '#111111'
+ }
+ ],
+ otherCells: [
+ {
+ type: 'text',
+ textColor: '#111111'
+ }
+ ],
+ _local: {
+ previewMp: true,
+ previewOther: false
+ }
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/NavigationBar/index.vue b/src/components/DiyEditor/components/mobile/NavigationBar/index.vue
new file mode 100644
index 0000000..c684aee
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/NavigationBar/index.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
{{ cell.text }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/NavigationBar/property.vue b/src/components/DiyEditor/components/mobile/NavigationBar/property.vue
new file mode 100644
index 0000000..5b06772
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/NavigationBar/property.vue
@@ -0,0 +1,86 @@
+
+
+
+
+ 标准
+
+ 沉浸式
+
+
+
+
+
+ 关闭
+
+ 开启
+
+
+
+
+
+ 纯色
+ 图片
+
+
+
+
+
+
+
+
+
+
+
+ 内容(小程序)
+
+ 预览
+
+
+
+
+
+
+
+
+ 内容(非小程序)
+
+ 预览
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/NoticeBar/config.ts b/src/components/DiyEditor/components/mobile/NoticeBar/config.ts
new file mode 100644
index 0000000..b6b0860
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/NoticeBar/config.ts
@@ -0,0 +1,46 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 公告栏属性 */
+export interface NoticeBarProperty {
+ // 图标地址
+ iconUrl: string
+ // 公告内容列表
+ contents: NoticeContentProperty[]
+ // 背景颜色
+ backgroundColor: string
+ // 文字颜色
+ textColor: string
+ // 组件样式
+ style: ComponentStyle
+}
+
+/** 内容属性 */
+export interface NoticeContentProperty {
+ // 内容文字
+ text: string
+ // 链接地址
+ url: string
+}
+
+// 定义组件
+export const component = {
+ id: 'NoticeBar',
+ name: '公告栏',
+ icon: 'ep:bell',
+ property: {
+ iconUrl: 'http://mall.yudao.iocoder.cn/static/images/xinjian.png',
+ contents: [
+ {
+ text: '',
+ url: ''
+ }
+ ],
+ backgroundColor: '#fff',
+ textColor: '#333',
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/NoticeBar/index.vue b/src/components/DiyEditor/components/mobile/NoticeBar/index.vue
new file mode 100644
index 0000000..fce1afb
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/NoticeBar/index.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/NoticeBar/property.vue b/src/components/DiyEditor/components/mobile/NoticeBar/property.vue
new file mode 100644
index 0000000..a505011
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/NoticeBar/property.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+ 建议尺寸:24 * 24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/PageConfig/config.ts b/src/components/DiyEditor/components/mobile/PageConfig/config.ts
new file mode 100644
index 0000000..f8e45e4
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PageConfig/config.ts
@@ -0,0 +1,23 @@
+import { DiyComponent } from '@/components/DiyEditor/util'
+
+/** 页面设置属性 */
+export interface PageConfigProperty {
+ // 页面描述
+ description: string
+ // 页面背景颜色
+ backgroundColor: string
+ // 页面背景图片
+ backgroundImage: string
+}
+
+// 定义页面组件
+export const component = {
+ id: 'PageConfig',
+ name: '页面设置',
+ icon: 'ep:document',
+ property: {
+ description: '',
+ backgroundColor: '#f5f5f5',
+ backgroundImage: ''
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/PageConfig/property.vue b/src/components/DiyEditor/components/mobile/PageConfig/property.vue
new file mode 100644
index 0000000..278bc94
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PageConfig/property.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+ 建议宽度 750px
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/Popover/config.ts b/src/components/DiyEditor/components/mobile/Popover/config.ts
new file mode 100644
index 0000000..e814090
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Popover/config.ts
@@ -0,0 +1,26 @@
+import { DiyComponent } from '@/components/DiyEditor/util'
+
+/** 弹窗广告属性 */
+export interface PopoverProperty {
+ list: PopoverItemProperty[]
+}
+
+export interface PopoverItemProperty {
+ // 图片地址
+ imgUrl: string
+ // 跳转连接
+ url: string
+ // 显示类型:仅显示一次、每次启动都会显示
+ showType: 'once' | 'always'
+}
+
+// 定义组件
+export const component = {
+ id: 'Popover',
+ name: '弹窗广告',
+ icon: 'carbon:popup',
+ position: 'fixed',
+ property: {
+ list: [{ showType: 'once' }]
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/Popover/index.vue b/src/components/DiyEditor/components/mobile/Popover/index.vue
new file mode 100644
index 0000000..347599b
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Popover/index.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
{{ index + 1 }}
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/Popover/property.vue b/src/components/DiyEditor/components/mobile/Popover/property.vue
new file mode 100644
index 0000000..2dd4351
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/Popover/property.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 一次
+
+
+ 不限
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/ProductCard/config.ts b/src/components/DiyEditor/components/mobile/ProductCard/config.ts
new file mode 100644
index 0000000..735b6ba
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ProductCard/config.ts
@@ -0,0 +1,97 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 商品卡片属性 */
+export interface ProductCardProperty {
+ // 布局类型:单列大图 | 单列小图 | 双列
+ layoutType: 'oneColBigImg' | 'oneColSmallImg' | 'twoCol'
+ // 商品字段
+ fields: {
+ // 商品名称
+ name: ProductCardFieldProperty
+ // 商品简介
+ introduction: ProductCardFieldProperty
+ // 商品价格
+ price: ProductCardFieldProperty
+ // 商品市场价
+ marketPrice: ProductCardFieldProperty
+ // 商品销量
+ salesCount: ProductCardFieldProperty
+ // 商品库存
+ stock: ProductCardFieldProperty
+ }
+ // 角标
+ badge: {
+ // 是否显示
+ show: boolean
+ // 角标图片
+ imgUrl: string
+ }
+ // 按钮
+ btnBuy: {
+ // 类型:文字 | 图片
+ type: 'text' | 'img'
+ // 文字
+ text: string
+ // 文字按钮:背景渐变起始颜色
+ bgBeginColor: string
+ // 文字按钮:背景渐变结束颜色
+ bgEndColor: string
+ // 图片按钮:图片地址
+ imgUrl: string
+ }
+ // 上圆角
+ borderRadiusTop: number
+ // 下圆角
+ borderRadiusBottom: number
+ // 间距
+ space: number
+ // 商品编号列表
+ spuIds: number[]
+ // 组件样式
+ style: ComponentStyle
+}
+// 商品字段
+export interface ProductCardFieldProperty {
+ // 是否显示
+ show: boolean
+ // 颜色
+ color: string
+}
+
+// 定义组件
+export const component = {
+ id: 'ProductCard',
+ name: '商品卡片',
+ icon: 'fluent:text-column-two-left-24-filled',
+ property: {
+ layoutType: 'oneColBigImg',
+ fields: {
+ name: { show: true, color: '#000' },
+ introduction: { show: true, color: '#999' },
+ price: { show: true, color: '#ff3000' },
+ marketPrice: { show: true, color: '#c4c4c4' },
+ salesCount: { show: true, color: '#c4c4c4' },
+ stock: { show: false, color: '#c4c4c4' }
+ },
+ badge: { show: false, imgUrl: '' },
+ btnBuy: {
+ type: 'text',
+ text: '立即购买',
+ // todo: @owen 根据主题色配置
+ bgBeginColor: '#FF6000',
+ bgEndColor: '#FE832A',
+ imgUrl: ''
+ },
+ borderRadiusTop: 8,
+ borderRadiusBottom: 8,
+ space: 8,
+ spuIds: [],
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/ProductCard/index.vue b/src/components/DiyEditor/components/mobile/ProductCard/index.vue
new file mode 100644
index 0000000..f05d4fa
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ProductCard/index.vue
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ spu.name }}
+
+
+
+ {{ spu.introduction }}
+
+
+
+
+ ¥{{ spu.price }}
+
+
+ ¥{{ spu.marketPrice }}
+
+
+
+
+ 已售{{ (spu.salesCount || 0) + (spu.virtualSalesCount || 0) }}件
+
+
+
+ 库存{{ spu.stock || 0 }}
+
+
+
+
+
+
+
+ {{ property.btnBuy.text }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/ProductCard/property.vue b/src/components/DiyEditor/components/mobile/ProductCard/property.vue
new file mode 100644
index 0000000..110c8be
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ProductCard/property.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议尺寸:36 * 22
+
+
+
+
+
+
+ 文字
+ 图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议尺寸:56 * 56
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/ProductList/config.ts b/src/components/DiyEditor/components/mobile/ProductList/config.ts
new file mode 100644
index 0000000..1f16832
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ProductList/config.ts
@@ -0,0 +1,64 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 商品栏属性 */
+export interface ProductListProperty {
+ // 布局类型:双列 | 三列 | 水平滑动
+ layoutType: 'twoCol' | 'threeCol' | 'horizSwiper'
+ // 商品字段
+ fields: {
+ // 商品名称
+ name: ProductListFieldProperty
+ // 商品价格
+ price: ProductListFieldProperty
+ }
+ // 角标
+ badge: {
+ // 是否显示
+ show: boolean
+ // 角标图片
+ imgUrl: string
+ }
+ // 上圆角
+ borderRadiusTop: number
+ // 下圆角
+ borderRadiusBottom: number
+ // 间距
+ space: number
+ // 商品编号列表
+ spuIds: number[]
+ // 组件样式
+ style: ComponentStyle
+}
+// 商品字段
+export interface ProductListFieldProperty {
+ // 是否显示
+ show: boolean
+ // 颜色
+ color: string
+}
+
+// 定义组件
+export const component = {
+ id: 'ProductList',
+ name: '商品栏',
+ icon: 'fluent:text-column-two-24-filled',
+ property: {
+ layoutType: 'twoCol',
+ fields: {
+ name: { show: true, color: '#000' },
+ price: { show: true, color: '#ff3000' }
+ },
+ badge: { show: false, imgUrl: '' },
+ borderRadiusTop: 8,
+ borderRadiusBottom: 8,
+ space: 8,
+ spuIds: [],
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/ProductList/index.vue b/src/components/DiyEditor/components/mobile/ProductList/index.vue
new file mode 100644
index 0000000..3ba6367
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ProductList/index.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ spu.name }}
+
+
+
+
+ ¥{{ spu.price }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/ProductList/property.vue b/src/components/DiyEditor/components/mobile/ProductList/property.vue
new file mode 100644
index 0000000..894687c
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/ProductList/property.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议尺寸:36 * 22
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/PromotionArticle/config.ts b/src/components/DiyEditor/components/mobile/PromotionArticle/config.ts
new file mode 100644
index 0000000..c6270c2
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionArticle/config.ts
@@ -0,0 +1,25 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 营销文章属性 */
+export interface PromotionArticleProperty {
+ // 文章编号
+ id: number
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'PromotionArticle',
+ name: '营销文章',
+ icon: 'ph:article-medium',
+ property: {
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/PromotionArticle/index.vue b/src/components/DiyEditor/components/mobile/PromotionArticle/index.vue
new file mode 100644
index 0000000..e003b08
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionArticle/index.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/PromotionArticle/property.vue b/src/components/DiyEditor/components/mobile/PromotionArticle/property.vue
new file mode 100644
index 0000000..c3bcb21
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionArticle/property.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/PromotionCombination/config.ts b/src/components/DiyEditor/components/mobile/PromotionCombination/config.ts
new file mode 100644
index 0000000..0c7e9ff
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionCombination/config.ts
@@ -0,0 +1,64 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 拼团属性 */
+export interface PromotionCombinationProperty {
+ // 布局类型:单列 | 三列
+ layoutType: 'oneCol' | 'threeCol'
+ // 商品字段
+ fields: {
+ // 商品名称
+ name: PromotionCombinationFieldProperty
+ // 商品价格
+ price: PromotionCombinationFieldProperty
+ }
+ // 角标
+ badge: {
+ // 是否显示
+ show: boolean
+ // 角标图片
+ imgUrl: string
+ }
+ // 上圆角
+ borderRadiusTop: number
+ // 下圆角
+ borderRadiusBottom: number
+ // 间距
+ space: number
+ // 拼团活动编号
+ activityId: number
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 商品字段
+export interface PromotionCombinationFieldProperty {
+ // 是否显示
+ show: boolean
+ // 颜色
+ color: string
+}
+
+// 定义组件
+export const component = {
+ id: 'PromotionCombination',
+ name: '拼团',
+ icon: 'mdi:account-group',
+ property: {
+ layoutType: 'oneCol',
+ fields: {
+ name: { show: true, color: '#000' },
+ price: { show: true, color: '#ff3000' }
+ },
+ badge: { show: false, imgUrl: '' },
+ borderRadiusTop: 8,
+ borderRadiusBottom: 8,
+ space: 8,
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/PromotionCombination/index.vue b/src/components/DiyEditor/components/mobile/PromotionCombination/index.vue
new file mode 100644
index 0000000..41f1f9d
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionCombination/index.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ spu.name }}
+
+
+
+
+ ¥{{ fenToYuan(spu.combinationPrice || spu.price || 0) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/PromotionCombination/property.vue b/src/components/DiyEditor/components/mobile/PromotionCombination/property.vue
new file mode 100644
index 0000000..bfddb52
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionCombination/property.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议尺寸:36 * 22
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/PromotionSeckill/config.ts b/src/components/DiyEditor/components/mobile/PromotionSeckill/config.ts
new file mode 100644
index 0000000..800398b
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionSeckill/config.ts
@@ -0,0 +1,64 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 秒杀属性 */
+export interface PromotionSeckillProperty {
+ // 布局类型:单列 | 三列
+ layoutType: 'oneCol' | 'threeCol'
+ // 商品字段
+ fields: {
+ // 商品名称
+ name: PromotionSeckillFieldProperty
+ // 商品价格
+ price: PromotionSeckillFieldProperty
+ }
+ // 角标
+ badge: {
+ // 是否显示
+ show: boolean
+ // 角标图片
+ imgUrl: string
+ }
+ // 上圆角
+ borderRadiusTop: number
+ // 下圆角
+ borderRadiusBottom: number
+ // 间距
+ space: number
+ // 秒杀活动编号
+ activityId: number
+ // 组件样式
+ style: ComponentStyle
+}
+// 商品字段
+export interface PromotionSeckillFieldProperty {
+ // 是否显示
+ show: boolean
+ // 颜色
+ color: string
+}
+
+// 定义组件
+export const component = {
+ id: 'PromotionSeckill',
+ name: '秒杀',
+ icon: 'mdi:calendar-time',
+ property: {
+ activityId: undefined,
+ layoutType: 'oneCol',
+ fields: {
+ name: { show: true, color: '#000' },
+ price: { show: true, color: '#ff3000' }
+ },
+ badge: { show: false, imgUrl: '' },
+ borderRadiusTop: 8,
+ borderRadiusBottom: 8,
+ space: 8,
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue b/src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue
new file mode 100644
index 0000000..6360a04
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ spu.name }}
+
+
+
+
+ ¥{{ fenToYuan(spu.seckillPrice || spu.price || 0) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue b/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue
new file mode 100644
index 0000000..306ec9b
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议尺寸:36 * 22
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/SearchBar/config.ts b/src/components/DiyEditor/components/mobile/SearchBar/config.ts
new file mode 100644
index 0000000..ef47b27
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/SearchBar/config.ts
@@ -0,0 +1,43 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 搜索框属性 */
+export interface SearchProperty {
+ height: number // 搜索栏高度
+ showScan: boolean // 显示扫一扫
+ borderRadius: number // 框体样式
+ placeholder: string // 占位文字
+ placeholderPosition: PlaceholderPosition // 占位文字位置
+ backgroundColor: string // 框体颜色
+ textColor: string // 字体颜色
+ hotKeywords: string[] // 热词
+ style: ComponentStyle
+}
+
+// 文字位置
+export type PlaceholderPosition = 'left' | 'center'
+
+// 定义组件
+export const component = {
+ id: 'SearchBar',
+ name: '搜索框',
+ icon: 'ep:search',
+ property: {
+ height: 28,
+ showScan: false,
+ borderRadius: 0,
+ placeholder: '搜索商品',
+ placeholderPosition: 'left',
+ backgroundColor: 'rgb(238, 238, 238)',
+ textColor: 'rgb(150, 151, 153)',
+ hotKeywords: [],
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8,
+ paddingTop: 8,
+ paddingRight: 8,
+ paddingBottom: 8,
+ paddingLeft: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/SearchBar/index.vue b/src/components/DiyEditor/components/mobile/SearchBar/index.vue
new file mode 100644
index 0000000..9de261a
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/SearchBar/index.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+ {{ property.placeholder || '搜索商品' }}
+
+
+
+ {{ keyword }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/SearchBar/property.vue b/src/components/DiyEditor/components/mobile/SearchBar/property.vue
new file mode 100644
index 0000000..71f9493
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/SearchBar/property.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/TabBar/config.ts b/src/components/DiyEditor/components/mobile/TabBar/config.ts
new file mode 100644
index 0000000..88d706f
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/TabBar/config.ts
@@ -0,0 +1,97 @@
+import { DiyComponent } from '@/components/DiyEditor/util'
+
+/** 底部导航菜单属性 */
+export interface TabBarProperty {
+ // 选项列表
+ items: TabBarItemProperty[]
+ // 主题
+ theme: string
+ // 样式
+ style: TabBarStyle
+}
+
+// 选项属性
+export interface TabBarItemProperty {
+ // 标签文字
+ text: string
+ // 链接
+ url: string
+ // 默认图标链接
+ iconUrl: string
+ // 选中的图标链接
+ activeIconUrl: string
+}
+
+// 样式
+export interface TabBarStyle {
+ // 背景类型
+ bgType: 'color' | 'img'
+ // 背景颜色
+ bgColor: string
+ // 图片链接
+ bgImg: string
+ // 默认颜色
+ color: string
+ // 选中的颜色
+ activeColor: string
+}
+
+// 定义组件
+export const component = {
+ id: 'TabBar',
+ name: '底部导航',
+ icon: 'fluent:table-bottom-row-16-filled',
+ property: {
+ theme: 'red',
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ color: '#282828',
+ activeColor: '#fc4141'
+ },
+ items: [
+ {
+ text: '首页',
+ url: '/pages/index/index',
+ iconUrl: 'http://mall.yudao.iocoder.cn/static/images/1-001.png',
+ activeIconUrl: 'http://mall.yudao.iocoder.cn/static/images/1-002.png'
+ },
+ {
+ text: '分类',
+ url: '/pages/index/category?id=3',
+ iconUrl: 'http://mall.yudao.iocoder.cn/static/images/2-001.png',
+ activeIconUrl: 'http://mall.yudao.iocoder.cn/static/images/2-002.png'
+ },
+ {
+ text: '购物车',
+ url: '/pages/index/cart',
+ iconUrl: 'http://mall.yudao.iocoder.cn/static/images/3-001.png',
+ activeIconUrl: 'http://mall.yudao.iocoder.cn/static/images/3-002.png'
+ },
+ {
+ text: '我的',
+ url: '/pages/index/user',
+ iconUrl: 'http://mall.yudao.iocoder.cn/static/images/4-001.png',
+ activeIconUrl: 'http://mall.yudao.iocoder.cn/static/images/4-002.png'
+ }
+ ]
+ }
+} as DiyComponent
+
+export const THEME_LIST = [
+ { id: 'red', name: '中国红', icon: 'icon-park-twotone:theme', color: '#d10019' },
+ { id: 'orange', name: '桔橙', icon: 'icon-park-twotone:theme', color: '#f37b1d' },
+ { id: 'gold', name: '明黄', icon: 'icon-park-twotone:theme', color: '#fbbd08' },
+ { id: 'green', name: '橄榄绿', icon: 'icon-park-twotone:theme', color: '#8dc63f' },
+ { id: 'cyan', name: '天青', icon: 'icon-park-twotone:theme', color: '#1cbbb4' },
+ { id: 'blue', name: '海蓝', icon: 'icon-park-twotone:theme', color: '#0081ff' },
+ { id: 'purple', name: '姹紫', icon: 'icon-park-twotone:theme', color: '#6739b6' },
+ { id: 'brightRed', name: '嫣红', icon: 'icon-park-twotone:theme', color: '#e54d42' },
+ { id: 'forestGreen', name: '森绿', icon: 'icon-park-twotone:theme', color: '#39b54a' },
+ { id: 'mauve', name: '木槿', icon: 'icon-park-twotone:theme', color: '#9c26b0' },
+ { id: 'pink', name: '桃粉', icon: 'icon-park-twotone:theme', color: '#e03997' },
+ { id: 'brown', name: '棕褐', icon: 'icon-park-twotone:theme', color: '#a5673f' },
+ { id: 'grey', name: '玄灰', icon: 'icon-park-twotone:theme', color: '#8799a3' },
+ { id: 'gray', name: '草灰', icon: 'icon-park-twotone:theme', color: '#aaaaaa' },
+ { id: 'black', name: '墨黑', icon: 'icon-park-twotone:theme', color: '#333333' }
+]
diff --git a/src/components/DiyEditor/components/mobile/TabBar/index.vue b/src/components/DiyEditor/components/mobile/TabBar/index.vue
new file mode 100644
index 0000000..44ba43c
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/TabBar/index.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/TabBar/property.vue b/src/components/DiyEditor/components/mobile/TabBar/property.vue
new file mode 100644
index 0000000..b0f7be0
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/TabBar/property.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+ {{ theme.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 纯色
+ 图片
+
+
+
+
+
+
+
+ 建议尺寸 375 * 50
+
+
+
+ 图标设置
+ 拖动左上角的小圆点可对其排序, 图标建议尺寸 44*44
+
+
+
+
+
+ 未选中
+
+
+
+ 已选中
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/TitleBar/config.ts b/src/components/DiyEditor/components/mobile/TitleBar/config.ts
new file mode 100644
index 0000000..d9f0672
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/TitleBar/config.ts
@@ -0,0 +1,69 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 标题栏属性 */
+export interface TitleBarProperty {
+ // 背景图
+ bgImgUrl: string
+ // 偏移
+ marginLeft: number
+ // 显示位置
+ textAlign: 'left' | 'center'
+ // 主标题
+ title: string
+ // 副标题
+ description: string
+ // 标题大小
+ titleSize: number
+ // 描述大小
+ descriptionSize: number
+ // 标题粗细
+ titleWeight: number
+ // 描述粗细
+ descriptionWeight: number
+ // 标题颜色
+ titleColor: string
+ // 描述颜色
+ descriptionColor: string
+ // 查看更多
+ more: {
+ // 是否显示查看更多
+ show: false
+ // 样式选择
+ type: 'text' | 'icon' | 'all'
+ // 自定义文字
+ text: string
+ // 链接
+ url: string
+ }
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'TitleBar',
+ name: '标题栏',
+ icon: 'material-symbols:line-start',
+ property: {
+ title: '主标题',
+ description: '副标题',
+ titleSize: 16,
+ descriptionSize: 12,
+ titleWeight: 400,
+ textAlign: 'left',
+ descriptionWeight: 200,
+ titleColor: 'rgba(50, 50, 51, 10)',
+ descriptionColor: 'rgba(150, 151, 153, 10)',
+ more: {
+ //查看更多
+ show: false,
+ type: 'icon',
+ text: '查看更多',
+ url: ''
+ },
+ style: {
+ bgType: 'color',
+ bgColor: '#fff'
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/TitleBar/index.vue b/src/components/DiyEditor/components/mobile/TitleBar/index.vue
new file mode 100644
index 0000000..b75d224
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/TitleBar/index.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ {{ property.title }}
+
+
+
+ {{ property.description }}
+
+
+
+
+ {{ property.more.text }}
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/TitleBar/property.vue b/src/components/DiyEditor/components/mobile/TitleBar/property.vue
new file mode 100644
index 0000000..44d6bb6
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/TitleBar/property.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+ 建议尺寸 750*80
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 文字
+ 图标
+ 文字+图标
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserCard/config.ts b/src/components/DiyEditor/components/mobile/UserCard/config.ts
new file mode 100644
index 0000000..7b33776
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserCard/config.ts
@@ -0,0 +1,21 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 用户卡片属性 */
+export interface UserCardProperty {
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'UserCard',
+ name: '用户卡片',
+ icon: 'mdi:user-card-details',
+ property: {
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/UserCard/index.vue b/src/components/DiyEditor/components/mobile/UserCard/index.vue
new file mode 100644
index 0000000..ddaebc0
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserCard/index.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserCard/property.vue b/src/components/DiyEditor/components/mobile/UserCard/property.vue
new file mode 100644
index 0000000..43dfad2
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserCard/property.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserCoupon/config.ts b/src/components/DiyEditor/components/mobile/UserCoupon/config.ts
new file mode 100644
index 0000000..92eba9b
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserCoupon/config.ts
@@ -0,0 +1,23 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 用户卡券属性 */
+export interface UserCouponProperty {
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'UserCoupon',
+ name: '用户卡券',
+ icon: 'ep:ticket',
+ property: {
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/UserCoupon/index.vue b/src/components/DiyEditor/components/mobile/UserCoupon/index.vue
new file mode 100644
index 0000000..27ad310
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserCoupon/index.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserCoupon/property.vue b/src/components/DiyEditor/components/mobile/UserCoupon/property.vue
new file mode 100644
index 0000000..f902e04
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserCoupon/property.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserOrder/config.ts b/src/components/DiyEditor/components/mobile/UserOrder/config.ts
new file mode 100644
index 0000000..f9c5a6d
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserOrder/config.ts
@@ -0,0 +1,23 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 用户订单属性 */
+export interface UserOrderProperty {
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'UserOrder',
+ name: '用户订单',
+ icon: 'ep:list',
+ property: {
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/UserOrder/index.vue b/src/components/DiyEditor/components/mobile/UserOrder/index.vue
new file mode 100644
index 0000000..450ae54
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserOrder/index.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserOrder/property.vue b/src/components/DiyEditor/components/mobile/UserOrder/property.vue
new file mode 100644
index 0000000..42df741
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserOrder/property.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserWallet/config.ts b/src/components/DiyEditor/components/mobile/UserWallet/config.ts
new file mode 100644
index 0000000..4e0955f
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserWallet/config.ts
@@ -0,0 +1,23 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 用户资产属性 */
+export interface UserWalletProperty {
+ // 组件样式
+ style: ComponentStyle
+}
+
+// 定义组件
+export const component = {
+ id: 'UserWallet',
+ name: '用户资产',
+ icon: 'ep:wallet-filled',
+ property: {
+ style: {
+ bgType: 'color',
+ bgColor: '',
+ marginLeft: 8,
+ marginRight: 8,
+ marginBottom: 8
+ } as ComponentStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/UserWallet/index.vue b/src/components/DiyEditor/components/mobile/UserWallet/index.vue
new file mode 100644
index 0000000..0efc937
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserWallet/index.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/UserWallet/property.vue b/src/components/DiyEditor/components/mobile/UserWallet/property.vue
new file mode 100644
index 0000000..549367e
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/UserWallet/property.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/VideoPlayer/config.ts b/src/components/DiyEditor/components/mobile/VideoPlayer/config.ts
new file mode 100644
index 0000000..02f0374
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/VideoPlayer/config.ts
@@ -0,0 +1,37 @@
+import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util'
+
+/** 视频播放属性 */
+export interface VideoPlayerProperty {
+ // 视频链接
+ videoUrl: string
+ // 封面链接
+ posterUrl: string
+ // 是否自动播放
+ autoplay: boolean
+ // 组件样式
+ style: VideoPlayerStyle
+}
+
+// 视频播放样式
+export interface VideoPlayerStyle extends ComponentStyle {
+ // 视频高度
+ height: number
+}
+
+// 定义组件
+export const component = {
+ id: 'VideoPlayer',
+ name: '视频播放',
+ icon: 'ep:video-play',
+ property: {
+ videoUrl: '',
+ posterUrl: '',
+ autoplay: false,
+ style: {
+ bgType: 'color',
+ bgColor: '#fff',
+ marginBottom: 8,
+ height: 300
+ } as VideoPlayerStyle
+ }
+} as DiyComponent
diff --git a/src/components/DiyEditor/components/mobile/VideoPlayer/index.vue b/src/components/DiyEditor/components/mobile/VideoPlayer/index.vue
new file mode 100644
index 0000000..fa9a914
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/VideoPlayer/index.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/VideoPlayer/property.vue b/src/components/DiyEditor/components/mobile/VideoPlayer/property.vue
new file mode 100644
index 0000000..7598543
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/VideoPlayer/property.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议宽度750
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/components/mobile/index.ts b/src/components/DiyEditor/components/mobile/index.ts
new file mode 100644
index 0000000..c0dc67d
--- /dev/null
+++ b/src/components/DiyEditor/components/mobile/index.ts
@@ -0,0 +1,61 @@
+/*
+ * 组件注册
+ *
+ * 组件规范:
+ * 1. 每个子目录就是一个独立的组件,每个目录包括以下三个文件:
+ * 2. config.ts:组件配置,必选,用于定义组件、组件默认的属性、定义属性的类型
+ * 3. index.vue:组件展示,用于展示组件的渲染效果。可以不提供,如 Page(页面设置),只需要属性配置表单即可
+ * 4. property.vue:组件属性表单,用于配置组件,必选,
+ *
+ * 注:
+ * 组件ID以config.ts中配置的id为准,与组件目录的名称无关,但还是建议组件目录的名称与组件ID保持一致
+ */
+
+// 导入组件界面模块
+const viewModules: Record = import.meta.glob('./*/*.vue')
+// 导入配置模块
+const configModules: Record = import.meta.glob('./*/config.ts', { eager: true })
+
+// 界面模块
+const components = {}
+// 组件配置模块
+const componentConfigs = {}
+
+// 组件界面的类型
+type ViewType = 'index' | 'property'
+
+/**
+ * 注册组件的界面模块
+ *
+ * @param componentId 组件ID
+ * @param configPath 配置模块的文件路径
+ * @param viewType 组件界面的类型
+ */
+const registerComponentViewModule = (
+ componentId: string,
+ configPath: string,
+ viewType: ViewType
+) => {
+ const viewPath = configPath.replace('config.ts', `${viewType}.vue`)
+ const viewModule = viewModules[viewPath]
+ if (viewModule) {
+ // 定义异步组件
+ components[componentId] = defineAsyncComponent(viewModule)
+ }
+}
+
+// 注册
+Object.keys(configModules).forEach((modulePath: string) => {
+ const component = configModules[modulePath].component
+ const componentId = component?.id
+ if (componentId) {
+ // 注册组件
+ componentConfigs[componentId] = component
+ // 注册预览界面
+ registerComponentViewModule(componentId, modulePath, 'index')
+ // 注册属性配置表单
+ registerComponentViewModule(`${componentId}Property`, modulePath, 'property')
+ }
+})
+
+export { components, componentConfigs }
diff --git a/src/components/DiyEditor/index.vue b/src/components/DiyEditor/index.vue
new file mode 100644
index 0000000..700d32b
--- /dev/null
+++ b/src/components/DiyEditor/index.vue
@@ -0,0 +1,565 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ handleMoveComponent(index, direction)"
+ @copy="handleCopyComponent(index)"
+ @delete="handleDeleteComponent(index)"
+ @click="handleComponentSelected(element, index)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+ {{ pageConfigComponent.name }}
+
+
+
+
+ {{ component.name }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ selectedComponent?.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/DiyEditor/util.ts b/src/components/DiyEditor/util.ts
new file mode 100644
index 0000000..fac26e7
--- /dev/null
+++ b/src/components/DiyEditor/util.ts
@@ -0,0 +1,154 @@
+import { ref, Ref } from 'vue'
+import { PageConfigProperty } from '@/components/DiyEditor/components/mobile/PageConfig/config'
+import { NavigationBarProperty } from '@/components/DiyEditor/components/mobile/NavigationBar/config'
+import { TabBarProperty } from '@/components/DiyEditor/components/mobile/TabBar/config'
+
+// 页面装修组件
+export interface DiyComponent {
+ // 用于区分同一种组件的不同实例
+ uid?: number
+ // 组件唯一标识
+ id: string
+ // 组件名称
+ name: string
+ // 组件图标
+ icon: string
+ /*
+ 组件位置:
+ top: 固定于手机顶部,例如 顶部的导航栏
+ bottom: 固定于手机底部,例如 底部的菜单导航栏
+ center: 位于手机中心,每个组件占一行,顺序向下排列
+ 空:同center
+ fixed: 由组件自己决定位置,如弹窗位于手机中心、浮动按钮一般位于手机右下角
+ */
+ position?: 'top' | 'bottom' | 'center' | '' | 'fixed'
+ // 组件属性
+ property: T
+}
+
+// 页面装修组件库
+export interface DiyComponentLibrary {
+ // 组件库名称
+ name: string
+ // 是否展开
+ extended: boolean
+ // 组件列表
+ components: string[]
+}
+
+// 组件样式
+export interface ComponentStyle {
+ // 背景类型
+ bgType: 'color' | 'img'
+ // 背景颜色
+ bgColor: string
+ // 背景图片
+ bgImg: string
+ // 外边距
+ margin: number
+ marginTop: number
+ marginRight: number
+ marginBottom: number
+ marginLeft: number
+ // 内边距
+ padding: number
+ paddingTop: number
+ paddingRight: number
+ paddingBottom: number
+ paddingLeft: number
+ // 边框圆角
+ borderRadius: number
+ borderTopLeftRadius: number
+ borderTopRightRadius: number
+ borderBottomRightRadius: number
+ borderBottomLeftRadius: number
+}
+
+// 页面配置
+export interface PageConfig {
+ // 页面属性
+ page: PageConfigProperty
+ // 顶部导航栏属性
+ navigationBar: NavigationBarProperty
+ // 底部导航菜单属性
+ tabBar?: TabBarProperty
+ // 页面组件列表
+ components: PageComponent[]
+}
+// 页面组件,只保留组件ID,组件属性
+export interface PageComponent extends Pick, 'id' | 'property'> {}
+
+// 属性表单监听
+export function usePropertyForm(modelValue: T, emit: Function): { formData: Ref } {
+ const formData = ref()
+ // 监听属性数据变动
+ watch(
+ () => modelValue,
+ () => {
+ formData.value = modelValue
+ },
+ {
+ deep: true,
+ immediate: true
+ }
+ )
+ // 监听表单数据变动
+ watch(
+ () => formData.value,
+ () => {
+ emit('update:modelValue', formData.value)
+ },
+ {
+ deep: true
+ }
+ )
+
+ return { formData } as { formData: Ref }
+}
+
+// 页面组件库
+export const PAGE_LIBS = [
+ {
+ name: '基础组件',
+ extended: true,
+ components: [
+ 'SearchBar',
+ 'NoticeBar',
+ 'MenuSwiper',
+ 'MenuGrid',
+ 'MenuList',
+ 'Popover',
+ 'FloatingActionButton'
+ ]
+ },
+ {
+ name: '图文组件',
+ extended: true,
+ components: [
+ 'ImageBar',
+ 'Carousel',
+ 'TitleBar',
+ 'VideoPlayer',
+ 'Divider',
+ 'MagicCube',
+ 'HotZone'
+ ]
+ },
+ { name: '商品组件', extended: true, components: ['ProductCard', 'ProductList'] },
+ {
+ name: '用户组件',
+ extended: true,
+ components: ['UserCard', 'UserOrder', 'UserWallet', 'UserCoupon']
+ },
+ {
+ name: '营销组件',
+ extended: true,
+ components: [
+ 'PromotionCombination',
+ 'PromotionSeckill',
+ 'PromotionPoint',
+ 'CouponCard',
+ 'PromotionArticle'
+ ]
+ }
+] as DiyComponentLibrary[]
diff --git a/src/components/DocAlert/index.vue b/src/components/DocAlert/index.vue
new file mode 100644
index 0000000..0073266
--- /dev/null
+++ b/src/components/DocAlert/index.vue
@@ -0,0 +1,34 @@
+
+
+
+ {{ '【' + title + '】文档地址:' + url }}
+
+
+
+
+
diff --git a/src/components/Draggable/index.vue b/src/components/Draggable/index.vue
new file mode 100644
index 0000000..3d7906b
--- /dev/null
+++ b/src/components/Draggable/index.vue
@@ -0,0 +1,77 @@
+
+ 拖动左上角的小圆点可对其排序
+
+
+
+
+
+
+
+ 添加
+
+
+
+
+
+
+
diff --git a/src/components/Echart/index.ts b/src/components/Echart/index.ts
new file mode 100644
index 0000000..4822092
--- /dev/null
+++ b/src/components/Echart/index.ts
@@ -0,0 +1,3 @@
+import Echart from './src/Echart.vue'
+
+export { Echart }
diff --git a/src/components/Echart/src/Echart.vue b/src/components/Echart/src/Echart.vue
new file mode 100644
index 0000000..fd3342d
--- /dev/null
+++ b/src/components/Echart/src/Echart.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
diff --git a/src/components/Editor/index.ts b/src/components/Editor/index.ts
new file mode 100644
index 0000000..3fbf0a9
--- /dev/null
+++ b/src/components/Editor/index.ts
@@ -0,0 +1,8 @@
+import Editor from './src/Editor.vue'
+import { IDomEditor } from '@wangeditor/editor'
+
+export interface EditorExpose {
+ getEditorRef: () => Promise
+}
+
+export { Editor }
diff --git a/src/components/Editor/src/Editor.vue b/src/components/Editor/src/Editor.vue
new file mode 100644
index 0000000..8dd0645
--- /dev/null
+++ b/src/components/Editor/src/Editor.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Error/index.ts b/src/components/Error/index.ts
new file mode 100644
index 0000000..a52c6f9
--- /dev/null
+++ b/src/components/Error/index.ts
@@ -0,0 +1,3 @@
+import Error from './src/Error.vue'
+
+export { Error }
diff --git a/src/components/Error/src/Error.vue b/src/components/Error/src/Error.vue
new file mode 100644
index 0000000..3fd7a17
--- /dev/null
+++ b/src/components/Error/src/Error.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
{{ errorMap[type].message }}
+
+ {{ errorMap[type].buttonText }}
+
+
+
+
diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts
new file mode 100644
index 0000000..484c7a2
--- /dev/null
+++ b/src/components/Form/index.ts
@@ -0,0 +1,15 @@
+import Form from './src/Form.vue'
+import { ElForm } from 'element-plus'
+import { FormSchema, FormSetPropsType } from '@/types/form'
+
+export interface FormExpose {
+ setValues: (data: Recordable) => void
+ setProps: (props: Recordable) => void
+ delSchema: (field: string) => void
+ addSchema: (formSchema: FormSchema, index?: number) => void
+ setSchema: (schemaProps: FormSetPropsType[]) => void
+ formModel: Recordable
+ getElFormRef: () => ComponentRef
+}
+
+export { Form }
diff --git a/src/components/Form/src/Form.vue b/src/components/Form/src/Form.vue
new file mode 100644
index 0000000..3acc10a
--- /dev/null
+++ b/src/components/Form/src/Form.vue
@@ -0,0 +1,307 @@
+
+
+
diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts
new file mode 100644
index 0000000..5af9b40
--- /dev/null
+++ b/src/components/Form/src/componentMap.ts
@@ -0,0 +1,55 @@
+import type { Component } from 'vue'
+import {
+ ElCascader,
+ ElCheckboxGroup,
+ ElColorPicker,
+ ElDatePicker,
+ ElInput,
+ ElInputNumber,
+ ElRadioGroup,
+ ElRate,
+ ElSelect,
+ ElSelectV2,
+ ElTreeSelect,
+ ElSlider,
+ ElSwitch,
+ ElTimePicker,
+ ElTimeSelect,
+ ElTransfer,
+ ElAutocomplete,
+ ElDivider
+} from 'element-plus'
+import { InputPassword } from '@/components/InputPassword'
+import { Editor } from '@/components/Editor'
+import { UploadImg, UploadImgs, UploadFile } from '@/components/UploadFile'
+import { ComponentName } from '@/types/components'
+
+const componentMap: Recordable = {
+ Radio: ElRadioGroup,
+ Checkbox: ElCheckboxGroup,
+ CheckboxButton: ElCheckboxGroup,
+ Input: ElInput,
+ Autocomplete: ElAutocomplete,
+ InputNumber: ElInputNumber,
+ Select: ElSelect,
+ Cascader: ElCascader,
+ Switch: ElSwitch,
+ Slider: ElSlider,
+ TimePicker: ElTimePicker,
+ DatePicker: ElDatePicker,
+ Rate: ElRate,
+ ColorPicker: ElColorPicker,
+ Transfer: ElTransfer,
+ Divider: ElDivider,
+ TimeSelect: ElTimeSelect,
+ SelectV2: ElSelectV2,
+ TreeSelect: ElTreeSelect,
+ RadioButton: ElRadioGroup,
+ InputPassword: InputPassword,
+ Editor: Editor,
+ UploadImg: UploadImg,
+ UploadImgs: UploadImgs,
+ UploadFile: UploadFile
+}
+
+export { componentMap }
diff --git a/src/components/Form/src/components/useRenderCheckbox.tsx b/src/components/Form/src/components/useRenderCheckbox.tsx
new file mode 100644
index 0000000..e151839
--- /dev/null
+++ b/src/components/Form/src/components/useRenderCheckbox.tsx
@@ -0,0 +1,26 @@
+import { FormSchema } from '@/types/form'
+import { ElCheckbox, ElCheckboxButton } from 'element-plus'
+import { defineComponent } from 'vue'
+
+export const useRenderCheckbox = () => {
+ const renderCheckboxOptions = (item: FormSchema) => {
+ // 如果有别名,就取别名
+ const labelAlias = item?.componentProps?.optionsAlias?.labelField
+ const valueAlias = item?.componentProps?.optionsAlias?.valueField
+ const Com = (item.component === 'Checkbox' ? ElCheckbox : ElCheckboxButton) as ReturnType<
+ typeof defineComponent
+ >
+ return item?.componentProps?.options?.map((option) => {
+ const { ...other } = option
+ return (
+
+ {option[labelAlias || 'label']}
+
+ )
+ })
+ }
+
+ return {
+ renderCheckboxOptions
+ }
+}
diff --git a/src/components/Form/src/components/useRenderRadio.tsx b/src/components/Form/src/components/useRenderRadio.tsx
new file mode 100644
index 0000000..d1005ca
--- /dev/null
+++ b/src/components/Form/src/components/useRenderRadio.tsx
@@ -0,0 +1,26 @@
+import { FormSchema } from '@/types/form'
+import { ElRadio, ElRadioButton } from 'element-plus'
+import { defineComponent } from 'vue'
+
+export const useRenderRadio = () => {
+ const renderRadioOptions = (item: FormSchema) => {
+ // 如果有别名,就取别名
+ const labelAlias = item?.componentProps?.optionsAlias?.labelField
+ const valueAlias = item?.componentProps?.optionsAlias?.valueField
+ const Com = (item.component === 'Radio' ? ElRadio : ElRadioButton) as ReturnType<
+ typeof defineComponent
+ >
+ return item?.componentProps?.options?.map((option) => {
+ const { ...other } = option
+ return (
+
+ {option[labelAlias || 'label']}
+
+ )
+ })
+ }
+
+ return {
+ renderRadioOptions
+ }
+}
diff --git a/src/components/Form/src/components/useRenderSelect.tsx b/src/components/Form/src/components/useRenderSelect.tsx
new file mode 100644
index 0000000..59b72e6
--- /dev/null
+++ b/src/components/Form/src/components/useRenderSelect.tsx
@@ -0,0 +1,57 @@
+import { FormSchema } from '@/types/form'
+import { ComponentOptions } from '@/types/components'
+import { ElOption, ElOptionGroup } from 'element-plus'
+import { getSlot } from '@/utils/tsxHelper'
+import { Slots } from 'vue'
+
+export const useRenderSelect = (slots: Slots) => {
+ // 渲染 select options
+ const renderSelectOptions = (item: FormSchema) => {
+ // 如果有别名,就取别名
+ const labelAlias = item?.componentProps?.optionsAlias?.labelField
+ return item?.componentProps?.options?.map((option) => {
+ if (option?.options?.length) {
+ return (
+
+ {() => {
+ return option?.options?.map((v) => {
+ return renderSelectOptionItem(item, v)
+ })
+ }}
+
+ )
+ } else {
+ return renderSelectOptionItem(item, option)
+ }
+ })
+ }
+
+ // 渲染 select option item
+ const renderSelectOptionItem = (item: FormSchema, option: ComponentOptions) => {
+ // 如果有别名,就取别名
+ const labelAlias = item?.componentProps?.optionsAlias?.labelField
+ const valueAlias = item?.componentProps?.optionsAlias?.valueField
+
+ const { label, value, ...other } = option
+
+ return (
+
+ {{
+ default: () =>
+ // option 插槽名规则,{field}-option
+ item?.componentProps?.optionsSlot
+ ? getSlot(slots, `${item.field}-option`, { item: option })
+ : undefined
+ }}
+
+ )
+ }
+
+ return {
+ renderSelectOptions
+ }
+}
diff --git a/src/components/Form/src/helper.ts b/src/components/Form/src/helper.ts
new file mode 100644
index 0000000..cdfc8ca
--- /dev/null
+++ b/src/components/Form/src/helper.ts
@@ -0,0 +1,148 @@
+import type { Slots } from 'vue'
+import { getSlot } from '@/utils/tsxHelper'
+import { PlaceholderModel } from './types'
+import { FormSchema } from '@/types/form'
+import { ColProps } from '@/types/components'
+
+/**
+ *
+ * @param schema 对应组件数据
+ * @returns 返回提示信息对象
+ * @description 用于自动设置placeholder
+ */
+export const setTextPlaceholder = (schema: FormSchema): PlaceholderModel => {
+ const { t } = useI18n()
+ const textMap = ['Input', 'Autocomplete', 'InputNumber', 'InputPassword']
+ const selectMap = ['Select', 'SelectV2', 'TimePicker', 'DatePicker', 'TimeSelect', 'TimeSelect']
+ if (textMap.includes(schema?.component as string)) {
+ return {
+ placeholder: t('common.inputText') + schema.label
+ }
+ }
+ if (selectMap.includes(schema?.component as string)) {
+ // 一些范围选择器
+ const twoTextMap = ['datetimerange', 'daterange', 'monthrange', 'datetimerange', 'daterange']
+ if (
+ twoTextMap.includes(
+ (schema?.componentProps?.type || schema?.componentProps?.isRange) as string
+ )
+ ) {
+ return {
+ startPlaceholder: t('common.startTimeText'),
+ endPlaceholder: t('common.endTimeText'),
+ rangeSeparator: '-'
+ }
+ } else {
+ return {
+ placeholder: t('common.selectText') + schema.label
+ }
+ }
+ }
+ return {}
+}
+
+/**
+ *
+ * @param col 内置栅格
+ * @returns 返回栅格属性
+ * @description 合并传入进来的栅格属性
+ */
+export const setGridProp = (col: ColProps = {}): ColProps => {
+ const colProps: ColProps = {
+ // 如果有span,代表用户优先级更高,所以不需要默认栅格
+ ...(col.span
+ ? {}
+ : {
+ xs: 24,
+ sm: 12,
+ md: 12,
+ lg: 12,
+ xl: 12
+ }),
+ ...col
+ }
+ return colProps
+}
+
+/**
+ *
+ * @param item 传入的组件属性
+ * @returns 默认添加 clearable 属性
+ */
+export const setComponentProps = (item: FormSchema): Recordable => {
+ const notNeedClearable = ['ColorPicker']
+ const componentProps: Recordable = notNeedClearable.includes(item.component as string)
+ ? { ...item.componentProps }
+ : {
+ clearable: true,
+ ...item.componentProps
+ }
+ // 需要删除额外的属性
+ delete componentProps?.slots
+ return componentProps
+}
+
+/**
+ *
+ * @param slots 插槽
+ * @param slotsProps 插槽属性
+ * @param field 字段名
+ */
+export const setItemComponentSlots = (
+ slots: Slots,
+ slotsProps: Recordable = {},
+ field: string
+): Recordable => {
+ const slotObj: Recordable = {}
+ for (const key in slotsProps) {
+ if (slotsProps[key]) {
+ // 由于组件有可能重复,需要有一个唯一的前缀
+ slotObj[key] = (data: Recordable) => {
+ return getSlot(slots, `${field}-${key}`, data)
+ }
+ }
+ }
+ return slotObj
+}
+
+/**
+ *
+ * @param schema Form表单结构化数组
+ * @param formModel FormModel
+ * @returns FormModel
+ * @description 生成对应的formModel
+ */
+export const initModel = (schema: FormSchema[], formModel: Recordable) => {
+ const model: Recordable = { ...formModel }
+ schema.map((v) => {
+ // 如果是hidden,就删除对应的值
+ if (v.hidden) {
+ delete model[v.field]
+ } else if (v.component && v.component !== 'Divider') {
+ const hasField = Reflect.has(model, v.field)
+ // 如果先前已经有值存在,则不进行重新赋值,而是采用现有的值
+ model[v.field] = hasField ? model[v.field] : v.value !== void 0 ? v.value : ''
+ }
+ })
+ return model
+}
+
+/**
+ * @param slots 插槽
+ * @param field 字段名
+ * @returns 返回FormIiem插槽
+ */
+export const setFormItemSlots = (slots: Slots, field: string): Recordable => {
+ const slotObj: Recordable = {}
+ if (slots[`${field}-error`]) {
+ slotObj['error'] = (data: Recordable) => {
+ return getSlot(slots, `${field}-error`, data)
+ }
+ }
+ if (slots[`${field}-label`]) {
+ slotObj['label'] = (data: Recordable) => {
+ return getSlot(slots, `${field}-label`, data)
+ }
+ }
+ return slotObj
+}
diff --git a/src/components/Form/src/types.ts b/src/components/Form/src/types.ts
new file mode 100644
index 0000000..dcd01e7
--- /dev/null
+++ b/src/components/Form/src/types.ts
@@ -0,0 +1,17 @@
+import { FormSchema } from '@/types/form'
+
+export interface PlaceholderModel {
+ placeholder?: string
+ startPlaceholder?: string
+ endPlaceholder?: string
+ rangeSeparator?: string
+}
+
+export type FormProps = {
+ schema?: FormSchema[]
+ isCol?: boolean
+ model?: Recordable
+ autoSetPlaceholder?: boolean
+ isCustom?: boolean
+ labelWidth?: string | number
+} & Recordable
diff --git a/src/components/FormCreate/index.ts b/src/components/FormCreate/index.ts
new file mode 100644
index 0000000..9d32778
--- /dev/null
+++ b/src/components/FormCreate/index.ts
@@ -0,0 +1,4 @@
+import { useFormCreateDesigner } from './src/useFormCreateDesigner'
+import { useApiSelect } from './src/components/useApiSelect'
+
+export { useFormCreateDesigner, useApiSelect }
diff --git a/src/components/FormCreate/src/components/DictSelect.vue b/src/components/FormCreate/src/components/DictSelect.vue
new file mode 100644
index 0000000..204746d
--- /dev/null
+++ b/src/components/FormCreate/src/components/DictSelect.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+ {{ dict.label }}
+
+
+
+
+
+
+
+
diff --git a/src/components/FormCreate/src/components/useApiSelect.tsx b/src/components/FormCreate/src/components/useApiSelect.tsx
new file mode 100644
index 0000000..29cd302
--- /dev/null
+++ b/src/components/FormCreate/src/components/useApiSelect.tsx
@@ -0,0 +1,248 @@
+import request from '@/config/axios'
+import { isEmpty } from '@/utils/is'
+import { ApiSelectProps } from '@/components/FormCreate/src/type'
+import { jsonParse } from '@/utils'
+
+export const useApiSelect = (option: ApiSelectProps) => {
+ return defineComponent({
+ name: option.name,
+ props: {
+ // 选项标签
+ labelField: {
+ type: String,
+ default: () => option.labelField ?? 'label'
+ },
+ // 选项的值
+ valueField: {
+ type: String,
+ default: () => option.valueField ?? 'value'
+ },
+ // api 接口
+ url: {
+ type: String,
+ default: () => option.url ?? ''
+ },
+ // 请求类型
+ method: {
+ type: String,
+ default: 'GET'
+ },
+ // 选项解析函数
+ parseFunc: {
+ type: String,
+ default: ''
+ },
+ // 请求参数
+ data: {
+ type: String,
+ default: ''
+ },
+ // 选择器类型,下拉框 select、多选框 checkbox、单选框 radio
+ selectType: {
+ type: String,
+ default: 'select'
+ },
+ // 是否多选
+ multiple: {
+ type: Boolean,
+ default: false
+ },
+ // 是否远程搜索
+ remote: {
+ type: Boolean,
+ default: false
+ },
+ // 远程搜索时携带的参数
+ remoteField: {
+ type: String,
+ default: 'label'
+ }
+ },
+ setup(props) {
+ const attrs = useAttrs()
+ const options = ref([]) // 下拉数据
+ const loading = ref(false) // 是否正在从远程获取数据
+ const queryParam = ref() // 当前输入的值
+ const getOptions = async () => {
+ options.value = []
+ // 接口选择器
+ if (isEmpty(props.url)) {
+ return
+ }
+ switch (props.method) {
+ case 'GET':
+ let url: string = props.url
+ if (props.remote) {
+ url = `${url}?${props.remoteField}=${queryParam.value}`
+ }
+ parseOptions(await request.get({ url: url }))
+ break
+ case 'POST':
+ const data: any = jsonParse(props.data)
+ if (props.remote) {
+ data[props.remoteField] = queryParam.value
+ }
+ parseOptions(await request.post({ url: props.url, data: data }))
+ break
+ }
+ }
+
+ function parseOptions(data: any) {
+ // 情况一:如果有自定义解析函数优先使用自定义解析
+ if (!isEmpty(props.parseFunc)) {
+ options.value = parseFunc()?.(data)
+ return
+ }
+ // 情况二:返回的直接是一个列表
+ if (Array.isArray(data)) {
+ parseOptions0(data)
+ return
+ }
+ // 情况二:返回的是分页数据,尝试读取 list
+ data = data.list
+ if (!!data && Array.isArray(data)) {
+ parseOptions0(data)
+ return
+ }
+ // 情况三:不是 yudao-vue-pro 标准返回
+ console.warn(
+ `接口[${props.url}] 返回结果不是 yudao-vue-pro 标准返回建议采用自定义解析函数处理`
+ )
+ }
+
+ function parseOptions0(data: any[]) {
+ if (Array.isArray(data)) {
+ options.value = data.map((item: any) => ({
+ label: parseExpression(item, props.labelField),
+ value: parseExpression(item, props.valueField)
+ }))
+ return
+ }
+ console.warn(`接口[${props.url}] 返回结果不是一个数组`)
+ }
+
+ function parseFunc() {
+ let parse: any = null
+ if (!!props.parseFunc) {
+ // 解析字符串函数
+ parse = new Function(`return ${props.parseFunc}`)()
+ }
+ return parse
+ }
+
+ function parseExpression(data: any, template: string) {
+ // 检测是否使用了表达式
+ if (template.indexOf('${') === -1) {
+ return data[template]
+ }
+ // 正则表达式匹配模板字符串中的 ${...}
+ const pattern = /\$\{([^}]*)}/g
+ // 使用replace函数配合正则表达式和回调函数来进行替换
+ return template.replace(pattern, (_, expr) => {
+ // expr 是匹配到的 ${} 内的表达式(这里是属性名),从 data 中获取对应的值
+ const result = data[expr.trim()] // 去除前后空白,以防用户输入带空格的属性名
+ if (!result) {
+ console.warn(
+ `接口选择器选项模版[${template}][${expr.trim()}] 解析值失败结果为[${result}], 请检查属性名称是否存在于接口返回值中,存在则忽略此条!!!`
+ )
+ }
+ return result
+ })
+ }
+
+ const remoteMethod = async (query: any) => {
+ if (!query) {
+ return
+ }
+ loading.value = true
+ try {
+ queryParam.value = query
+ await getOptions()
+ } finally {
+ loading.value = false
+ }
+ }
+
+ onMounted(async () => {
+ await getOptions()
+ })
+
+ const buildSelect = () => {
+ if (props.multiple) {
+ // fix:多写此步是为了解决 multiple 属性问题
+ return (
+
+ {options.value.map((item, index) => (
+
+ ))}
+
+ )
+ }
+ debugger
+ return (
+
+ {options.value.map((item, index) => (
+
+ ))}
+
+ )
+ }
+ const buildCheckbox = () => {
+ if (isEmpty(options.value)) {
+ options.value = [
+ { label: '选项1', value: '选项1' },
+ { label: '选项2', value: '选项2' }
+ ]
+ }
+ return (
+
+ {options.value.map((item, index) => (
+
+ ))}
+
+ )
+ }
+ const buildRadio = () => {
+ if (isEmpty(options.value)) {
+ options.value = [
+ { label: '选项1', value: '选项1' },
+ { label: '选项2', value: '选项2' }
+ ]
+ }
+ return (
+
+ {options.value.map((item, index) => (
+
+ {item.label}
+
+ ))}
+
+ )
+ }
+ return () => (
+ <>
+ {props.selectType === 'select'
+ ? buildSelect()
+ : props.selectType === 'radio'
+ ? buildRadio()
+ : props.selectType === 'checkbox'
+ ? buildCheckbox()
+ : buildSelect()}
+ >
+ )
+ }
+ })
+}
diff --git a/src/components/FormCreate/src/config/index.ts b/src/components/FormCreate/src/config/index.ts
new file mode 100644
index 0000000..b1e2dde
--- /dev/null
+++ b/src/components/FormCreate/src/config/index.ts
@@ -0,0 +1,15 @@
+import { useUploadFileRule } from './useUploadFileRule'
+import { useUploadImgRule } from './useUploadImgRule'
+import { useUploadImgsRule } from './useUploadImgsRule'
+import { useDictSelectRule } from './useDictSelectRule'
+import { useEditorRule } from './useEditorRule'
+import { useSelectRule } from './useSelectRule'
+
+export {
+ useUploadFileRule,
+ useUploadImgRule,
+ useUploadImgsRule,
+ useDictSelectRule,
+ useEditorRule,
+ useSelectRule
+}
diff --git a/src/components/FormCreate/src/config/selectRule.ts b/src/components/FormCreate/src/config/selectRule.ts
new file mode 100644
index 0000000..a6f3841
--- /dev/null
+++ b/src/components/FormCreate/src/config/selectRule.ts
@@ -0,0 +1,181 @@
+const selectRule = [
+ {
+ type: 'select',
+ field: 'selectType',
+ title: '选择器类型',
+ value: 'select',
+ options: [
+ { label: '下拉框', value: 'select' },
+ { label: '单选框', value: 'radio' },
+ { label: '多选框', value: 'checkbox' }
+ ],
+ // 参考 https://www.form-create.com/v3/guide/control 组件联动,单选框和多选框不需要多选属性
+ control: [
+ {
+ value: 'select',
+ condition: '==',
+ method: 'hidden',
+ rule: [
+ 'multiple',
+ 'clearable',
+ 'collapseTags',
+ 'multipleLimit',
+ 'allowCreate',
+ 'filterable',
+ 'noMatchText',
+ 'remote',
+ 'remoteMethod',
+ 'reserveKeyword',
+ 'defaultFirstOption',
+ 'automaticDropdown'
+ ]
+ }
+ ]
+ },
+ {
+ type: 'switch',
+ field: 'filterable',
+ title: '是否可搜索'
+ },
+ { type: 'switch', field: 'multiple', title: '是否多选' },
+ {
+ type: 'switch',
+ field: 'disabled',
+ title: '是否禁用'
+ },
+ { type: 'switch', field: 'clearable', title: '是否可以清空选项' },
+ {
+ type: 'switch',
+ field: 'collapseTags',
+ title: '多选时是否将选中值按文字的形式展示'
+ },
+ {
+ type: 'inputNumber',
+ field: 'multipleLimit',
+ title: '多选时用户最多可以选择的项目数,为 0 则不限制',
+ props: { min: 0 }
+ },
+ {
+ type: 'input',
+ field: 'autocomplete',
+ title: 'autocomplete 属性'
+ },
+ { type: 'input', field: 'placeholder', title: '占位符' },
+ { type: 'switch', field: 'allowCreate', title: '是否允许用户创建新条目' },
+ {
+ type: 'input',
+ field: 'noMatchText',
+ title: '搜索条件无匹配时显示的文字'
+ },
+ { type: 'input', field: 'noDataText', title: '选项为空时显示的文字' },
+ {
+ type: 'switch',
+ field: 'reserveKeyword',
+ title: '多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词'
+ },
+ {
+ type: 'switch',
+ field: 'defaultFirstOption',
+ title: '在输入框按下回车,选择第一个匹配项'
+ },
+ {
+ type: 'switch',
+ field: 'popperAppendToBody',
+ title: '是否将弹出框插入至 body 元素',
+ value: true
+ },
+ {
+ type: 'switch',
+ field: 'automaticDropdown',
+ title: '对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单'
+ }
+]
+
+const apiSelectRule = [
+ {
+ type: 'input',
+ field: 'url',
+ title: 'url 地址',
+ props: {
+ placeholder: '/system/user/simple-list'
+ }
+ },
+ {
+ type: 'select',
+ field: 'method',
+ title: '请求类型',
+ value: 'GET',
+ options: [
+ { label: 'GET', value: 'GET' },
+ { label: 'POST', value: 'POST' }
+ ],
+ control: [
+ {
+ value: 'GET',
+ condition: '!=',
+ method: 'hidden',
+ rule: [
+ {
+ type: 'input',
+ field: 'data',
+ title: '请求参数 JSON 格式',
+ props: {
+ autosize: true,
+ type: 'textarea',
+ placeholder: '{"type": 1}'
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ type: 'input',
+ field: 'labelField',
+ title: 'label 属性',
+ info: '可以使用 el 表达式:${属性},来实现复杂数据组合。如:${nickname}-${id}',
+ props: {
+ placeholder: 'nickname'
+ }
+ },
+ {
+ type: 'input',
+ field: 'valueField',
+ title: 'value 属性',
+ info: '可以使用 el 表达式:${属性},来实现复杂数据组合。如:${nickname}-${id}',
+ props: {
+ placeholder: 'id'
+ }
+ },
+ {
+ type: 'input',
+ field: 'parseFunc',
+ title: '选项解析函数',
+ info: `data 为接口返回值,需要写一个匿名函数解析返回值为选择器 options 列表
+ (data: any)=>{ label: string; value: any }[]`,
+ props: {
+ autosize: true,
+ rows: { minRows: 2, maxRows: 6 },
+ type: 'textarea',
+ placeholder: `
+ function (data) {
+ console.log(data)
+ return data.list.map(item=> ({label: item.nickname,value: item.id}))
+ }`
+ }
+ },
+ {
+ type: 'switch',
+ field: 'remote',
+ info: '是否可搜索',
+ title: '其中的选项是否从服务器远程加载'
+ },
+ {
+ type: 'input',
+ field: 'remoteField',
+ title: '请求参数',
+ info: '远程请求时请求携带的参数名称,如:name'
+ }
+]
+
+export { selectRule, apiSelectRule }
diff --git a/src/components/FormCreate/src/config/useDictSelectRule.ts b/src/components/FormCreate/src/config/useDictSelectRule.ts
new file mode 100644
index 0000000..5c5e8ca
--- /dev/null
+++ b/src/components/FormCreate/src/config/useDictSelectRule.ts
@@ -0,0 +1,64 @@
+import { generateUUID } from '@/utils'
+import * as DictDataApi from '@/api/system/dict/dict.type'
+import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
+import { selectRule } from '@/components/FormCreate/src/config/selectRule'
+import { cloneDeep } from 'lodash-es'
+
+/**
+ * 字典选择器规则,如果规则使用到动态数据则需要单独配置不能使用 useSelectRule
+ */
+export const useDictSelectRule = () => {
+ const label = '字典选择器'
+ const name = 'DictSelect'
+ const rules = cloneDeep(selectRule)
+ const dictOptions = ref<{ label: string; value: string }[]>([]) // 字典类型下拉数据
+ onMounted(async () => {
+ const data = await DictDataApi.getSimpleDictTypeList()
+ if (!data || data.length === 0) {
+ return
+ }
+ dictOptions.value =
+ data?.map((item: DictDataApi.DictTypeVO) => ({
+ label: item.name,
+ value: item.type
+ })) ?? []
+ })
+ return {
+ icon: 'icon-doc-text',
+ label,
+ name,
+ rule() {
+ return {
+ type: name,
+ field: generateUUID(),
+ title: label,
+ info: '',
+ $required: false
+ }
+ },
+ props(_, { t }) {
+ return localeProps(t, name + '.props', [
+ makeRequiredRule(),
+ {
+ type: 'select',
+ field: 'dictType',
+ title: '字典类型',
+ value: '',
+ options: dictOptions.value
+ },
+ {
+ type: 'select',
+ field: 'dictValueType',
+ title: '字典值类型',
+ value: 'str',
+ options: [
+ { label: '数字', value: 'int' },
+ { label: '字符串', value: 'str' },
+ { label: '布尔值', value: 'bool' }
+ ]
+ },
+ ...rules
+ ])
+ }
+ }
+}
diff --git a/src/components/FormCreate/src/config/useEditorRule.ts b/src/components/FormCreate/src/config/useEditorRule.ts
new file mode 100644
index 0000000..ac6d9ac
--- /dev/null
+++ b/src/components/FormCreate/src/config/useEditorRule.ts
@@ -0,0 +1,32 @@
+import { generateUUID } from '@/utils'
+import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
+
+export const useEditorRule = () => {
+ const label = '富文本'
+ const name = 'Editor'
+ return {
+ icon: 'icon-editor',
+ label,
+ name,
+ rule() {
+ return {
+ type: name,
+ field: generateUUID(),
+ title: label,
+ info: '',
+ $required: false
+ }
+ },
+ props(_, { t }) {
+ return localeProps(t, name + '.props', [
+ makeRequiredRule(),
+ {
+ type: 'input',
+ field: 'height',
+ title: '高度'
+ },
+ { type: 'switch', field: 'readonly', title: '是否只读' }
+ ])
+ }
+ }
+}
diff --git a/src/components/FormCreate/src/config/useSelectRule.ts b/src/components/FormCreate/src/config/useSelectRule.ts
new file mode 100644
index 0000000..ff21a22
--- /dev/null
+++ b/src/components/FormCreate/src/config/useSelectRule.ts
@@ -0,0 +1,36 @@
+import { generateUUID } from '@/utils'
+import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
+import { selectRule } from '@/components/FormCreate/src/config/selectRule'
+import { SelectRuleOption } from '@/components/FormCreate/src/type'
+import { cloneDeep } from 'lodash-es'
+
+/**
+ * 通用选择器规则 hook
+ *
+ * @param option 规则配置
+ */
+export const useSelectRule = (option: SelectRuleOption) => {
+ const label = option.label
+ const name = option.name
+ const rules = cloneDeep(selectRule)
+ return {
+ icon: option.icon,
+ label,
+ name,
+ rule() {
+ return {
+ type: name,
+ field: generateUUID(),
+ title: label,
+ info: '',
+ $required: false
+ }
+ },
+ props(_, { t }) {
+ if (!option.props) {
+ option.props = []
+ }
+ return localeProps(t, name + '.props', [makeRequiredRule(), ...option.props, ...rules])
+ }
+ }
+}
diff --git a/src/components/FormCreate/src/config/useUploadFileRule.ts b/src/components/FormCreate/src/config/useUploadFileRule.ts
new file mode 100644
index 0000000..a1ea85e
--- /dev/null
+++ b/src/components/FormCreate/src/config/useUploadFileRule.ts
@@ -0,0 +1,80 @@
+import { generateUUID } from '@/utils'
+import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
+
+export const useUploadFileRule = () => {
+ const label = '文件上传'
+ const name = 'UploadFile'
+ return {
+ icon: 'icon-upload',
+ label,
+ name,
+ rule() {
+ return {
+ type: name,
+ field: generateUUID(),
+ title: label,
+ info: '',
+ $required: false
+ }
+ },
+ props(_, { t }) {
+ return localeProps(t, name + '.props', [
+ makeRequiredRule(),
+ {
+ type: 'select',
+ field: 'fileType',
+ title: '文件类型',
+ value: ['doc', 'xls', 'ppt', 'txt', 'pdf'],
+ options: [
+ { label: 'doc', value: 'doc' },
+ { label: 'xls', value: 'xls' },
+ { label: 'ppt', value: 'ppt' },
+ { label: 'txt', value: 'txt' },
+ { label: 'pdf', value: 'pdf' }
+ ],
+ props: {
+ multiple: true
+ }
+ },
+ {
+ type: 'switch',
+ field: 'autoUpload',
+ title: '是否在选取文件后立即进行上传',
+ value: true
+ },
+ {
+ type: 'switch',
+ field: 'drag',
+ title: '拖拽上传',
+ value: false
+ },
+ {
+ type: 'switch',
+ field: 'isShowTip',
+ title: '是否显示提示',
+ value: true
+ },
+ {
+ type: 'inputNumber',
+ field: 'fileSize',
+ title: '大小限制(MB)',
+ value: 5,
+ props: { min: 0 }
+ },
+ {
+ type: 'inputNumber',
+ field: 'limit',
+ title: '数量限制',
+ value: 5,
+ props: { min: 0 }
+ },
+ {
+ type: 'switch',
+ field: 'disabled',
+ title: '是否禁用',
+ value: false
+ }
+ ])
+ }
+ }
+}
diff --git a/src/components/FormCreate/src/config/useUploadImgRule.ts b/src/components/FormCreate/src/config/useUploadImgRule.ts
new file mode 100644
index 0000000..546cf9d
--- /dev/null
+++ b/src/components/FormCreate/src/config/useUploadImgRule.ts
@@ -0,0 +1,89 @@
+import { generateUUID } from '@/utils'
+import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
+
+export const useUploadImgRule = () => {
+ const label = '单图上传'
+ const name = 'UploadImg'
+ return {
+ icon: 'icon-upload',
+ label,
+ name,
+ rule() {
+ return {
+ type: name,
+ field: generateUUID(),
+ title: label,
+ info: '',
+ $required: false
+ }
+ },
+ props(_, { t }) {
+ return localeProps(t, name + '.props', [
+ makeRequiredRule(),
+ {
+ type: 'switch',
+ field: 'drag',
+ title: '拖拽上传',
+ value: false
+ },
+ {
+ type: 'select',
+ field: 'fileType',
+ title: '图片类型限制',
+ value: ['image/jpeg', 'image/png', 'image/gif'],
+ options: [
+ { label: 'image/apng', value: 'image/apng' },
+ { label: 'image/bmp', value: 'image/bmp' },
+ { label: 'image/gif', value: 'image/gif' },
+ { label: 'image/jpeg', value: 'image/jpeg' },
+ { label: 'image/pjpeg', value: 'image/pjpeg' },
+ { label: 'image/svg+xml', value: 'image/svg+xml' },
+ { label: 'image/tiff', value: 'image/tiff' },
+ { label: 'image/webp', value: 'image/webp' },
+ { label: 'image/x-icon', value: 'image/x-icon' }
+ ],
+ props: {
+ multiple: true
+ }
+ },
+ {
+ type: 'inputNumber',
+ field: 'fileSize',
+ title: '大小限制(MB)',
+ value: 5,
+ props: { min: 0 }
+ },
+ {
+ type: 'input',
+ field: 'height',
+ title: '组件高度',
+ value: '150px'
+ },
+ {
+ type: 'input',
+ field: 'width',
+ title: '组件宽度',
+ value: '150px'
+ },
+ {
+ type: 'input',
+ field: 'borderradius',
+ title: '组件边框圆角',
+ value: '8px'
+ },
+ {
+ type: 'switch',
+ field: 'disabled',
+ title: '是否显示删除按钮',
+ value: true
+ },
+ {
+ type: 'switch',
+ field: 'showBtnText',
+ title: '是否显示按钮文字',
+ value: true
+ }
+ ])
+ }
+ }
+}
diff --git a/src/components/FormCreate/src/config/useUploadImgsRule.ts b/src/components/FormCreate/src/config/useUploadImgsRule.ts
new file mode 100644
index 0000000..0bf2378
--- /dev/null
+++ b/src/components/FormCreate/src/config/useUploadImgsRule.ts
@@ -0,0 +1,84 @@
+import { generateUUID } from '@/utils'
+import { localeProps, makeRequiredRule } from '@/components/FormCreate/src/utils'
+
+export const useUploadImgsRule = () => {
+ const label = '多图上传'
+ const name = 'UploadImgs'
+ return {
+ icon: 'icon-upload',
+ label,
+ name,
+ rule() {
+ return {
+ type: name,
+ field: generateUUID(),
+ title: label,
+ info: '',
+ $required: false
+ }
+ },
+ props(_, { t }) {
+ return localeProps(t, name + '.props', [
+ makeRequiredRule(),
+ {
+ type: 'switch',
+ field: 'drag',
+ title: '拖拽上传',
+ value: false
+ },
+ {
+ type: 'select',
+ field: 'fileType',
+ title: '图片类型限制',
+ value: ['image/jpeg', 'image/png', 'image/gif'],
+ options: [
+ { label: 'image/apng', value: 'image/apng' },
+ { label: 'image/bmp', value: 'image/bmp' },
+ { label: 'image/gif', value: 'image/gif' },
+ { label: 'image/jpeg', value: 'image/jpeg' },
+ { label: 'image/pjpeg', value: 'image/pjpeg' },
+ { label: 'image/svg+xml', value: 'image/svg+xml' },
+ { label: 'image/tiff', value: 'image/tiff' },
+ { label: 'image/webp', value: 'image/webp' },
+ { label: 'image/x-icon', value: 'image/x-icon' }
+ ],
+ props: {
+ multiple: true
+ }
+ },
+ {
+ type: 'inputNumber',
+ field: 'fileSize',
+ title: '大小限制(MB)',
+ value: 5,
+ props: { min: 0 }
+ },
+ {
+ type: 'inputNumber',
+ field: 'limit',
+ title: '数量限制',
+ value: 5,
+ props: { min: 0 }
+ },
+ {
+ type: 'input',
+ field: 'height',
+ title: '组件高度',
+ value: '150px'
+ },
+ {
+ type: 'input',
+ field: 'width',
+ title: '组件宽度',
+ value: '150px'
+ },
+ {
+ type: 'input',
+ field: 'borderradius',
+ title: '组件边框圆角',
+ value: '8px'
+ }
+ ])
+ }
+ }
+}
diff --git a/src/components/FormCreate/src/type/index.ts b/src/components/FormCreate/src/type/index.ts
new file mode 100644
index 0000000..42dccc7
--- /dev/null
+++ b/src/components/FormCreate/src/type/index.ts
@@ -0,0 +1,50 @@
+import { Rule } from '@form-create/element-ui' //左侧拖拽按钮
+
+// 左侧拖拽按钮
+export interface MenuItem {
+ label: string
+ name: string
+ icon: string
+}
+
+// 左侧拖拽按钮分类
+export interface Menu {
+ title: string
+ name: string
+ list: MenuItem[]
+}
+
+export interface MenuList extends Array