commit f26cb78822f6f42b6d1ab4c27b5b9cbc0a3ff25d Author: [yxf] <[1524240689@qq.com]> Date: Fri Mar 27 21:40:01 2026 +0800 Initial commit: node_kefu_uniapp project diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e186c1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +node_modules/ +unpackage/ +/dist/ + +# Log files +npm-debug.log* + +# Editor directories and files +.project +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/.hintrc b/.hintrc new file mode 100644 index 0000000..d5bb468 --- /dev/null +++ b/.hintrc @@ -0,0 +1,8 @@ +{ + "extends": [ + "development" + ], + "hints": { + "typescript-config/is-valid": "off" + } +} \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..5305129 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "tabWidth": 4, + "useTabs": true, + "semi": true, + "jsxBracketSameLine": true, + "singleQuote": false, + "printWidth": 100 +} diff --git a/.vscode/config.code-snippets b/.vscode/config.code-snippets new file mode 100644 index 0000000..4796b30 --- /dev/null +++ b/.vscode/config.code-snippets @@ -0,0 +1,15 @@ +{ + "module-config": { + "prefix": "module-config", + "scope": "typescript", + "body": [ + "import type { ModuleConfig } from \"/@/cool\";", + "", + "export default (): ModuleConfig => {", + " return {};", + "};", + "" + ], + "description": "module config snippets" + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f24801c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.cursorSmoothCaretAnimation": "on", + "editor.formatOnSave": true, +} diff --git a/.vscode/template.code-snippets b/.vscode/template.code-snippets new file mode 100644 index 0000000..0686338 --- /dev/null +++ b/.vscode/template.code-snippets @@ -0,0 +1,119 @@ +{ + "page": { + "prefix": "page", + "scope": "vue", + "body": [ + "", + "", + "", + "", + "", + "", + ], + "description": "page snippets", + }, + "component": { + "prefix": "component", + "scope": "vue", + "body": [ + "", + "", + "", + "", + "", + "", + ], + "description": "component snippets", + }, + "popup": { + "prefix": "popup", + "scope": "vue", + "body": [ + "", + "", + "", + "", + "", + "", + ], + "description": "popup snippets", + }, + "pager": { + "prefix": "pager", + "scope": "typescript", + "body": [ + "const { service } = useCool();", + "const { onRefresh, list } = usePager();", + "", + "function refresh(params?: any) {", + " const { data, next } = onRefresh(params);", + " next(service.$1.page(data));", + "}", + "", + "onReady(() => {", + " refresh();", + "});", + "", + "defineExpose({", + " refresh,", + "});", + ], + "description": "pager snippets", + }, +} diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..8d6db2a --- /dev/null +++ b/App.vue @@ -0,0 +1,31 @@ + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b6722d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,33 @@ +MIT License + +Copyright (c) [2025] [厦门闪酷科技开发有限公司] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +MIT 许可证 + +版权所有 (c) [2025] [厦门闪酷科技开发有限公司] + +特此免费授予获得本软件及相关文档文件(“软件”)副本的任何人无限制地处理本软件的权限,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许软件提供给其的人员这样做,但须符合以下条件: + +上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。 + +本软件按“原样”提供,不提供任何明示或暗示的担保,包括但不限于对适销性、特定用途适用性和非侵权的担保。在任何情况下,作者或版权持有人均不对因软件或软件使用或其他交易而产生的任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中。 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8df518d --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# COOL-UNI 项目脚手架 + +## 简介 + +[演示、文档地址](https://uni-docs.cool-js.com/) + +## 更快 + +#### 启动快 + +基于 `vite`,快速的冷启动,不需要等待打包,即时的热模块更新,真正的按需编译。 + +#### 开发快 + +新增 `eps` 模式,自动扫描接口,代码智能提示。 + + + +#### 对接快 + +有什么功能是前端一个人做不了??大不了全干了 + +👉👉 [管理前端(vue3)开发文档、强大的 CRUD 组件](https://cool-js.com/admin/vue/introduce.html#%E4%BB%A3%E7%A0%81%E4%BB%93%E5%BA%93) + +👉👉 [服务端(node、midway)开发文档、一键生成代码](https://cool-js.com/admin/node/introduce.html#%E4%BB%A3%E7%A0%81%E4%BB%93%E5%BA%93) + +👉👉 [演示地址](https://show.cool-admin.com) 😁 + + + +## 更强 + +内置请求、路由、文件上传、组件通信、缓存等方法及 ui 库和 hooks + +```html + +``` + +## 更全 + +#### 细腻的代码 + +- `service` 无感刷新,直接调用后端接口 + + ```ts + const { service } = useCool(); + ``` + +- 提供 `entity` 描述,写 `any` 和不写的都哭了 + + ```ts + const list = ref([]); + ``` + +#### 活跃的社区 + +- 拥有自己的知识库系统 + +- [官方有问必答](https://cool-js.com/help/list.html) + +#### 丰富的插件 + +- [Ai 智能模块](https://cool-js.com/plugin/detail.html?id=58) + +- [客服聊天模块](https://cool-js.com/plugin/detail.html?id=56) + +- [企业机器人](https://cool-js.com/plugin/detail.html?id=41)、[飞书推送](https://cool-js.com/plugin/detail.html?id=30) + +- [各厂商的支付模块](https://cool-js.com/plugin/detail.html?id=33) + +- [云存储](https://cool-js.com/plugin/detail.html?id=36) + +- [PDF 打印](https://cool-js.com/plugin/detail.html?id=44) + +- [更多](https://cool-js.com/plugin/list.html) diff --git a/androidPrivacy.json b/androidPrivacy.json new file mode 100644 index 0000000..0d726ca --- /dev/null +++ b/androidPrivacy.json @@ -0,0 +1,3 @@ +{ + "prompt" : "template" +} diff --git a/build/cool/eps.d.ts b/build/cool/eps.d.ts new file mode 100644 index 0000000..0251752 --- /dev/null +++ b/build/cool/eps.d.ts @@ -0,0 +1,824 @@ +declare namespace Eps { + interface CsChatEntity { + /** + * 任意键值 + */ + [key: string]: any; + } + + interface UserInfoEntity { + /** + * 任意键值 + */ + [key: string]: any; + } + + interface CsMsgEntity { + /** + * 任意键值 + */ + [key: string]: any; + } + + interface CsSessionEntity { + /** + * 任意键值 + */ + [key: string]: any; + } + + interface DemoGoodsEntity { + /** + * 任意键值 + */ + [key: string]: any; + } + + interface UserAddressEntity { + /** + * 任意键值 + */ + [key: string]: any; + } + + type json = any; + + interface BaseComm { + /** + * uploadMode + */ + uploadMode(data?: any): Promise; + + /** + * upload + */ + upload(data?: any): Promise; + + /** + * param + */ + param(data?: any): Promise; + + /** + * eps + */ + eps(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { uploadMode: string; upload: string; param: string; eps: string }; + + /** + * 权限状态 + */ + _permission: { uploadMode: boolean; upload: boolean; param: boolean; eps: boolean }; + + request: Service["request"]; + } + + interface CsChat { + /** + * send + */ + send(data?: any): Promise; + + /** + * page + */ + page(data?: any): Promise<{ + pagination: { size: number; page: number; total: number; [key: string]: any }; + list: CsChatEntity[]; + [key: string]: any; + }>; + + /** + * info + */ + info(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { send: string; page: string; info: string }; + + /** + * 权限状态 + */ + _permission: { send: boolean; page: boolean; info: boolean }; + + request: Service["request"]; + } + + interface CsLogin { + /** + * account + */ + account(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { account: string }; + + /** + * 权限状态 + */ + _permission: { account: boolean }; + + request: Service["request"]; + } + + interface CsMsg { + /** + * unreadCount + */ + unreadCount(data?: any): Promise; + + /** + * read + */ + read(data?: any): Promise; + + /** + * page + */ + page(data?: any): Promise<{ + pagination: { size: number; page: number; total: number; [key: string]: any }; + list: CsMsgEntity[]; + [key: string]: any; + }>; + + /** + * 权限标识 + */ + permission: { unreadCount: string; read: string; page: string }; + + /** + * 权限状态 + */ + _permission: { unreadCount: boolean; read: boolean; page: boolean }; + + request: Service["request"]; + } + + interface CsSession { + /** + * detail + */ + detail(data?: any): Promise; + + /** + * create + */ + create(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { detail: string; create: string }; + + /** + * 权限状态 + */ + _permission: { detail: boolean; create: boolean }; + + request: Service["request"]; + } + + interface OpenDemoCache { + /** + * set + */ + set(data?: any): Promise; + + /** + * get + */ + get(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { set: string; get: string }; + + /** + * 权限状态 + */ + _permission: { set: boolean; get: boolean }; + + request: Service["request"]; + } + + interface OpenDemoEvent { + /** + * global + */ + global(data?: any): Promise; + + /** + * comm + */ + comm(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { global: string; comm: string }; + + /** + * 权限状态 + */ + _permission: { global: boolean; comm: boolean }; + + request: Service["request"]; + } + + interface OpenDemoGoods { + /** + * entityPage + */ + entityPage(data?: any): Promise; + + /** + * sqlPage + */ + sqlPage(data?: any): Promise; + + /** + * delete + */ + delete(data?: any): Promise; + + /** + * update + */ + update(data?: any): Promise; + + /** + * info + */ + info(data?: any): Promise; + + /** + * list + */ + list(data?: any): Promise; + + /** + * page + */ + page(data?: any): Promise<{ + pagination: { size: number; page: number; total: number; [key: string]: any }; + list: DemoGoodsEntity[]; + [key: string]: any; + }>; + + /** + * add + */ + add(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { + entityPage: string; + sqlPage: string; + delete: string; + update: string; + info: string; + list: string; + page: string; + add: string; + }; + + /** + * 权限状态 + */ + _permission: { + entityPage: boolean; + sqlPage: boolean; + delete: boolean; + update: boolean; + info: boolean; + list: boolean; + page: boolean; + add: boolean; + }; + + request: Service["request"]; + } + + interface OpenDemoI18n { + /** + * en + */ + en(data?: any): Promise; + + /** + * tw + */ + tw(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { en: string; tw: string }; + + /** + * 权限状态 + */ + _permission: { en: boolean; tw: boolean }; + + request: Service["request"]; + } + + interface OpenDemoPlugin { + /** + * invoke + */ + invoke(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { invoke: string }; + + /** + * 权限状态 + */ + _permission: { invoke: boolean }; + + request: Service["request"]; + } + + interface OpenDemoQueue { + /** + * addGetter + */ + addGetter(data?: any): Promise; + + /** + * getter + */ + getter(data?: any): Promise; + + /** + * add + */ + add(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { addGetter: string; getter: string; add: string }; + + /** + * 权限状态 + */ + _permission: { addGetter: boolean; getter: boolean; add: boolean }; + + request: Service["request"]; + } + + interface OpenDemoRpc { + /** + * transaction + */ + transaction(data?: any): Promise; + + /** + * event + */ + event(data?: any): Promise; + + /** + * call + */ + call(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { transaction: string; event: string; call: string }; + + /** + * 权限状态 + */ + _permission: { transaction: boolean; event: boolean; call: boolean }; + + request: Service["request"]; + } + + interface OpenDemoSse { + /** + * call + */ + call(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { call: string }; + + /** + * 权限状态 + */ + _permission: { call: boolean }; + + request: Service["request"]; + } + + interface OpenDemoTenant { + /** + * 权限标识 + */ + permission: {}; + + /** + * 权限状态 + */ + _permission: {}; + + request: Service["request"]; + } + + interface OpenDemoTransaction { + /** + * delete + */ + delete(data?: any): Promise; + + /** + * update + */ + update(data?: any): Promise; + + /** + * info + */ + info(data?: any): Promise; + + /** + * list + */ + list(data?: any): Promise; + + /** + * page + */ + page(data?: any): Promise<{ + pagination: { size: number; page: number; total: number; [key: string]: any }; + list: DemoGoodsEntity[]; + [key: string]: any; + }>; + + /** + * add + */ + add(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { + delete: string; + update: string; + info: string; + list: string; + page: string; + add: string; + }; + + /** + * 权限状态 + */ + _permission: { + delete: boolean; + update: boolean; + info: boolean; + list: boolean; + page: boolean; + add: boolean; + }; + + request: Service["request"]; + } + + interface DictInfo { + /** + * types + */ + types(data?: any): Promise; + + /** + * data + */ + data(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { types: string; data: string }; + + /** + * 权限状态 + */ + _permission: { types: boolean; data: boolean }; + + request: Service["request"]; + } + + interface Swagger { + /** + * json + */ + json(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { json: string }; + + /** + * 权限状态 + */ + _permission: { json: boolean }; + + request: Service["request"]; + } + + interface UserAddress { + /** + * default + */ + default(data?: any): Promise; + + /** + * delete + */ + delete(data?: any): Promise; + + /** + * update + */ + update(data?: any): Promise; + + /** + * info + */ + info(data?: any): Promise; + + /** + * list + */ + list(data?: any): Promise; + + /** + * page + */ + page(data?: any): Promise<{ + pagination: { size: number; page: number; total: number; [key: string]: any }; + list: UserAddressEntity[]; + [key: string]: any; + }>; + + /** + * add + */ + add(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { + default: string; + delete: string; + update: string; + info: string; + list: string; + page: string; + add: string; + }; + + /** + * 权限状态 + */ + _permission: { + default: boolean; + delete: boolean; + update: boolean; + info: boolean; + list: boolean; + page: boolean; + add: boolean; + }; + + request: Service["request"]; + } + + interface UserComm { + /** + * wxMpConfig + */ + wxMpConfig(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { wxMpConfig: string }; + + /** + * 权限状态 + */ + _permission: { wxMpConfig: boolean }; + + request: Service["request"]; + } + + interface UserInfo { + /** + * updatePassword + */ + updatePassword(data?: any): Promise; + + /** + * updatePerson + */ + updatePerson(data?: any): Promise; + + /** + * bindPhone + */ + bindPhone(data?: any): Promise; + + /** + * miniPhone + */ + miniPhone(data?: any): Promise; + + /** + * person + */ + person(data?: any): Promise; + + /** + * logoff + */ + logoff(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { + updatePassword: string; + updatePerson: string; + bindPhone: string; + miniPhone: string; + person: string; + logoff: string; + }; + + /** + * 权限状态 + */ + _permission: { + updatePassword: boolean; + updatePerson: boolean; + bindPhone: boolean; + miniPhone: boolean; + person: boolean; + logoff: boolean; + }; + + request: Service["request"]; + } + + interface UserLogin { + /** + * refreshToken + */ + refreshToken(data?: any): Promise; + + /** + * miniPhone + */ + miniPhone(data?: any): Promise; + + /** + * uniPhone + */ + uniPhone(data?: any): Promise; + + /** + * password + */ + password(data?: any): Promise; + + /** + * captcha + */ + captcha(data?: any): Promise; + + /** + * smsCode + */ + smsCode(data?: any): Promise; + + /** + * wxApp + */ + wxApp(data?: any): Promise; + + /** + * phone + */ + phone(data?: any): Promise; + + /** + * mini + */ + mini(data?: any): Promise; + + /** + * mp + */ + mp(data?: any): Promise; + + /** + * 权限标识 + */ + permission: { + refreshToken: string; + miniPhone: string; + uniPhone: string; + password: string; + captcha: string; + smsCode: string; + wxApp: string; + phone: string; + mini: string; + mp: string; + }; + + /** + * 权限状态 + */ + _permission: { + refreshToken: boolean; + miniPhone: boolean; + uniPhone: boolean; + password: boolean; + captcha: boolean; + smsCode: boolean; + wxApp: boolean; + phone: boolean; + mini: boolean; + mp: boolean; + }; + + request: Service["request"]; + } + + type Service = { + /** + * 基础请求 + */ + request(options?: { + url: string; + method?: "POST" | "GET" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS"; + data?: any; + params?: any; + headers?: { + authorization?: string; + [key: string]: any; + }; + timeout?: number; + proxy?: boolean; + [key: string]: any; + }): Promise; + + base: { comm: BaseComm }; + cs: { chat: CsChat; login: CsLogin; msg: CsMsg; session: CsSession }; + open: { + demo: { + cache: OpenDemoCache; + event: OpenDemoEvent; + goods: OpenDemoGoods; + i18n: OpenDemoI18n; + plugin: OpenDemoPlugin; + queue: OpenDemoQueue; + rpc: OpenDemoRpc; + sse: OpenDemoSse; + tenant: OpenDemoTenant; + transaction: OpenDemoTransaction; + }; + }; + dict: { info: DictInfo }; + swagger: Swagger; + user: { address: UserAddress; comm: UserComm; info: UserInfo; login: UserLogin }; + }; + + type DictKey = "brand" | "occupation"; +} diff --git a/build/cool/eps.json b/build/cool/eps.json new file mode 100644 index 0000000..a7aace1 --- /dev/null +++ b/build/cool/eps.json @@ -0,0 +1 @@ +[{"prefix":"/app/base/comm","name":"","api":[{"method":"get","path":"/uploadMode"},{"method":"post","path":"/upload"},{"method":"get","path":"/param"},{"method":"get","path":"/eps"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/cs/chat","name":"CsChatEntity","api":[{"method":"post","path":"/send"},{"method":"post","path":"/page"},{"method":"get","path":"/info"}],"search":{"fieldEq":[{"propertyName":"sessionId","type":"number","length":"","comment":"会话ID","nullable":true,"source":"a.sessionId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/cs/login","name":"UserInfoEntity","api":[{"method":"post","path":"/account"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/cs/msg","name":"CsMsgEntity","api":[{"method":"get","path":"/unreadCount"},{"method":"post","path":"/read"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/cs/session","name":"CsSessionEntity","api":[{"method":"get","path":"/detail"},{"method":"post","path":"/create"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/cache","name":"","api":[{"method":"post","path":"/set"},{"method":"get","path":"/get"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/event","name":"","api":[{"method":"post","path":"/global"},{"method":"post","path":"/comm"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/goods","name":"DemoGoodsEntity","api":[{"method":"post","path":"/entityPage"},{"method":"post","path":"/sqlPage"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[{"propertyName":"title","type":"string","length":"50","comment":"标题","nullable":false,"source":"a.title"}],"keyWordLikeFields":[]}},{"prefix":"/open/demo/i18n","name":"","api":[{"method":"post","path":"/en"},{"method":"post","path":"/tw"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/plugin","name":"","api":[{"method":"get","path":"/invoke"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/queue","name":"","api":[{"method":"post","path":"/addGetter"},{"method":"get","path":"/getter"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/rpc","name":"","api":[{"method":"get","path":"/transaction"},{"method":"get","path":"/event"},{"method":"get","path":"/call"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/sse","name":"","api":[{"method":"get","path":"/call"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/tenant","name":"DemoGoodsEntity","api":[],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/open/demo/transaction","name":"DemoGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/dict/info","name":"","api":[{"method":"get","path":"/types"},{"method":"post","path":"/data"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/swagger","name":"","api":[{"method":"get","path":"/json"},{"method":"get","path":"/"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/user/address","name":"UserAddressEntity","api":[{"method":"get","path":"/default"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/user/comm","name":"","api":[{"method":"post","path":"/wxMpConfig"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/user/info","name":"UserInfoEntity","api":[{"method":"post","path":"/updatePassword"},{"method":"post","path":"/updatePerson"},{"method":"post","path":"/bindPhone"},{"method":"post","path":"/miniPhone"},{"method":"get","path":"/person"},{"method":"post","path":"/logoff"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/app/user/login","name":"","api":[{"method":"post","path":"/refreshToken"},{"method":"post","path":"/miniPhone"},{"method":"post","path":"/uniPhone"},{"method":"post","path":"/password"},{"method":"get","path":"/captcha"},{"method":"post","path":"/smsCode"},{"method":"post","path":"/wxApp"},{"method":"post","path":"/phone"},{"method":"post","path":"/mini"},{"method":"post","path":"/mp"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}}] \ No newline at end of file diff --git a/components/agree-btn.vue b/components/agree-btn.vue new file mode 100644 index 0000000..b24ca38 --- /dev/null +++ b/components/agree-btn.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/components/sms-btn.vue b/components/sms-btn.vue new file mode 100644 index 0000000..b4a0ff0 --- /dev/null +++ b/components/sms-btn.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/config/dev.ts b/config/dev.ts new file mode 100644 index 0000000..7c66e8e --- /dev/null +++ b/config/dev.ts @@ -0,0 +1,17 @@ +import { host, value } from "./proxy"; + +export default { + // 根地址 + host, + + // 请求地址 + get baseUrl() { + // #ifdef H5 + return `/${value}`; + // #endif + + // #ifndef H5 + return this.host + ""; + // #endif + }, +}; diff --git a/config/index.ts b/config/index.ts new file mode 100644 index 0000000..8b2ec16 --- /dev/null +++ b/config/index.ts @@ -0,0 +1,36 @@ +import dev from "./dev"; +import prod from "./prod"; + +// 是否开发模式 +export const isDev = import.meta.env.MODE === "development"; + +// 代理环境 +const proxy = isDev ? dev : prod; + +// 配置 +export const config = { + // 应用信息 + app: { + // 应用名称 + name: "COOL-UNI", + // 应用描述 + desc: "uniapp快速开发脚手架", + // 页面配置 + pages: { + login: "/pages/user/login", + }, + // 微信配置 + wx: { + debug: false, + }, + }, + + // 忽略 + ignore: { + token: [], + }, + + ...proxy, +}; + +export * from "./proxy"; diff --git a/config/prod.ts b/config/prod.ts new file mode 100644 index 0000000..2febb95 --- /dev/null +++ b/config/prod.ts @@ -0,0 +1,17 @@ +import { proxy } from "./proxy"; + +export default { + // 根地址 + host: proxy["/prod/"].target, + + // 请求地址 + get baseUrl() { + // #ifdef H5 + return "/api"; + // #endif + + // #ifndef H5 + return this.host + "/api"; + // #endif + }, +}; diff --git a/config/proxy.ts b/config/proxy.ts new file mode 100644 index 0000000..d8afc98 --- /dev/null +++ b/config/proxy.ts @@ -0,0 +1,18 @@ +const proxy = { + "/dev/": { + target: "http://ksadmin.pyxxkj.com:8001", + changeOrigin: true, + rewrite: (path: string) => path.replace(/^\/dev/, ""), + }, + + "/prod/": { + target: "http://ksadmin.pyxxkj.com:8001", + changeOrigin: true, + rewrite: (path: string) => path.replace(/^\/prod/, "/api"), + }, +}; + +const value = "dev"; +const host = proxy[`/${value}/`]?.target; + +export { proxy, host, value }; diff --git a/cool/bootstrap/eps.ts b/cool/bootstrap/eps.ts new file mode 100644 index 0000000..06ec7d9 --- /dev/null +++ b/cool/bootstrap/eps.ts @@ -0,0 +1,91 @@ +import { merge } from "lodash-es"; +import { BaseService, service } from "../service"; +import { path2Obj } from "../utils"; +import { isDev } from "/@/config"; +import { eps } from "virtual:eps"; + +// 读取本地所有 service +const files = import.meta.glob("/service/**/*", { + eager: true, +}); + +// 数据集合 +const services: any[] = []; + +// 取值 +for (const i in files) { + try { + // @ts-ignore + services.push(new files[i].default()); + } catch (e) { + console.error(`[service] ${i} error: `, e); + } +} + +export function createEps() { + // 设置 request 方法 + function set(d: any) { + if (d.namespace) { + const a: any = new BaseService(d.namespace); + + for (const i in d) { + const { path, method = "get" } = d[i]; + + if (path) { + a.request = a.request; + + a[i] = function (data?: any) { + return this.request({ + url: path, + method, + [method.toLocaleLowerCase() == "post" ? "data" : "params"]: data, + }); + }; + } + } + + for (const i in a) { + d[i] = a[i]; + } + } else { + for (const i in d) { + set(d[i]); + } + } + } + + // 遍历每一个方法 + set(eps.service); + + // 合并 eps + merge(service, eps.service); + + // 合并[local] + merge( + service, + path2Obj( + services.map((e) => { + return { + path: (e.namespace || "").replace("app/", ""), + value: e, + }; + }) + ) + ); + + // 提示 + if (isDev) { + console.log("[cool-eps] updated"); + } +} + +// 监听 vite 触发事件 +if (import.meta.hot) { + import.meta.hot.on("eps-update", ({ service }) => { + if (service) { + eps.service = service; + } + + createEps(); + }); +} diff --git a/cool/bootstrap/index.ts b/cool/bootstrap/index.ts new file mode 100644 index 0000000..eda703e --- /dev/null +++ b/cool/bootstrap/index.ts @@ -0,0 +1,15 @@ +import { createPinia } from "pinia"; +import { createEps } from "./eps"; +import { createModules } from "./modules"; +import { type App } from "vue"; + +export async function bootstrap(app: App) { + // 状态共享存储 + app.use(createPinia()); + + // 创建 EPS + createEps(); + + // 创建 uni_modules + createModules(); +} diff --git a/cool/bootstrap/modules.ts b/cool/bootstrap/modules.ts new file mode 100644 index 0000000..7a48445 --- /dev/null +++ b/cool/bootstrap/modules.ts @@ -0,0 +1,38 @@ +import { keys, orderBy } from "lodash-es"; +import { module } from "../module"; + +export async function createModules() { + // 加载 uni_modules 插件 + const files: any = import.meta.glob("/uni_modules/cool-*/config.ts", { + eager: true, + }); + + const modules = orderBy( + keys(files).map((k) => { + const [, , name] = k.split("/"); + + return { + name, + value: files[k]?.default, + }; + }), + "order", + "desc", + ); + + for (let i in modules) { + const { name, value } = modules[i]; + const data = value ? value() : undefined; + + // 添加模块 + module.add({ + name, + ...data, + }); + + // 触发加载事件 + if (data) { + await data.onLoad?.(data.options); + } + } +} diff --git a/cool/hooks/app.ts b/cool/hooks/app.ts new file mode 100644 index 0000000..317f494 --- /dev/null +++ b/cool/hooks/app.ts @@ -0,0 +1,28 @@ +import { reactive, ref } from "vue"; +import { storage } from "../utils"; +import { config } from "/@/config"; +import { defineStore } from "pinia"; + +// 主题 +export const useTheme = defineStore("theme", () => { + const name = ref(storage.get("theme") || "default"); + + function set(value: string) { + name.value = value; + storage.set("theme", value); + } + + return { + name, + set, + }; +}); + +export function useApp() { + const info = reactive(config.app); + + return { + info, + theme: useTheme(), + }; +} diff --git a/cool/hooks/comm.ts b/cool/hooks/comm.ts new file mode 100644 index 0000000..520ca45 --- /dev/null +++ b/cool/hooks/comm.ts @@ -0,0 +1,11 @@ +import { reactive } from "vue"; +export function useRefs() { + const refs = reactive<{ [key: string]: any }>({}); + function setRefs(name: string) { + return (el: any) => { + refs[name] = el; + }; + } + + return { refs, setRefs }; +} diff --git a/cool/hooks/hmr.ts b/cool/hooks/hmr.ts new file mode 100644 index 0000000..e7526ae --- /dev/null +++ b/cool/hooks/hmr.ts @@ -0,0 +1,23 @@ +// 解决热更新后失效问题; +const data = import.meta.hot?.data.getData?.() || {}; + +if (import.meta.hot) { + import.meta.hot.data.getData = () => { + return data; + }; +} + +export const hmr = { + data, + + setData(key: string, value: any) { + data[key] = value; + }, + + getData(key: string, defaultValue?: any) { + if (defaultValue !== undefined && !data[key]) { + this.setData(key, defaultValue); + } + return data[key]; + } +}; diff --git a/cool/hooks/index.ts b/cool/hooks/index.ts new file mode 100644 index 0000000..5ce6407 --- /dev/null +++ b/cool/hooks/index.ts @@ -0,0 +1,21 @@ +import { router } from "../router"; +import { service } from "../service"; +import { upload } from "../upload"; +import { storage } from "../utils"; +import { useRefs } from "./comm"; + +export function useCool() { + return { + router, + service, + upload, + storage, + ...useRefs(), + }; +} + +export * from "./app"; +export * from "./comm"; +export * from "./hmr"; +export * from "./pager"; +export * from "./wx"; diff --git a/cool/hooks/pager.ts b/cool/hooks/pager.ts new file mode 100644 index 0000000..e49c306 --- /dev/null +++ b/cool/hooks/pager.ts @@ -0,0 +1,180 @@ +import { computed, getCurrentInstance, onUnmounted, reactive } from "vue"; +import { onPullDownRefresh, onReachBottom, onUnload } from "@dcloudio/uni-app"; +import { useUi } from "/$/cool-ui"; + +interface Res { + list: any[]; + pagination: { + total: number; + page: number; + size: number; + [key: string]: any; + }; + [key: string]: any; +} + +export function usePager(data: T[] = []) { + const { proxy }: any = getCurrentInstance(); + const ui = useUi(); + + // 分页信息 + const pager = reactive({ + params: {}, + pagination: { + page: 1, + size: 20, + total: 0, + }, + list: data, + loading: false, + finished: false, + }); + + // 事件 + const events: any = {}; + + // 列表 + const list = computed(() => pager.list); + + // 刷新 + async function refresh(params?: any) { + if (pager.loading) { + return false; + } + + if (proxy.refresh) { + await proxy.refresh(params); + } else if (proxy.$.exposed.refresh) { + await proxy.$.exposed.refresh(params); + } else { + console.log("use defineExpose({ refresh })"); + } + } + + // 数据 + function onData(cb: (list: T[]) => void) { + events.onData = cb; + } + + // 刷新 + function onRefresh(params: any = {}, options?: { clear?: boolean; loading?: boolean }) { + const { clear, loading = true } = options || {}; + + // 是否清空 + if (clear) { + if (params.page == 1) { + pager.list = []; + pager.finished = false; + } + } + + // 合并请求参数 + Object.assign(pager.params, params); + + const data = { + ...pager.pagination, + ...pager.params, + total: undefined, + }; + + // 是否显示加载动画 + if (data.page == 1 && loading) { + ui.showLoading(); + } + + pager.loading = true; + + // 完成 + function done() { + ui.hideLoading(); + pager.loading = false; + } + + return { + data, + done, + next: (req: Promise) => { + return new Promise((resolve, reject) => { + req.then((res: Res) => { + // 设置列表数据 + if (data.page == 1) { + pager.list = res.list; + } else { + pager.list.push(...res.list); + } + + // 追加事件 + if (events.onData) { + events.onData(res.list); + } + + // 是否加载完成 + pager.finished = pager.list.length === res.pagination.total; + // 分页信息 + pager.pagination = res.pagination; + + done(); + resolve(res); + }).catch((err) => { + done(); + ui.showToast(err.message); + reject(err); + }); + }); + }, + }; + } + + // 关闭 + function close() { + isReg = false; + ui.hideLoading(); + } + + // 下拉刷新 + async function onDown(end?: () => void) { + await refresh({ page: 1 }); + end?.(); + } + + // 上拉加载 + function onUp() { + if (!pager.finished) { + refresh({ page: pager.pagination.page + 1 }); + } + } + + // 是否注册,避免在组件中重复注入事件问题 + let isReg = true; + + // 上拉加载 + onReachBottom(() => { + if (isReg) { + onUp(); + } + }); + + // 下拉刷新 + onPullDownRefresh(() => { + if (isReg) { + onDown(uni.stopPullDownRefresh); + } + }); + + // 组件销毁 + onUnmounted(close); + + // 离开页面 + onUnload(close); + + return { + pager, + list, + onData, + onRefresh, + onPullDownRefresh, + onReachBottom, + onDown, + onUp, + }; +} diff --git a/cool/hooks/wx.ts b/cool/hooks/wx.ts new file mode 100644 index 0000000..32ac1e9 --- /dev/null +++ b/cool/hooks/wx.ts @@ -0,0 +1,289 @@ +import { ref } from "vue"; +import { onReady, onShow } from "@dcloudio/uni-app"; +import { config } from "/@/config"; +import { getUrlParam, storage } from "../utils"; +import { service } from "../service"; +import { useI18n } from "vue-i18n"; +// #ifdef H5 +import wx from "weixin-js-sdk"; +// #endif + +export function useWx() { + const { platform } = uni.getSystemInfoSync(); + const { t } = useI18n(); + + // 授权码 + const code = ref(""); + + // 获取授权码 + async function getCode() { + return new Promise((resolve) => { + // #ifdef MP-WEIXIN + uni.login({ + provider: "weixin", + success: (res) => { + code.value = res.code; + resolve(res.code); + }, + }); + // #endif + }); + } + + // 是否微信浏览器 + function isWxBrowser() { + // #ifdef H5 + const ua: any = window.navigator.userAgent.toLowerCase(); + if (ua.match(/MicroMessenger/i) == "micromessenger") { + return true; + } else { + return false; + } + // #endif + + // #ifndef H5 + return false; + // #endif + } + + // 是否安装了微信 + function hasApp() { + // #ifdef APP + return plus.runtime.isApplicationExist({ pname: "com.tencent.mm", action: "weixin://" }); + // #endif + + // #ifndef APP + return true; + // #endif + } + + // 下载微信 + function downloadApp() { + // #ifdef APP + if (platform == "android") { + const Uri: any = plus.android.importClass("android.net.Uri"); + const uri: any = Uri.parse("market://details?id=" + "com.tencent.mm"); + const Intent: any = plus.android.importClass("android.content.Intent"); + const intent: any = new Intent(Intent.ACTION_VIEW, uri); + const main: any = plus.android.runtimeMainActivity(); + main.startActivity(intent); + } else { + plus.runtime.openURL( + "itms-apps://" + "itunes.apple.com/cn/app/wechat/id414478124?mt=8" + ); + } + // #endif + } + + // 微信公众号配置 + const mpConfig = { + appId: "", + }; + + // 获取微信公众号配置 + function getMpConfig() { + // #ifdef H5 + if (isWxBrowser()) { + service.user.comm + .wxMpConfig({ + url: `${location.origin}${location.pathname}`, + }) + .then((res) => { + wx.config({ + debug: config.app.wx.debug, + jsApiList: ["chooseWXPay"], + ...res, + }); + + Object.assign(mpConfig, res); + }); + } + // #endif + } + + // 微信公众号授权 + function mpAuth() { + const redirect_uri = encodeURIComponent( + `${location.origin}${location.pathname}#/pages/user/login` + ); + const response_type = "code"; + const scope = "snsapi_userinfo"; + const state = "STATE"; + + const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${mpConfig.appId}&redirect_uri=${redirect_uri}&response_type=${response_type}&scope=${scope}&state=${state}#wechat_redirect`; + + location.href = url; + } + + // 微信公众号登录 + async function mpLogin() { + return new Promise((resolve) => { + const code = getUrlParam("code"); + const mpCode = storage.get("mpCode"); + + let url = window.location.href; + url = url.replace(/(\?[^#]*)#/, "#"); + window.history.replaceState({}, "", url); + + if (code != mpCode) { + storage.set("mpCode", code); + resolve(code); + } else { + resolve(null); + } + }); + } + + // 微信公众号支付 + async function mpPay(params: wx.IchooseWXPay & { timeStamp: number }): Promise { + return new Promise((resolve, reject) => { + if (!isWxBrowser()) { + return reject({ + message: t("请在微信浏览器中打开"), + }); + } + + wx.chooseWXPay({ + ...params, + timestamp: params.timeStamp, + success() { + resolve(); + }, + complete(e: { errMsg: string }) { + switch (e.errMsg) { + case "chooseWXPay:cancel": + reject({ message: t("已取消支付") }); + break; + + default: + reject({ message: t("支付失败") }); + } + }, + }); + }); + } + + // 微信app登录 + function appLogin(): Promise { + let all: any; + let Service: any; + return new Promise((resolve, reject) => { + plus.oauth.getServices((Services: any) => { + all = Services; + Object.keys(all).some((key) => { + if (all[key].id == "weixin") { + Service = all[key]; + } + }); + Service.authorize(resolve, reject); + }, reject); + }); + } + + // 微信app支付 + function appPay(orderInfo: { + appid: string; + noncestr: string; + package: string; + partnerid: string; + prepayid: string; + timestamp: string; + sign: string; + [key: string]: any; + }): Promise { + return new Promise((resolve, reject) => { + uni.requestPayment({ + provider: "wxpay", + orderInfo, + success() { + resolve(); + }, + fail() { + reject({ message: t("已取消支付") }); + }, + }); + }); + } + + // 微信小程序登录 + async function miniLogin(): Promise<{ code: string; [key: string]: any }> { + return new Promise((resolve, reject) => { + // 兼容 Mac + const k = platform === "mac" ? "getUserInfo" : "getUserProfile"; + + uni[k]({ + lang: "zh_CN", + desc: t("授权信息仅用于用户登录"), + success({ iv, encryptedData, signature, rawData }) { + function next() { + resolve({ + iv, + encryptedData, + signature, + rawData, + code: code.value, + }); + } + + // 检查登录状态是否过期 + uni.checkSession({ + success() { + next(); + }, + fail() { + getCode().then(next); + }, + }); + }, + fail(err) { + console.error(err); + getCode(); + + reject({ + message: t("登录授权失败"), + }); + }, + }); + }); + } + + // 微信小程序支付 + function miniPay(params: any): Promise { + return new Promise((resolve, reject) => { + uni.requestPayment({ + provider: "wxpay", + ...params, + success() { + resolve(); + }, + fail() { + reject({ message: t("已取消支付") }); + }, + }); + }); + } + + onShow(() => { + getCode(); + }); + + onReady(() => { + getMpConfig(); + }); + + return { + code, + getCode, + isWxBrowser, + hasApp, + downloadApp, + mpConfig, + mpAuth, + mpLogin, + mpPay, + miniLogin, + miniPay, + appLogin, + appPay, + }; +} diff --git a/cool/index.ts b/cool/index.ts new file mode 100644 index 0000000..550ef18 --- /dev/null +++ b/cool/index.ts @@ -0,0 +1,9 @@ +export * from "./hooks"; +export * from "./router"; +export * from "./store"; +export * from "./upload"; +export * from "./service"; +export * from "./module"; +export * from "../config"; +export type * from "./types"; +export { storage } from "./utils"; diff --git a/cool/module/index.ts b/cool/module/index.ts new file mode 100644 index 0000000..c24aa68 --- /dev/null +++ b/cool/module/index.ts @@ -0,0 +1,21 @@ +import type { Module } from "../types"; +import { hmr } from "../hooks"; + +// 模块列表 +const list: Module[] = hmr.getData("modules", []); + +// 模块对象 +const module = { + list, + get(name: string): Module { + return this.list.find((e) => e.name == name)!; + }, + config(name: string) { + return this.get(name).options || {}; + }, + add(data: Module) { + this.list.push(data); + }, +}; + +export { module }; diff --git a/cool/router/index.ts b/cool/router/index.ts new file mode 100644 index 0000000..d7d7cc8 --- /dev/null +++ b/cool/router/index.ts @@ -0,0 +1,325 @@ +import { last } from "lodash-es"; +import { ctx } from "virtual:ctx"; +import { storage } from "../utils"; +import { config } from "../../config"; + +type PushOptions = + | string + | { + path: string; + mode?: "navigateTo" | "redirectTo" | "reLaunch" | "switchTab" | "preloadPage"; + events?: { + [key: string]: (data: any) => void; + }; + query?: { + [key: string]: any; + }; + params?: { + [key: string]: any; + }; + isGuard?: boolean; + [key: string]: any; + }; + +type Tabs = { + text?: string; + pagePath: string; + iconPath?: string; + selectedIconPath?: string; + [key: string]: any; +}[]; + +// 路由列表 +const routes = [...ctx.pages]; + +// 子包 +if (ctx.subPackages) { + ctx.subPackages.forEach((a: { pages: any[]; root: string }) => { + a.pages.forEach((b) => { + routes.push({ + ...b, + path: a.root + "/" + b.path, + }); + }); + }); +} + +// 钩子函数 +const fn: { [key: string]: (...args: any[]) => any } = {}; + +// 路由 +const router = { + // 底部导航 + get tabs(): Tabs { + if (ctx.tabBar) { + return ctx.tabBar.list || []; + } else { + return []; + } + }, + + // 全局样式配置 + globalStyle: ctx.globalStyle, + + // 路由列表 + routes, + + // 跳转参数(地址栏) + get query() { + const info = this.info(); + + return { + ...info?.query, + }; + }, + + // 跳转参数(缓存) + get params() { + return storage.get("router-params") || {}; + }, + + // 页面路径 + get pages() { + return { + home: "/" + (ctx.tabBar ? this.tabs[0].pagePath : ctx.pages[0].path), + ...config.app.pages, + }; + }, + + // 当前页面信息 + currentPage(): { [key: string]: any } { + return last(getCurrentPages())!; + }, + + // 当前路由路径 + get path() { + return router.info()?.path; + }, + + // 当前路由信息 + info() { + const page = last(getCurrentPages()); + + if (page) { + const { route, $page, $vm, $getAppWebview }: any = page; + + const q: any = {}; + + try { + $page?.fullPath + .split("?")[1] + .split("&") + .forEach((e: string) => { + const [k, v] = e.split("="); + q[k] = decodeURIComponent(v); + }); + } catch (e) {} + + // 页面配置 + const style = this.routes.find((e) => e.path == route)?.style; + + let d = { + $vm, + $getAppWebview, + path: `/${route}`, + fullPath: $page?.fullPath, + query: q || {}, + isTab: this.isTab(route), + style, + isCustomNavbar: style?.navigationStyle == "custom", + }; + + return d; + } else { + return null; + } + }, + + // 路由跳转 + push(options: PushOptions) { + if (typeof options == "string") { + options = { + path: options, + mode: "navigateTo", + }; + } + + let { + path, + mode = "navigateTo", + animationType, + animationDuration, + events, + success, + fail, + complete, + query, + params, + isGuard = true, + } = options || {}; + + if (query) { + let arr = []; + + for (let i in query) { + if (query[i] !== undefined) { + arr.push(`${i}=${query[i]}`); + } + } + + path += "?" + arr.join("&"); + } + + if (params) { + storage.set("router-params", params); + } + + let data = { + url: path, + animationType, + animationDuration, + events, + success, + fail, + complete, + }; + + if (this.isTab(path)) { + mode = "switchTab"; + } + + const next = () => { + switch (mode) { + case "navigateTo": + uni.navigateTo(data); + break; + + case "redirectTo": + uni.redirectTo(data); + break; + + case "reLaunch": + uni.reLaunch(data); + break; + + case "switchTab": + uni.switchTab(data); + break; + + case "preloadPage": + uni.preloadPage(data); + break; + } + }; + + if (fn.beforeEach && isGuard) { + fn.beforeEach({ path: options.path, query }, next, (options: PushOptions) => { + this.push(options); + }); + } else { + next(); + } + }, + + // 后退 + back(options?: UniApp.NavigateBackOptions) { + if (this.isFirstPage()) { + this.home(); + } else { + uni.navigateBack(options || {}); + } + }, + + // 执行当前页面的某个方法 + callMethod(name: string, data?: any) { + const { $vm } = this.info()!; + + if ($vm) { + if ($vm.$.exposed?.[name]) { + return $vm.$.exposed[name](data); + } + } + }, + + // 页面栈长度是否只有1 + isFirstPage() { + return getCurrentPages().length == 1; + }, + + // 是否当前页 + isCurrentPage(path: string) { + return this.info()?.path == path; + }, + + // 回到首页 + home() { + this.push(this.pages.home); + }, + + // 跳转 Tab 页 + switchTab(name: string) { + let item = this.tabs.find((e) => e.pagePath.includes(name)); + + if (item) { + this.push({ + path: `/${item.pagePath}`, + mode: "switchTab", + }); + } else { + console.error("Not found tab", name); + } + }, + + // 是否是 Tab 页 + isTab(path: string) { + return !!this.tabs.find((e) => path == `/${e.pagePath}`); + }, + + // 去登陆 + login(options?: { reLaunch: boolean }) { + const { reLaunch = false } = options || {}; + + this.push({ + path: this.pages.login, + mode: reLaunch ? "reLaunch" : "navigateTo", + isGuard: false, + }); + }, + + // 登录成功后操作 + nextLogin(type?: string) { + const pages = getCurrentPages(); + const index = pages.findIndex((e) => this.pages.login.includes(e.route!)); + + if (index <= 0) { + this.home(); + } else { + router.back({ + delta: pages.length - index, + }); + } + + // 登录方式 + storage.set("loginType", type); + + // 登录回调 + if (fn.afterLogin) { + fn.afterLogin(); + } + + // 事件 + uni.$emit("afterLogin", { type }); + }, + + // 跳转前钩子 + beforeEach(callback: (to: any, next: () => void) => void) { + fn.beforeEach = callback; + }, + + // 登录后回调 + afterLogin(callback: () => void) { + fn.afterLogin = callback; + }, +}; + +export { router }; diff --git a/cool/service/base.ts b/cool/service/base.ts new file mode 100644 index 0000000..770c33c --- /dev/null +++ b/cool/service/base.ts @@ -0,0 +1,89 @@ +import { config } from "../../config"; +import request from "./request"; + +export class BaseService { + namespace?: string; + + constructor(namespace?: string) { + if (namespace) { + this.namespace = namespace; + } + } + + // 发送请求 + async request(options: any = {}) { + let url = options.url; + + if (url && url.indexOf("http") < 0) { + if (this.namespace) { + url = this.namespace + url; + } + + if (options.proxy !== false) { + url = config.baseUrl + "/" + url; + } + } + + // 处理参数 + options.data = + options.method?.toLocaleUpperCase() == "POST" ? options.data : options.params; + + return request({ + ...options, + url, + }); + } + + // 获取列表 + async list(data: any) { + return this.request({ + url: "/list", + method: "POST", + data, + }); + } + + // 分页查询 + async page(data: any) { + return this.request({ + url: "/page", + method: "POST", + data, + }); + } + + // 获取信息 + async info(params: any) { + return this.request({ + url: "/info", + params, + }); + } + + // 更新数据 + async update(data: any) { + return this.request({ + url: "/update", + method: "POST", + data, + }); + } + + // 删除数据 + async delete(data: any) { + return this.request({ + url: "/delete", + method: "POST", + data, + }); + } + + // 添加数据 + async add(data: any) { + return this.request({ + url: "/add", + method: "POST", + data, + }); + } +} diff --git a/cool/service/index.ts b/cool/service/index.ts new file mode 100644 index 0000000..8b6c684 --- /dev/null +++ b/cool/service/index.ts @@ -0,0 +1,9 @@ +import { BaseService } from "./base"; + +// service 数据集合 +// @ts-ignore +export const service: Eps.Service = { + request: new BaseService().request, +}; + +export * from "./base"; diff --git a/cool/service/request.ts b/cool/service/request.ts new file mode 100644 index 0000000..11eae91 --- /dev/null +++ b/cool/service/request.ts @@ -0,0 +1,133 @@ +import { useStore } from "../store"; +import { router } from "../router"; +import { isDev, config } from "../../config"; +import { storage } from "../utils"; +import { getLocale, t } from "/@/locale"; + +// 请求队列 +let requests: any[] = []; + +// Token 是否刷新中 +let isRefreshing = false; + +export default function request(options: any) { + const { user } = useStore(); + + // 标识 + let Authorization = user.token || ""; + + // 忽略标识 + config.ignore.token.forEach((e) => { + if (options.url.includes(e)) { + Authorization = ""; + } + }); + + if (isDev) { + console.log(`[${options.method || "GET"}] ${options.url}`); + } + + return new Promise(async (resolve, reject) => { + // 继续请求 + function next() { + uni.request({ + ...options, + + header: { + Authorization, + language: getLocale(), + ...options.header, + }, + + success(res: any) { + const { code, data, message } = res.data as { + code: number; + message: string; + data: any; + }; + + // 无权限 + if (res.statusCode === 401) { + if (router.info()?.path == router.pages.login) { + return reject({ message }); + } else { + user.logout(); + } + } + + // 服务异常 + if (res.statusCode === 502) { + return reject({ + message: t("服务异常"), + }); + } + + // 未找到 + if (res.statusCode === 404) { + return reject({ + message: `[404] ${options.url}`, + }); + } + + // 成功 + if (res.statusCode === 200) { + switch (code) { + case 1000: + resolve(data); + break; + default: + reject({ message, code }); + } + } else { + reject({ message: t("服务异常") }); + } + }, + + fail(err: any) { + reject({ message: err.errMsg }); + }, + }); + } + + // 刷新token处理 + if (!options.url.includes("refreshToken")) { + if (Authorization) { + // 判断 token 是否过期 + if (storage.isExpired("token")) { + // 判断 refreshToken 是否过期 + if (storage.isExpired("refreshToken")) { + // 退出登录 + return user.logout(); + } + + // 是否在刷新中 + if (!isRefreshing) { + isRefreshing = true; + user.refreshToken() + .then((token) => { + requests.forEach((cb) => cb(token)); + requests = []; + isRefreshing = false; + }) + .catch((err) => { + user.logout(); + reject(err); + }); + } + + return new Promise((resolve) => { + // 继续请求 + requests.push((token: string) => { + // 重新设置 token + Authorization = token; + next(); + resolve(); + }); + }); + } + } + } + + next(); + }); +} diff --git a/cool/service/sign.ts b/cool/service/sign.ts new file mode 100644 index 0000000..c4a7b15 --- /dev/null +++ b/cool/service/sign.ts @@ -0,0 +1,22 @@ +import md5 from "md5"; + +function useSign(params: any) { + const timestamp = new Date().getTime(); + + let arr = [`timestamp=${timestamp}`]; + + for (const i in params) { + arr.push(`${i}=${decodeURIComponent(params[i])}`); + } + + arr.sort(); + + const sign = md5(arr.join("&")); + + return { + timestamp, + sign, + }; +} + +export { useSign }; diff --git a/cool/store/dict.ts b/cool/store/dict.ts new file mode 100644 index 0000000..dea01e2 --- /dev/null +++ b/cool/store/dict.ts @@ -0,0 +1,67 @@ +import { defineStore } from "pinia"; +import { computed, reactive, toRaw } from "vue"; +import { deepTree, isEmpty } from "../utils"; +import { service } from "../service"; +import { isDev } from "/@/config"; +import { isString } from "lodash-es"; +import type { Dict } from "../types"; + +const useDictStore = defineStore("dict", () => { + // 对象数据 + const data = reactive({}); + + // 获取数据列表 + function get(name: Dict.Key) { + return computed(() => data[name]).value || []; + } + + // 获取名称 + function getLabel(name: Dict.Key | any[], value: any): string { + const arr: any[] = String(value)?.split(",") || []; + + return arr + .map((e) => { + return (isString(name) ? get(name) : name).find((a) => a.value == e)?.label; + }) + .filter(Boolean) + .join(","); + } + + // 刷新 + async function refresh(types?: Dict.Key[]) { + return service.dict.info + .data({ + types, + }) + .then((res: Dict.Data) => { + const d: any = {}; + + for (const [i, arr] of Object.entries(res)) { + arr.forEach((e) => { + e.label = e.name; + e.value = isEmpty(e.value) ? e.id : e.value; + }); + + d[i] = deepTree(arr, "desc"); + } + + Object.assign(data, d); + + if (isDev) { + console.log("字典数据:"); + console.log(toRaw(data)); + } + + return data; + }); + } + + return { + data, + get, + getLabel, + refresh, + }; +}); + +export { useDictStore }; diff --git a/cool/store/index.ts b/cool/store/index.ts new file mode 100644 index 0000000..f84ee40 --- /dev/null +++ b/cool/store/index.ts @@ -0,0 +1,9 @@ +import { useUserStore } from "./user"; +import { useDictStore } from "./dict"; + +export function useStore() { + return { + user: useUserStore(), + dict: useDictStore(), + }; +} diff --git a/cool/store/user.ts b/cool/store/user.ts new file mode 100644 index 0000000..39b3c8c --- /dev/null +++ b/cool/store/user.ts @@ -0,0 +1,94 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; +import { deepMerge, storage } from "../utils"; +import { router } from "../router"; +import { service } from "../service"; +import type { User } from "../types"; + +// 本地缓存 +const data = storage.info(); + +const useUserStore = defineStore("user", function () { + // 标识 + const token = ref(data.token || ""); + + // 设置标识 + function setToken(data: User.Token) { + token.value = data.token; + + // 访问 + storage.set("token", data.token, data.expire - 5); + // 刷新 + storage.set("refreshToken", data.refreshToken, data.refreshExpire - 5); + } + + // 刷新标识 + async function refreshToken() { + return service.user.login + .refreshToken({ + refreshToken: storage.get("refreshToken"), + }) + .then((res) => { + setToken(res); + return res.token; + }); + } + + // 用户信息 + const info = ref(data.userInfo); + + // 设置用户信息 + function set(value: User.Info) { + info.value = value; + storage.set("userInfo", value); + } + + // 更新用户信息 + async function update(data: User.Info & { [key: string]: any }) { + set(deepMerge(info.value, data)); + return service.user.info.updatePerson(data); + } + + // 清除用户 + function clear() { + storage.remove("userInfo"); + storage.remove("token"); + storage.remove("refreshToken"); + token.value = ""; + info.value = undefined; + } + + // 退出 + function logout() { + clear(); + router.login({ reLaunch: true }); + } + + // 获取用户信息 + async function get() { + return service.user.info + .person() + .then((res) => { + if (res) { + set(res); + } + return res; + }) + .catch(() => { + logout(); + }); + } + + return { + token, + setToken, + refreshToken, + info, + get, + set, + update, + logout, + }; +}); + +export { useUserStore }; diff --git a/cool/types/index.d.ts b/cool/types/index.d.ts new file mode 100644 index 0000000..6571325 --- /dev/null +++ b/cool/types/index.d.ts @@ -0,0 +1,45 @@ +export declare interface ModuleConfig { + name?: string; + description?: string; + order?: number; + demo?: { label: string; path: string }; + options?: { + [key: string]: any; + }; + onLoad?(options?: any): any; +} + +export declare interface Module extends ModuleConfig { + name: string; + options: { + [key: string]: any; + }; + [key: string]: any; +} + +export namespace User { + interface Token { + token: string; + expire: number; + refreshToken: string; + refreshExpire: number; + } + + interface Info extends Eps.UserInfoEntity {} +} + +export namespace Dict { + type Key = Eps.DictKey | (string & {}); + + interface Item { + id: string; + label: string; + value: any; + children?: Item[]; + [key: string]: any; + } + + interface Data { + [key: string]: Item[]; + } +} diff --git a/cool/upload/comm.ts b/cool/upload/comm.ts new file mode 100644 index 0000000..ad4b82b --- /dev/null +++ b/cool/upload/comm.ts @@ -0,0 +1,52 @@ +import { isArray, has, isObject } from "lodash-es"; + +type Size = number | number[] | { h?: number; w?: number; m?: string }; + +function parse(rules: string[], { url, size }: { url: string; size: Size }) { + if (!url) { + return ""; + } + + if (url.startsWith("blob:") || url.includes("file://")) { + return url; + } + + let h = 0; + let w = 0; + + if (isArray(size)) { + h = size[0]; + w = size[1]; + } else if (isObject(size) && has(size, "h")) { + h = size.h!; + w = size.w!; + + if (size.m) { + rules.push(`m_${size.m}`); + } + } else { + h = w = Number(size); + } + + url += url.includes("?") ? "&" : "?"; + + if (h) { + rules.push(`h_${h}`); + } + + if (w) { + rules.push(`w_${w}`); + } + + return `${url}${rules.join(",")}`; +} + +function videoPoster(url: string, size: Size) { + return parse(["x-oss-process=video/snapshot,t_1000,f_jpg,m_fast"], { url, size }); +} + +function resizeImage(url: string, size: Size) { + return parse(["x-oss-process=image/resize"], { url, size }); +} + +export { videoPoster, resizeImage }; diff --git a/cool/upload/index.ts b/cool/upload/index.ts new file mode 100644 index 0000000..df2bb2f --- /dev/null +++ b/cool/upload/index.ts @@ -0,0 +1,141 @@ +import dayjs from "dayjs"; +import { config } from "../../config"; +import { service } from "../service"; +import { basename, pathJoin, uuid } from "../utils"; +import { useStore } from "../store"; +import { videoPoster, resizeImage } from "./comm"; + +declare interface UploadCallback { + onProgressUpdate?(options: UniApp.OnProgressUpdateResult): void; + onTask?(task: UniApp.UploadTask): void; +} + +export async function upload(file: any, cb?: UploadCallback): Promise { + const { onProgressUpdate, onTask } = cb || {}; + + // 获取上传模式 + const { mode, type } = await service.base.comm.uploadMode(); + + // 用户缓存 + const { user } = useStore(); + + // 本地上传 + const isLocal = mode == "local"; + + // 文件名 + const fileName = uuid() + "_" + (file.name || basename(file.path)); + + // Key + const key = isLocal ? fileName : pathJoin("app", dayjs().format("YYYY-MM-DD"), fileName); + + // 多种上传请求 + return new Promise((resolve, reject) => { + // 上传文件 + function next({ host, preview, data }: { host: string; preview?: string; data?: any }) { + // 签名数据 + const fd = { + ...data, + key, + }; + + // 上传 + const task = uni.uploadFile({ + url: host, + filePath: file.path, + name: "file", + header: isLocal + ? { + Authorization: user.token, + } + : {}, + formData: fd, + success(res) { + if (isLocal) { + const { code, data, message } = JSON.parse(res.data); + if (code == 1000) { + resolve(data); + } else { + reject(message); + } + } else { + resolve(pathJoin(preview || host, fd.key)); + } + }, + fail(err) { + reject(err); + }, + }); + + if (onTask) { + onTask(task); + } + + if (onProgressUpdate) { + task.onProgressUpdate(onProgressUpdate); + } + } + + if (isLocal) { + next({ + host: config.baseUrl + "/app/base/comm/upload", + }); + } else { + service.base.comm + .upload( + type == "aws" + ? { + key, + } + : {} + ) + .then((res) => { + switch (type) { + // 腾讯 + case "cos": + next({ + host: res.url, + data: res.credentials, + }); + break; + // 阿里 + case "oss": + next({ + host: res.host, + data: { + OSSAccessKeyId: res.OSSAccessKeyId, + policy: res.policy, + signature: res.signature, + }, + }); + break; + // 七牛 + case "qiniu": + next({ + host: res.uploadUrl, + preview: res.publicDomain, + data: { + token: res.token, + }, + }); + break; + // aws + case "aws": + next({ + host: res.url, + data: res.fields, + }); + break; + } + }) + .catch(reject); + } + }); +} + +export function useUpload() { + return { + upload, + videoPoster, + resizeImage, + }; +} diff --git a/cool/utils/canvas.ts b/cool/utils/canvas.ts new file mode 100644 index 0000000..e6cecc2 --- /dev/null +++ b/cool/utils/canvas.ts @@ -0,0 +1,603 @@ +import { getCurrentInstance } from "vue"; +import { isEmpty, isString, cloneDeep, isObject } from "lodash-es"; + +// 渲染参数 +declare interface RenderOptions { + x: number; + y: number; + height?: number; + width?: number; + [key: string]: any; +} + +// 文本渲染参数 +declare interface TextRenderOptions extends RenderOptions { + text: string; + color?: string; + fontSize?: number; + textAlign?: "left" | "right" | "center"; + overflow?: "ellipsis"; + lineClamp?: number; + letterSpace?: number; + lineHeight?: number; +} + +// 图片渲染参数 +declare interface ImageRenderOptions extends RenderOptions { + url: string; + mode?: "aspectFill" | "aspectFit"; + radius?: number; +} + +// 块渲染参数 +declare interface DivRenderOptions extends RenderOptions { + radius?: number; + backgroundColor?: string; + border?: { + width: number; + color: string; + }; +} + +// 导出图片参数 +declare interface CreateImageOptins { + x?: number; + y?: number; + width?: number; + height?: number; + destWidth?: number; + destHeight?: number; + fileType?: "jpg" | "png"; + quality?: number; +} + +class Canvas { + ctx: any; + canvasId: any; + scope: any; + renderQuene: any; + imageQueue: any; + + constructor(canvasId: string) { + // 绘图上下文 + this.ctx = null; + + // canvas id + this.canvasId = canvasId; + + // 当前页面作用域 + const { proxy }: any = getCurrentInstance(); + this.scope = proxy; + + // 渲染队列 + this.renderQuene = []; + + // 图片队列 + this.imageQueue = []; + + // 创建画布 + this.create(); + } + + // 创建画布 + create() { + this.ctx = uni.createCanvasContext(this.canvasId, this.scope); + return this; + } + + // 块 + div(options: DivRenderOptions) { + let render = () => { + this.divRender(options); + }; + this.renderQuene.push(render); + return this; + } + + // 文本 + text(options: TextRenderOptions) { + let render = () => { + this.textRender(options); + }; + this.renderQuene.push(render); + return this; + } + + // 图片 + image(options: ImageRenderOptions) { + let render = () => { + this.imageRender(options); + }; + this.imageQueue.push(options); + this.renderQuene.push(render); + return this; + } + + // 绘画 + draw(save = false) { + return new Promise((resolve) => { + let next = () => { + this.render(); + this.ctx.draw(save, () => { + resolve(true); + }); + }; + + if (!isEmpty(this.imageQueue)) { + this.preLoadImage().then(next); + } else { + next(); + } + }); + } + + // 生成图片 + createImage(options?: CreateImageOptins): Promise { + return new Promise((resolve, reject) => { + let data = { + canvasId: this.canvasId, + ...options, + success: (res: any) => { + // #ifdef MP-ALIPAY + resolve(res.apFilePath); + // #endif + + // #ifndef MP-ALIPAY + resolve(res.tempFilePath); + // #endif + }, + fail: reject, + }; + + // #ifdef MP-ALIPAY + this.ctx.toTempFilePath(data); + // #endif + + // #ifndef MP-ALIPAY + uni.canvasToTempFilePath(data, this.scope); + // #endif + }); + } + + // 保存图片 + saveImage(options?: CreateImageOptins) { + uni.showLoading({ + title: "图片下载中...", + }); + this.createImage(options).then((path: any) => { + return new Promise((resolve) => { + uni.hideLoading(); + uni.saveImageToPhotosAlbum({ + filePath: path, + success: () => { + uni.showToast({ + title: "保存图片成功", + }); + resolve(path); + }, + fail: (err) => { + // #ifdef MP-ALIPAY + uni.showToast({ + title: "保存图片成功", + }); + // #endif + + // #ifndef MP-ALIPAY + uni.showToast({ + title: "保存图片失败", + icon: "none", + }); + // #endif + }, + }); + }); + }); + } + + // 预览图片 + previewImage(options?: CreateImageOptins) { + this.createImage(options).then((url: string | any) => { + uni.previewImage({ + urls: [url], + }); + }); + } + + // 下载图片 + downLoadImage(item: any) { + return new Promise((resolve, reject) => { + if (!item.url) { + return reject("url 不能为空"); + } + + // 处理base64 + // #ifdef MP + if (item.url.indexOf("data:image") >= 0) { + let extName = item.url.match(/data\:\S+\/(\S+);/); + if (extName) { + extName = extName[1]; + } + const fs = uni.getFileSystemManager(); + const fileName = Date.now() + "." + extName; + // @ts-ignore + const filePath = wx.env.USER_DATA_PATH + "/" + fileName; + + return fs.writeFile({ + filePath, + data: item.url.replace(/^data:\S+\/\S+;base64,/, ""), + encoding: "base64", + success: () => { + item.url = filePath; + resolve(filePath); + }, + }); + } + // #endif + + // 是否网络图片 + const isHttp = item.url.includes("http"); + + uni.getImageInfo({ + src: item.url, + success: (result) => { + item.sheight = result.height; + item.swidth = result.width; + + if (isHttp) { + item.url = result.path; + } + + resolve(item.url); + }, + fail: (err) => { + console.log(err, item.url); + reject(err); + }, + }); + + return 1; + }); + } + + // 预加载图片 + async preLoadImage() { + await Promise.all(this.imageQueue.map(this.downLoadImage)); + } + + // 设置背景颜色 + setBackground(options: any) { + if (!options) return null; + + let backgroundColor; + + if (!isString(options)) { + backgroundColor = options; + } + + if (isString(options.backgroundColor)) { + backgroundColor = options.backgroundColor; + } + + if (isObject(options.backgroundColor)) { + let { startX, startY, endX, endY, gradient } = options.backgroundColor; + const rgb = this.ctx.createLinearGradient(startX, startY, endX, endY); + for (let i = 0, l = gradient.length; i < l; i++) { + rgb.addColorStop(gradient[i].step, gradient[i].color); + } + backgroundColor = rgb; + } + + this.ctx.setFillStyle(backgroundColor); + + return this; + } + + // 设置边框 + setBorder(options: any) { + if (!options.border) return this; + + let { x, y, width: w, height: h, border, radius: r } = options; + + if (border.width) { + this.ctx.setLineWidth(border.width); + } + + if (border.color) { + this.ctx.setStrokeStyle(border.color); + } + + // 偏移距离 + let p = border.width / 2; + + // 是否有圆角 + if (r) { + this.drawRadiusRoute(x - p, y - p, w + 2 * p, h + 2 * p, r + p); + this.ctx.stroke(); + } else { + this.ctx.strokeRect(x - p, y - p, w + 2 * p, h + 2 * p); + } + + return this; + } + + // 设置缩放,旋转 + setTransform(options: any) { + if (options.scale) { + } + if (options.rotate) { + } + } + + // 带有圆角的路径绘制 + drawRadiusRoute(x: number, y: number, w: number, h: number, r: number) { + this.ctx.beginPath(); + this.ctx.moveTo(x + r, y, y); + this.ctx.lineTo(x + w - r, y); + this.ctx.arc(x + w - r, y + r, r, 1.5 * Math.PI, 0); + this.ctx.lineTo(x + w, y + h - r); + this.ctx.arc(x + w - r, y + h - r, r, 0, 0.5 * Math.PI); + this.ctx.lineTo(x + r, y + h); + this.ctx.arc(x + r, y + h - r, r, 0.5 * Math.PI, Math.PI); + this.ctx.lineTo(x, y + r); + this.ctx.arc(x + r, y + r, r, Math.PI, 1.5 * Math.PI); + this.ctx.closePath(); + } + + // 裁剪图片 + cropImage( + mode: "aspectFill" | "aspectFit", + width: number, + height: number, + sWidth: number, + sHeight: number, + x: number, + y: number + ) { + let cx, cy, cw, ch, sx, sy, sw, sh; + switch (mode) { + case "aspectFill": + if (width <= height) { + let p = width / sWidth; + cw = width; + ch = sHeight * p; + cx = 0; + cy = (height - ch) / 2; + } else { + let p = height / sHeight; + cw = sWidth * p; + ch = height; + cx = (width - cw) / 2; + cy = 0; + } + break; + case "aspectFit": + if (width <= height) { + let p = height / sHeight; + sw = width / p; + sh = sHeight; + sx = x + (sWidth - sw) / 2; + sy = y; + } else { + let p = width / sWidth; + sw = sWidth; + sh = height / p; + sx = x; + sy = y + (sHeight - sh) / 2; + } + break; + } + return { cx, cy, cw, ch, sx, sy, sw, sh }; + } + + // 获取文本内容 + getTextRows({ + text, + fontSize = 14, + width = 100, + lineClamp = 1, + overflow, + letterSpace = 0, + }: any) { + let arr: any[] = [[]]; + let a = 0; + + for (let i = 0; i < text.length; i++) { + let b = this.getFontPx(text[i], { fontSize, letterSpace }); + + if (a + b > width) { + a = b; + arr.push(text[i]); + } else { + // 最后一行且设置超出省略号 + if ( + overflow == "ellipsis" && + arr.length == lineClamp && + a + 3 * this.getFontPx(".", { fontSize, letterSpace }) > width - 5 + ) { + arr[arr.length - 1] += "..."; + break; + } else { + a += b; + arr[arr.length - 1] += text[i]; + } + } + } + + return arr; + } + + // 获取单个字体像素大小 + getFontPx(text: string, { fontSize = 14, letterSpace }: any) { + if (!text) { + return fontSize / 2 + fontSize / 14 + letterSpace; + } + + let ch = text.charCodeAt(0); + + if ((ch >= 0x0001 && ch <= 0x007e) || (0xff60 <= ch && ch <= 0xff9f)) { + return fontSize / 2 + fontSize / 14 + letterSpace; + } else { + return fontSize + letterSpace; + } + } + + // 渲染块 + divRender(options: DivRenderOptions) { + this.ctx.save(); + this.setBackground(options); + this.setBorder(options); + this.setTransform(options); + + // 区分是否有圆角采用不同模式渲染 + if (options.radius) { + let { x, y } = options; + let w = options.width || 0; + let h = options.height || 0; + let r = options.radius || 0; + // 画路径 + this.drawRadiusRoute(x, y, w, h, r); + // 填充 + this.ctx.fill(); + } else { + this.ctx.fillRect(options.x, options.y, options.width, options.height); + } + this.ctx.restore(); + } + + // 渲染文本 + textRender(options: TextRenderOptions) { + let { + fontSize = 14, + textAlign, + width, + color = "#000000", + x, + y, + letterSpace, + lineHeight = 14, + } = options || {}; + + this.ctx.save(); + + // 设置字体大小 + this.ctx.setFontSize(fontSize); + + // 设置字体颜色 + this.ctx.setFillStyle(color); + + // 获取文本内容 + let rows = this.getTextRows(options); + + // 获取文本行高 + let lh = lineHeight - fontSize; + + // 左偏移 + let offsetLeft = 0; + + // 字体对齐 + if (textAlign && width) { + this.ctx.textAlign = textAlign; + + switch (textAlign) { + case "left": + break; + case "center": + offsetLeft = width / 2; + break; + case "right": + offsetLeft = width; + break; + } + } + + // 逐行写入 + for (let i = 0; i < rows.length; i++) { + let d = offsetLeft; + + if (letterSpace) { + for (let j = 0; j < rows[i].length; j++) { + // 写入文字 + this.ctx.fillText(rows[i][j], x + d, (i + 1) * fontSize + y + lh * i); + + // 设置偏移 + d += this.getFontPx(rows[i][j], options); + } + } else { + // 写入文字 + this.ctx.fillText(rows[i], x + offsetLeft, (i + 1) * fontSize + y + lh * i); + } + } + + this.ctx.restore(); + } + + // 渲染图片 + imageRender(options: ImageRenderOptions) { + this.ctx.save(); + + if (options.radius) { + // 画路径 + this.drawRadiusRoute( + options.x, + options.y, + options.width || options.swidth, + options.height || options.sHeight, + options.radius + ); + // 填充 + this.ctx.fill(); + // 裁剪 + this.ctx.clip(); + } + let temp = cloneDeep(this.imageQueue[0]); + + if (options.mode) { + let { cx, cy, cw, ch, sx, sy, sw, sh } = this.cropImage( + options.mode, + temp.swidth, + temp.sheight, + temp.width, + temp.height, + temp.x, + temp.y + ); + switch (options.mode) { + case "aspectFit": + this.ctx.drawImage(temp.url, sx, sy, sw, sh); + break; + case "aspectFill": + this.ctx.drawImage( + temp.url, + cx, + cy, + cw, + ch, + temp.x, + temp.y, + temp.width, + temp.height + ); + break; + } + } else { + this.ctx.drawImage( + temp.url, + temp.x, + temp.y, + temp.width || temp.swidth, + temp.height || temp.sheight + ); + } + this.imageQueue.shift(); + this.ctx.restore(); + } + + // 渲染全部 + render() { + this.renderQuene.forEach((ele: any) => { + ele(); + }); + } +} + +export { Canvas }; diff --git a/cool/utils/comm.ts b/cool/utils/comm.ts new file mode 100644 index 0000000..ce4a490 --- /dev/null +++ b/cool/utils/comm.ts @@ -0,0 +1,168 @@ +import { orderBy } from "lodash-es"; + +export const { platform } = uni.getSystemInfoSync(); + +// 是否安卓 +export const isAndroid = platform == "android"; + +// 是否苹果 +export const isIos = platform == "ios"; + +// 是否小数 +export function isDecimal(value: any): boolean { + return String(value).length - String(value).indexOf(".") + 1 > 0; +} + +// 首字母大写 +export function firstUpperCase(value: string): string { + return value.replace(/\b(\w)(\w*)/g, function ($0, $1, $2) { + return $1.toUpperCase() + $2; + }); +} + +// 深度合并 +export function deepMerge(a: any, b: any) { + let k; + for (k in b) { + a[k] = + a[k] && a[k].toString() === "[object Object]" ? deepMerge(a[k], b[k]) : (a[k] = b[k]); + } + return a; +} + +// 获取地址栏参数 +export function getUrlParam(name: string): string | null { + const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); + const r = window.location.search.substr(1).match(reg); + if (r != null) return decodeURIComponent(r[2]); + return null; +} + +// 列表转树形 +export function deepTree(list: any[], sort?: "desc" | "asc"): any[] { + const newList: any[] = []; + const map: any = {}; + + orderBy(list, "orderNum", sort) + .map((e) => { + map[e.id] = e; + return e; + }) + .forEach((e) => { + const parent = map[e.parentId]; + + if (parent) { + (parent.children || (parent.children = [])).push(e); + } else { + newList.push(e); + } + }); + + return newList; +} + +// 路径转对象 +export function path2Obj(list: any[]) { + const data: any = {}; + + list.forEach(({ path, value }) => { + const arr: string[] = path.split("/"); + const parents = arr.slice(0, arr.length - 1); + const name = basename(path).replace(".ts", ""); + + let curr = data; + + parents.forEach((k) => { + if (!curr[k]) { + curr[k] = {}; + } + + curr = curr[k]; + }); + + curr[name] = value; + }); + + return data; +} + +// 路径拼接 +export function pathJoin(...parts: string[]): string { + if (parts.length === 0) { + return ""; + } + + const firstPart = parts[0]; + let isAbsolute = false; + + // 检查第一个部分是否以 "http" 开头,以确定路径类型(绝对还是相对) + if (firstPart.startsWith("http")) { + isAbsolute = true; + } + + // 标准化路径,去除任何开头或结尾的斜杠 + const normalizedParts = parts.map((part) => part.replace(/(^\/+|\/+$)/g, "")); + + if (isAbsolute) { + // 如果是绝对路径,使用斜杠连接部分 + return normalizedParts.join("/"); + } else { + // 如果是相对路径,使用平台特定的分隔符连接部分 + return normalizedParts.join("/"); + } +} + +// 文件名 +export function filename(path: string): string { + return basename(path.substring(0, path.lastIndexOf("."))); +} + +// 路径名称 +export function basename(path: string): string { + let index = path.lastIndexOf("/"); + index = index > -1 ? index : path.lastIndexOf("\\"); + if (index < 0) { + return path; + } + return path.substring(index + 1); +} + +// 文件扩展名 +export function extname(path: string): string { + return path.substring((path || "").lastIndexOf(".") + 1); +} + +// 横杠转驼峰 +export function toCamel(str: string): string { + return str.replace(/([^-])(?:-+([^-]))/g, function ($0, $1, $2) { + return $1 + $2.toUpperCase(); + }); +} + +// uuid +export function uuid(): string { + const s: any[] = []; + const hexDigits = "0123456789abcdef"; + for (let i = 0; i < 36; i++) { + s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); + } + s[14] = "4"; + s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); + s[8] = s[13] = s[18] = s[23] = "-"; + + return s.join(""); +} + +// 延迟 +export function sleep(duration: number) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(true); + }, duration); + }); +} + +// 是否为空 +export function isEmpty(val: any) { + return val === "" || val === null || val === undefined; +} diff --git a/cool/utils/index.ts b/cool/utils/index.ts new file mode 100644 index 0000000..873f805 --- /dev/null +++ b/cool/utils/index.ts @@ -0,0 +1,4 @@ +export * from "./comm"; +export * from "./ui"; +export * from "./canvas"; +export * from "./storage"; diff --git a/cool/utils/storage.ts b/cool/utils/storage.ts new file mode 100644 index 0000000..d12606b --- /dev/null +++ b/cool/utils/storage.ts @@ -0,0 +1,75 @@ +export const storage = { + // 后缀标识 + suffix: "_deadtime", + + /** + * 获取 + * @param {*} key 关键字 + */ + get(key: string): any { + return uni.getStorageSync(key); + }, + + /** + * 获取全部 + */ + info() { + const { keys } = uni.getStorageInfoSync(); + const d: any = {}; + + keys.forEach((e: string) => { + d[e] = uni.getStorageSync(e); + }); + + return d; + }, + + /** + * 设置 + * @param {*} key 关键字 + * @param {*} value 值 + * @param {*} expires 过期时间 + */ + set(key: string, value: any, expires?: number): void { + uni.setStorageSync(key, value); + + if (expires) { + uni.setStorageSync( + `${key}${this.suffix}`, + Date.parse(String(new Date())) + expires * 1000 + ); + } + }, + + /** + * 是否过期 + * @param {*} key 关键字 + */ + isExpired(key: string): boolean { + return uni.getStorageSync(`${key}${this.suffix}`) - Date.parse(String(new Date())) <= 0; + }, + + /** + * 删除 + * @param {*} key 关键字 + */ + remove(key: string) { + return uni.removeStorageSync(key); + }, + + /** + * 清理 + */ + clear() { + uni.clearStorageSync(); + }, + + /** + * 获取一次后删除 + */ + once(key: string) { + const value = this.get(key); + this.remove(key); + return value; + }, +}; diff --git a/cool/utils/ui.ts b/cool/utils/ui.ts new file mode 100644 index 0000000..212c96d --- /dev/null +++ b/cool/utils/ui.ts @@ -0,0 +1,72 @@ +import { isArray, isEmpty, isNumber } from "lodash-es"; +import { computed, getCurrentInstance, nextTick, ref } from "vue"; + +// 获取父组件 +export function getParent(name: string, k1: string[], k2?: string[]) { + const { proxy }: any = getCurrentInstance(); + + const d = ref(); + let n = 10; + + const next = () => { + let parent = proxy.$parent; + + while (parent) { + if (parent.$options.name !== name) { + parent = parent.$parent; + } else { + if (isArray(k2)) { + nextTick(() => { + const child: any = {}; + + (k2 || []).map((key: string) => { + if (proxy[key]) { + child[key] = proxy[key]; + } + }); + + if (!parent.__children) { + parent.__children = []; + } + + if (!isEmpty(child)) { + parent.__children.push(child); + } + }); + } + + return (k1 || []).reduce((res: any, key: string) => { + res[key] = parent[key]; + + return res; + }, {}); + } + } + + return parent || d.value; + }; + + return computed(() => next()); +} + +// 获取元素位置信息 +export async function getRect(selector: string): Promise { + return new Promise((resolve) => { + uni.createSelectorQuery() + .select(selector) + .boundingClientRect((res) => { + resolve(res); + }) + .exec(); + }); +} + +// 解析rpx +export function parseRpx(val: any): string { + return isArray(val) ? val.map(parseRpx).join(" ") : isNumber(val) ? `${val}rpx` : val; +} + +// px 转 rpx +export function px2Rpx(px: number) { + return px / (uni.upx2px(100) / 100); +} diff --git a/doc/logo.png b/doc/logo.png new file mode 100644 index 0000000..09c9c65 Binary files /dev/null and b/doc/logo.png differ diff --git a/hooks/index.ts b/hooks/index.ts new file mode 100644 index 0000000..deea72e --- /dev/null +++ b/hooks/index.ts @@ -0,0 +1,20 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; + +// 方式一,创建缓存方式 +export const useTest = defineStore("test", () => { + const data = ref(); + + return { + data, + }; +}); + +// 方式2 +export function useTest2() { + const data = ref(); + + return { + data, + }; +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..a1c12bf --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + + + + + + + +
+ + + diff --git a/locale/en.json b/locale/en.json new file mode 100644 index 0000000..015f7a5 --- /dev/null +++ b/locale/en.json @@ -0,0 +1,132 @@ +{ + "已阅读并同意": "Read and Agree", + "和": "and", + "请先勾选同意后再进行登录": "Please check the agreement before logging in", + "page.设置": "Settings", + "page.编辑": "Edit", + "page.关于我们": "About Us", + "演示": "Demo", + "官网": "Official Website", + "系统": "System", + "我的": "Mine", + "清空": "Clear", + "确认": "Confirm", + "暂无数据": "No data", + "取消": "Cancel", + "账号": "Account", + "头像": "Avatar", + "昵称": "Nickname", + "手机号": "Mobile number", + "关于": "About", + "用户协议": "User agreement", + "隐私政策": "Privacy policy", + "切换账号": "Switch account", + "退出登录": "Log out", + "头像更新成功": "Avatar updated successfully", + "手机号登录": "Log in with mobile number", + "请填写手机号码": "Please fill in the mobile number", + "微信一键登录": "One-click login with WeChat", + "其他登录方式": "Other login methods", + "获取你的头像、昵称": "Get your avatar and nickname", + "用于向用户提供有辨识度的界面": "Used to provide a recognizable interface for users", + "请选择所在地区": "Please select your region", + "搜索": "Search", + "顶部": "Top", + "正在刷新": "Refreshing", + "下拉刷新": "Pull down to refresh", + "释放刷新": "Release to refresh", + "选择支付方式": "Select payment method", + "取消支付": "Cancel payment", + "微信支付": "WeChat Pay", + "支付宝支付": "Alipay", + "加载中": "Loading", + "提示": "Tip", + "上拉加载更多": "Pull up to load more", + "没有更多了": "No more", + "搜索关键字": "Search keyword", + "请填写": "Please fill in", + "上一步": "Previous step", + "下一步": "Next step", + "跳过": "Skip", + "完成": "Finish", + "上传/拍摄": "Upload/Take Photo", + "图片地址错误": "Image Address Error", + "拖动验证": "Drag to Verify", + "请向右拖动滑块完成拼图": "Drag the slider to complete the puzzle", + "请拖动滑块旋转至正确位置": "Drag the slider to rotate to the correct position", + "分享至": "Share to", + "QQ好友": "QQ Friends", + "朋友圈": "Moments", + "微信好友": "WeChat Friends", + "确定": "OK", + "请选择": "Please Select", + "选择": "Select", + "选择日期": "Select Date", + "请选择时间": "Please Select Time", + "年": "Year", + "月": "Month", + "日": "Day", + "时": "Hour", + "分": "Minute", + "秒": "Second", + "未登录": "Not logged in", + "写签名会更容易获得别人的关注哦~": "Writing a signature makes it easier to gain others' attention~", + "总点击": "Total clicks", + "赞": "Like", + "关注": "Follow", + "粉丝": "Fans", + "接单模式": "Order receiving mode", + "已关闭": "Closed", + "消息通知": "Message notification", + "已开启": "Enabled", + "我的订单": "My orders", + "我的账单": "My bills", + "观看历史": "Viewing history", + "数据看板": "Data dashboard", + "邀请好友": "Invite friends", + "设置": "Settings", + "待支付": "Pending payment", + "未发货": "Not shipped", + "已发货": "Shipped", + "售后 / 退款": "After-sales / Refund", + "订单模块不存在,请在插件市场中下载": "Order module does not exist. Please download it in the plugin market.", + "财务模块不存在,请在插件市场中下载": "Finance module does not exist. Please download it in the plugin market.", + "消息模块不存在,请在插件市场中下载": "Message module does not exist. Please download it in the plugin market.", + "uniapp快速开发脚手架": "Uniapp rapid development scaffolding", + "选择语言": "Select Language", + "插件 / 模块": "Plugin/Module", + "服务异常": "Service exception", + "请在微信浏览器中打开": "Please open in WeChat browser", + "已取消支付": "Payment has been cancelled", + "支付失败": "Payment failed", + "授权信息仅用于用户登录": "Authorization information is only used for user login", + "登录授权失败": "Login authorization failed", + "获取短信验证码": "Get SMS verification code", + "验证码": "Verification code", + "发送短信": "Send SMS", + "{n}s后重新获取": "Retry in {n}s", + "获取验证码": "Get verification code", + "短信已发送,请查收": "SMS has been sent. Please check.", + "请填写验证码": "Please fill in the verification code", + "请填写正确的手机号格式": "Please fill in the correct mobile phone number format", + "请填写昵称、限16个字符或汉字": "Please fill in your nickname, limited to 16 characters or Chinese characters", + "保存": "Save", + "通过手机登录": "Log in via mobile phone", + "通过微信登录": "Log in via WeChat", + "温馨提示": "Warm reminder", + "您还未安装微信~": "You haven't installed WeChat yet~", + "去下载": "Go to download", + "手机号一键登录": "One-key login with mobile number", + "当前环境不支持一键登录,请切换至验证码登录": "One-key login is not supported in the current environment. Please switch to verification code login", + "一键登录": "One-key login", + "我已阅读并同意": "I have read and agreed", + "并使用本机号码登录": "And log in with this mobile number", + "请上传头像": "Please upload an avatar", + "请输入昵称": "Please enter your nickname", + "请填写昵称": "Please fill in your nickname", + "用户信息保存成功": "User information saved successfully", + "输入验证码": "Enter verification code", + "已发送至": "Has been sent to", + "登录失效,请重试~": "Login expired, please try again~", + "联系我们": "Contact us" +} \ No newline at end of file diff --git a/locale/es.json b/locale/es.json new file mode 100644 index 0000000..87af568 --- /dev/null +++ b/locale/es.json @@ -0,0 +1,132 @@ +{ + "已阅读并同意": "Leído y aceptado", + "和": "y", + "请先勾选同意后再进行登录": "Por favor, marque la casilla de verificación de aceptación antes de iniciar sesión", + "page.设置": "Configuración", + "page.编辑": "Edición", + "page.关于我们": "Sobre nosotros", + "演示": "Demostración", + "官网": "Sitio web oficial", + "系统": "Sistema", + "我的": "Mío", + "请选择所在地区": "Por favor, selecciona la región", + "搜索": "Buscar", + "顶部": "Superior", + "正在刷新": "Refrescando", + "下拉刷新": "Deslizar hacia abajo para actualizar", + "释放刷新": "Soltar para actualizar", + "选择支付方式": "Seleccionar método de pago", + "取消支付": "Cancelar pago", + "微信支付": "Pago con WeChat", + "支付宝支付": "Pago con Alipay", + "加载中": "Cargando", + "提示": "Advertencia", + "上拉加载更多": "Deslizar hacia arriba para cargar más", + "没有更多了": "No hay más", + "搜索关键字": "Palabra clave de búsqueda", + "请填写": "Por favor, complete", + "上一步": "Paso anterior", + "下一步": "Paso siguiente", + "跳过": "Saltar", + "完成": "Completar", + "未登录": "No registrado", + "写签名会更容易获得别人的关注哦~": "Escribir una firma te ayudará a llamar más la atención de los demás.", + "总点击": "Total de clics", + "赞": "Me gusta", + "关注": "Seguir", + "粉丝": "Seguidores", + "接单模式": "Modo de recibir pedidos", + "已关闭": "Cerrado", + "消息通知": "Notificaciones de mensajes", + "已开启": "Encendido", + "我的订单": "Mis pedidos", + "我的账单": "Mi factura", + "观看历史": "Historial de reproducción", + "数据看板": "Tablero de datos", + "邀请好友": "Invitar amigos", + "设置": "Configuración", + "待支付": "Por pagar", + "未发货": "No enviado", + "已发货": "Enviado", + "售后 / 退款": "Servicio después de la venta / Reembolso", + "清空": "Limpiar", + "确认": "Confirmar", + "暂无数据": "Sin datos", + "取消": "Cancelar", + "账号": "Cuenta", + "头像": "Avatar", + "昵称": "Nombre de usuario", + "手机号": "Número de teléfono", + "关于": "Acerca de", + "用户协议": "Términos de usuario", + "隐私政策": "Política de privacidad", + "切换账号": "Cambiar de cuenta", + "退出登录": "Cerrar sesión", + "头像更新成功": "Actualización de avatar exitosa", + "手机号登录": "Inicio de sesión con número de teléfono", + "请填写手机号码": "Por favor ingrese su número de teléfono", + "微信一键登录": "Inicio de sesión con WeChat de un solo clic", + "其他登录方式": "Otros métodos de inicio de sesión", + "获取你的头像、昵称": "Obtener su avatar y nombre de usuario", + "用于向用户提供有辨识度的界面": "Para proporcionar una interfaz identificable al usuario", + "上传/拍摄": "Subir/Tomar", + "图片地址错误": "Dirección de imagen incorrecta", + "拖动验证": "Arrastrar para validar", + "请向右拖动滑块完成拼图": "Arrastre el deslizador hacia la derecha para completar el rompecabezas", + "请拖动滑块旋转至正确位置": "Arrastre el deslizador y girelo hasta la posición correcta", + "分享至": "Compartir a", + "QQ好友": "Amigos de QQ", + "朋友圈": "Momento", + "微信好友": "Amigos de WeChat", + "确定": "Aceptar", + "请选择": "Seleccionar", + "选择": "Selección", + "选择日期": "Seleccionar fecha", + "请选择时间": "Seleccionar hora", + "年": "Año", + "月": "Mes", + "日": "Día", + "时": "Hora", + "分": "Minuto", + "秒": "Segundo", + "请填写昵称、限16个字符或汉字": "Por favor complete el nombre de usuario, máximo 16 caracteres o chinos", + "保存": "Guardar", + "通过手机登录": "Iniciar sesión con el teléfono móvil", + "通过微信登录": "Iniciar sesión con WeChat", + "温馨提示": "Advertencia", + "您还未安装微信~": "Aún no has instalado WeChat~", + "去下载": "Ir a descargar", + "手机号一键登录": "Iniciar sesión con un solo toque del número de teléfono", + "当前环境不支持一键登录,请切换至验证码登录": "La autenticación unificada no está disponible en el entorno actual. Cambie a la autenticación con código de verificación", + "一键登录": "Autenticación unificada", + "我已阅读并同意": "He leído y aceptado", + "并使用本机号码登录": "Y usar el número de este teléfono para iniciar sesión", + "请上传头像": "Por favor cargue una foto de perfil", + "请输入昵称": "Por favor ingrese el nombre de usuario", + "请填写昵称": "Por favor complete el nombre de usuario", + "用户信息保存成功": "La información del usuario se ha guardado correctamente", + "输入验证码": "Ingrese el código de verificación", + "已发送至": "Se ha enviado a", + "登录失效,请重试~": "La sesión ha caducado. Inténtelo de nuevo~", + "联系我们": "Contáctenos", + "订单模块不存在,请在插件市场中下载": "El módulo de pedidos no existe. Descárguelo en el mercado de complementos.", + "财务模块不存在,请在插件市场中下载": "El módulo financiero no existe. Descárguelo en el mercado de complementos.", + "消息模块不存在,请在插件市场中下载": "El módulo de mensajes no existe. Descárguelo en el mercado de complementos.", + "uniapp快速开发脚手架": "Entorno de desarrollo rápido de uniapp", + "选择语言": "Seleccionar idioma", + "插件 / 模块": "Complementos / Módulos", + "服务异常": "Error en el servicio", + "请在微信浏览器中打开": "Abra en el navegador de WeChat", + "已取消支付": "Pago cancelado", + "支付失败": "Fallo en el pago", + "授权信息仅用于用户登录": "La información de autorización solo se utiliza para el inicio de sesión de usuario", + "登录授权失败": "Fallo en la autorización de inicio de sesión", + "获取短信验证码": "Obtener código de verificación por SMS", + "验证码": "Código de verificación", + "发送短信": "Enviar SMS", + "{n}s后重新获取": "Obtener de nuevo en {n} s", + "获取验证码": "Obtener código de verificación", + "短信已发送,请查收": "El SMS se ha enviado. Compruebe su bandeja de entrada.", + "请填写验证码": "Por favor, rellene el código de verificación", + "请填写正确的手机号格式": "Por favor, introduzca un número de teléfono válido" +} \ No newline at end of file diff --git a/locale/fr.json b/locale/fr.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/locale/fr.json @@ -0,0 +1 @@ +{} diff --git a/locale/index.ts b/locale/index.ts new file mode 100644 index 0000000..eab9db6 --- /dev/null +++ b/locale/index.ts @@ -0,0 +1,53 @@ +import { createI18n } from "vue-i18n"; +import zhHans from "./zh-Hans.json"; +import zhHant from "./zh-Hant.json"; +import en from "./en.json"; +import es from "./es.json"; +import fr from "./fr.json"; + +const i18n = createI18n({ + locale: uni.getLocale(), + + // 配置后,使用命令 cool-i18n create 翻译,会自动更新 locale 目录 + messages: { + "zh-Hans": zhHans, + "zh-Hant": zhHant, + en, + es, + }, +}); + +const localeMap: { [key: string]: string } = { + "zh-Hans": "zh-cn", + "zh-Hant": "zh-tw", +}; + +function t(name: string, data?: any) { + let d = i18n.global.t(name, data); + + if (data) { + for (const i in data) { + d = d.replace(`{${i}}`, data[i]); + } + } + return d; +} + +function setLocale(locale: string) { + uni.setLocale(locale); + i18n.global.locale = locale; +} + +function getLocale(): string { + const locale = uni.getLocale(); + + for (const i in localeMap) { + if (i == locale) { + return localeMap[i]; + } + } + + return locale; +} + +export { i18n, t, setLocale, getLocale }; diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json new file mode 100644 index 0000000..eb08ed7 --- /dev/null +++ b/locale/zh-Hans.json @@ -0,0 +1,132 @@ +{ + "上传/拍摄": "上传/拍摄", + "图片地址错误": "图片地址错误", + "拖动验证": "拖动验证", + "请向右拖动滑块完成拼图": "请向右拖动滑块完成拼图", + "请拖动滑块旋转至正确位置": "请拖动滑块旋转至正确位置", + "分享至": "分享至", + "QQ好友": "QQ好友", + "朋友圈": "朋友圈", + "微信好友": "微信好友", + "确定": "确定", + "请选择": "请选择", + "选择": "选择", + "选择日期": "选择日期", + "请选择时间": "请选择时间", + "年": "年", + "月": "月", + "日": "日", + "时": "时", + "分": "分", + "秒": "秒", + "请选择所在地区": "请选择所在地区", + "搜索": "搜索", + "顶部": "顶部", + "正在刷新": "正在刷新", + "下拉刷新": "下拉刷新", + "释放刷新": "释放刷新", + "选择支付方式": "选择支付方式", + "取消支付": "取消支付", + "微信支付": "微信支付", + "支付宝支付": "支付宝支付", + "加载中": "加载中", + "提示": "提示", + "上拉加载更多": "上拉加载更多", + "没有更多了": "没有更多了", + "搜索关键字": "搜索关键字", + "请填写": "请填写", + "上一步": "上一步", + "下一步": "下一步", + "跳过": "跳过", + "完成": "完成", + "清空": "清空", + "确认": "确认", + "暂无数据": "暂无数据", + "取消": "取消", + "账号": "账号", + "头像": "头像", + "昵称": "昵称", + "手机号": "手机号", + "关于": "关于", + "用户协议": "用户协议", + "隐私政策": "隐私政策", + "切换账号": "切换账号", + "退出登录": "退出登录", + "头像更新成功": "头像更新成功", + "手机号登录": "手机号登录", + "请填写手机号码": "请填写手机号码", + "微信一键登录": "微信一键登录", + "其他登录方式": "其他登录方式", + "获取你的头像、昵称": "获取你的头像、昵称", + "用于向用户提供有辨识度的界面": "用于向用户提供有辨识度的界面", + "请填写昵称、限16个字符或汉字": "请填写昵称、限16个字符或汉字", + "保存": "保存", + "通过手机登录": "通过手机登录", + "通过微信登录": "通过微信登录", + "温馨提示": "温馨提示", + "您还未安装微信~": "您还未安装微信~", + "去下载": "去下载", + "手机号一键登录": "手机号一键登录", + "当前环境不支持一键登录,请切换至验证码登录": "当前环境不支持一键登录,请切换至验证码登录", + "一键登录": "一键登录", + "我已阅读并同意": "我已阅读并同意", + "并使用本机号码登录": "并使用本机号码登录", + "请上传头像": "请上传头像", + "请输入昵称": "请输入昵称", + "请填写昵称": "请填写昵称", + "用户信息保存成功": "用户信息保存成功", + "输入验证码": "输入验证码", + "已发送至": "已发送至", + "登录失效,请重试~": "登录失效,请重试~", + "联系我们": "联系我们", + "未登录": "未登录", + "写签名会更容易获得别人的关注哦~": "写签名会更容易获得别人的关注哦~", + "总点击": "总点击", + "赞": "赞", + "关注": "关注", + "粉丝": "粉丝", + "接单模式": "接单模式", + "已关闭": "已关闭", + "消息通知": "消息通知", + "已开启": "已开启", + "我的订单": "我的订单", + "我的账单": "我的账单", + "观看历史": "观看历史", + "数据看板": "数据看板", + "邀请好友": "邀请好友", + "设置": "设置", + "待支付": "待支付", + "未发货": "未发货", + "已发货": "已发货", + "售后 / 退款": "售后 / 退款", + "订单模块不存在,请在插件市场中下载": "订单模块不存在,请在插件市场中下载", + "财务模块不存在,请在插件市场中下载": "财务模块不存在,请在插件市场中下载", + "消息模块不存在,请在插件市场中下载": "消息模块不存在,请在插件市场中下载", + "uniapp快速开发脚手架": "uniapp快速开发脚手架", + "选择语言": "选择语言", + "插件 / 模块": "插件 / 模块", + "服务异常": "服务异常", + "请在微信浏览器中打开": "请在微信浏览器中打开", + "已取消支付": "已取消支付", + "支付失败": "支付失败", + "授权信息仅用于用户登录": "授权信息仅用于用户登录", + "登录授权失败": "登录授权失败", + "获取短信验证码": "获取短信验证码", + "验证码": "验证码", + "发送短信": "发送短信", + "{n}s后重新获取": "{n}s后重新获取", + "获取验证码": "获取验证码", + "短信已发送,请查收": "短信已发送,请查收", + "请填写验证码": "请填写验证码", + "请填写正确的手机号格式": "请填写正确的手机号格式", + "已阅读并同意": "已阅读并同意", + "和": "和", + "请先勾选同意后再进行登录": "请先勾选同意后再进行登录", + "page.设置": "设置", + "page.编辑": "编辑", + "page.关于我们": "关于我们", + "演示": "演示", + "官网": "官网", + "系统": "系统", + "我的": "我的" +} \ No newline at end of file diff --git a/locale/zh-Hant.json b/locale/zh-Hant.json new file mode 100644 index 0000000..4a7fad5 --- /dev/null +++ b/locale/zh-Hant.json @@ -0,0 +1,132 @@ +{ + "已阅读并同意": "已閱讀並同意", + "和": "和", + "请先勾选同意后再进行登录": "請先勾選同意後再進行登錄", + "page.设置": "設置", + "page.编辑": "編輯", + "page.关于我们": "關於我們", + "演示": "演示", + "官网": "官網", + "系统": "系統", + "我的": "我的", + "请选择所在地区": "請選擇所在地區", + "搜索": "搜尋", + "顶部": "頂部", + "正在刷新": "正在刷新", + "下拉刷新": "下拉刷新", + "释放刷新": "釋放刷新", + "选择支付方式": "選擇支付方式", + "取消支付": "取消支付", + "微信支付": "微信支付", + "支付宝支付": "支付寶支付", + "加载中": "加載中", + "提示": "提示", + "上拉加载更多": "上拉加載更多", + "没有更多了": "沒有更多了", + "搜索关键字": "搜索關鍵字", + "请填写": "請填寫", + "上一步": "上一步", + "下一步": "下一步", + "跳过": "跳過", + "完成": "完成", + "上传/拍摄": "上傳/拍攝", + "图片地址错误": "圖片地址錯誤", + "拖动验证": "拖動驗證", + "请向右拖动滑块完成拼图": "請向右拖動滑塊完成拼圖", + "请拖动滑块旋转至正确位置": "請拖動滑塊旋轉至正確位置", + "分享至": "分享至", + "QQ好友": "QQ好友", + "朋友圈": "朋友圈", + "微信好友": "微信好友", + "确定": "確定", + "请选择": "請選擇", + "选择": "選擇", + "选择日期": "選擇日期", + "请选择时间": "請選擇時間", + "年": "年", + "月": "月", + "日": "日", + "时": "時", + "分": "分", + "秒": "秒", + "未登录": "未登錄", + "写签名会更容易获得别人的关注哦~": "寫簽名會更容易獲得別人的關注哦~", + "总点击": "總點擊", + "赞": "讚", + "关注": "關注", + "粉丝": "粉絲", + "接单模式": "接單模式", + "已关闭": "已關閉", + "消息通知": "消息通知", + "已开启": "已開啟", + "我的订单": "我的訂單", + "我的账单": "我的賬單", + "观看历史": "觀看歷史", + "数据看板": "數據看板", + "邀请好友": "邀請好友", + "设置": "設置", + "待支付": "待支付", + "未发货": "未發貨", + "已发货": "已發貨", + "售后 / 退款": "售後 / 退款", + "清空": "清空", + "确认": "確認", + "暂无数据": "暂无數據", + "取消": "取消", + "账号": "帳號", + "头像": "頭像", + "昵称": "暱稱", + "手机号": "手機號", + "关于": "關於", + "用户协议": "用戶協議", + "隐私政策": "隱私政策", + "切换账号": "切換帳號", + "退出登录": "退出登錄", + "头像更新成功": "頭像更新成功", + "手机号登录": "手機號登錄", + "请填写手机号码": "請填寫手機號碼", + "微信一键登录": "微信一鍵登錄", + "其他登录方式": "其他登錄方式", + "获取你的头像、昵称": "獲取你的頭像、暱稱", + "用于向用户提供有辨识度的界面": "用於向用戶提供有辨识度的界面", + "请填写昵称、限16个字符或汉字": "請填寫暱稱、限16個字元或漢字", + "保存": "儲存", + "通过手机登录": "透過手機登入", + "通过微信登录": "透過微信登入", + "温馨提示": "溫馨提示", + "您还未安装微信~": "您還未安裝微信~", + "去下载": "去下載", + "手机号一键登录": "手機號一鍵登入", + "当前环境不支持一键登录,请切换至验证码登录": "當前環境不支援一鍵登入,請切換至驗證碼登入", + "一键登录": "一鍵登入", + "我已阅读并同意": "我已閱讀並同意", + "并使用本机号码登录": "並使用本機號碼登入", + "请上传头像": "請上傳頭像", + "请输入昵称": "請輸入暱稱", + "请填写昵称": "請填寫暱稱", + "用户信息保存成功": "用戶資訊儲存成功", + "输入验证码": "輸入驗證碼", + "已发送至": "已發送至", + "登录失效,请重试~": "登入失效,請重試~", + "联系我们": "聯繫我們", + "订单模块不存在,请在插件市场中下载": "訂單模組不存在,請在插件市場中下載", + "财务模块不存在,请在插件市场中下载": "財務模組不存在,請在插件市場中下載", + "消息模块不存在,请在插件市场中下载": "消息模組不存在,請在插件市場中下載", + "uniapp快速开发脚手架": "uniapp快速開發腳手架", + "选择语言": "選擇語言", + "插件 / 模块": "插件 / 模組", + "服务异常": "服務異常", + "请在微信浏览器中打开": "請在微信瀏覽器中打開", + "已取消支付": "已取消支付", + "支付失败": "支付失敗", + "授权信息仅用于用户登录": "授權信息僅用於用戶登錄", + "登录授权失败": "登錄授權失敗", + "获取短信验证码": "獲取短信驗證碼", + "验证码": "驗證碼", + "发送短信": "發送短信", + "{n}s后重新获取": "{n}s後重新獲取", + "获取验证码": "獲取驗證碼", + "短信已发送,请查收": "短信已發送,請查收", + "请填写验证码": "請填寫驗證碼", + "请填写正确的手机号格式": "請填寫正確的手機號格式" +} \ No newline at end of file diff --git a/main.ts b/main.ts new file mode 100644 index 0000000..6705458 --- /dev/null +++ b/main.ts @@ -0,0 +1,16 @@ +import { createSSRApp } from "vue"; +import { bootstrap } from "/@/cool/bootstrap"; +import App from "./App.vue"; +import { i18n } from "./locale"; +import "./router"; + +export function createApp() { + const app = createSSRApp(App); + app.use(i18n); + + bootstrap(app); + + return { + app, + }; +} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..52bb93d --- /dev/null +++ b/manifest.json @@ -0,0 +1,184 @@ +{ + "name" : "cool-uni", + "appid" : "__UNI__46FB202", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : 100, + "transformPx" : false, + "app-plus" : { + "usingComponents" : true, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + "modules" : { + "VideoPlayer" : {}, + "Share" : {}, + "Payment" : {}, + "OAuth" : {}, + "Geolocation" : {}, + "Camera" : {}, + "Push" : {} + }, + "distribute" : { + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ] + }, + "ios" : { + "capabilities" : { + "entitlements" : { + "com.apple.developer.associated-domains" : [] + } + }, + "idfa" : true, + "privacyDescription" : { + "NSUserTrackingUsageDescription" : "请放心,开启权限不会获取您在其他站点的隐私信息,该权限仅用于标识设备并保障服务安全与提示浏览体验" + }, + "dSYMs" : false + }, + "sdkConfigs" : { + "payment" : { + "alipay" : { + "__platform__" : [ "ios", "android" ] + }, + "weixin" : { + "__platform__" : [ "ios", "android" ], + "appid" : "wx348f72db1512fa2e", + "UniversalLinks" : "" + } + }, + "ad" : {}, + "share" : { + "weixin" : { + "appid" : "wx348f72db1512fa2e", + "UniversalLinks" : "" + } + }, + "oauth" : { + "weixin" : { + "appid" : "wx348f72db1512fa2e", + "appsecret" : "test", + "UniversalLinks" : "" + }, + "apple" : {} + }, + "geolocation" : { + "system" : { + "__platform__" : [ "ios", "android" ] + } + }, + "push" : { + "unipush" : { + "offline" : false, + "icons" : { + "small" : { + "ldpi" : "" + } + } + } + }, + "maps" : {} + }, + "icons" : { + "android" : { + "hdpi" : "unpackage/res/icons/72x72.png", + "xhdpi" : "unpackage/res/icons/96x96.png", + "xxhdpi" : "unpackage/res/icons/144x144.png", + "xxxhdpi" : "unpackage/res/icons/192x192.png" + }, + "ios" : { + "appstore" : "unpackage/res/icons/1024x1024.png", + "ipad" : { + "app" : "unpackage/res/icons/76x76.png", + "app@2x" : "unpackage/res/icons/152x152.png", + "notification" : "unpackage/res/icons/20x20.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "proapp@2x" : "unpackage/res/icons/167x167.png", + "settings" : "unpackage/res/icons/29x29.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "spotlight" : "unpackage/res/icons/40x40.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png" + }, + "iphone" : { + "app@2x" : "unpackage/res/icons/120x120.png", + "app@3x" : "unpackage/res/icons/180x180.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "notification@3x" : "unpackage/res/icons/60x60.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "settings@3x" : "unpackage/res/icons/87x87.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png", + "spotlight@3x" : "unpackage/res/icons/120x120.png" + } + } + }, + "splashscreen" : { + "useOriginalMsgbox" : true + } + }, + "safearea" : { + "bottom" : { + "offset" : "none" + } + }, + "uniStatistics" : { + "enable" : true + } + }, + "quickapp" : {}, + "mp-weixin" : { + "appid" : "wxdebc4de0b5584ca4", + "setting" : { + "urlCheck" : true, + "es6" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3", + "h5" : { + "router" : { + "base" : "./", + "mode" : "hash" + }, + "devServer" : { + "https" : false + } + }, + "locale" : "zh-Hans" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c0bc886 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2873 @@ +{ + "name": "cool-uni", + "version": "8.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "requires": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + } + }, + "@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==" + }, + "@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "requires": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "requires": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "requires": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==" + }, + "@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "requires": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "requires": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" + }, + "@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==" + }, + "@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "requires": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + } + }, + "@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "requires": { + "@babel/types": "^7.29.0" + } + }, + "@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "requires": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + } + }, + "@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "requires": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + } + }, + "@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "requires": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + } + }, + "@cool-vue/vite-plugin": { + "version": "8.0.3", + "dev": true, + "requires": { + "@vue/compiler-sfc": "^3.5.13", + "axios": "^1.6.8", + "glob": "^10.3.12", + "lodash": "^4.17.21", + "magic-string": "^0.30.17", + "prettier": "^3.4.2", + "svgo": "^3.3.2" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", + "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", + "dev": true, + "requires": { + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.30", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-dom": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", + "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "@vue/compiler-sfc": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", + "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", + "dev": true, + "requires": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.30", + "@vue/compiler-dom": "3.5.30", + "@vue/compiler-ssr": "3.5.30", + "@vue/shared": "3.5.30", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", + "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "@vue/shared": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", + "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", + "dev": true + }, + "entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true + } + } + }, + "@dcloudio/types": { + "version": "3.4.14", + "dev": true + }, + "@dcloudio/uni-app": { + "version": "3.0.0-3081220230817001", + "requires": { + "@dcloudio/uni-cloud": "3.0.0-3081220230817001", + "@dcloudio/uni-components": "3.0.0-3081220230817001", + "@dcloudio/uni-i18n": "3.0.0-3081220230817001", + "@dcloudio/uni-push": "3.0.0-3081220230817001", + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "@dcloudio/uni-stat": "3.0.0-3081220230817001", + "@vue/shared": "3.2.47" + } + }, + "@dcloudio/uni-app-vite": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-vite/-/uni-app-vite-3.0.0-3081220230817001.tgz", + "integrity": "sha512-iHmKh6hjPGh+FC6Fi4qqwT5N31QiWv9JymCLdbkOJRi71A3byDjxoH7ScSEEEg+A5AAPky6LHbmFmznPMeSwAg==", + "dev": true, + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001", + "@dcloudio/uni-i18n": "3.0.0-3081220230817001", + "@dcloudio/uni-nvue-styler": "3.0.0-3081220230817001", + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "@rollup/pluginutils": "^4.2.0", + "@vitejs/plugin-vue": "^4.2.1", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "picocolors": "^1.0.0" + } + }, + "@dcloudio/uni-cli-shared": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-3081220230817001.tgz", + "integrity": "sha512-FOeydfIdKZg+MnQsHSFLXBzzmXtgCWnmEyjw3MHNN5mGwQB6+f7vK8sLw+yjizD/j71eMnh8XXCk+dV3nD/Vzg==", + "requires": { + "@ampproject/remapping": "^2.1.2", + "@babel/core": "^7.21.3", + "@babel/parser": "^7.16.4", + "@babel/types": "^7.20.7", + "@dcloudio/uni-i18n": "3.0.0-3081220230817001", + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "@intlify/core-base": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47", + "autoprefixer": "^10.4.14", + "base64url": "^3.0.1", + "chokidar": "^3.5.3", + "compare-versions": "^3.6.0", + "debug": "^4.3.3", + "es-module-lexer": "^1.2.1", + "esbuild": "^0.17.5", + "estree-walker": "^2.0.2", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "hash-sum": "^2.0.0", + "jsonc-parser": "^3.0.0", + "magic-string": "^0.30.0", + "merge": "^2.1.1", + "mime": "^3.0.0", + "module-alias": "^2.2.2", + "os-locale-s-fix": "^1.0.8-fix-1", + "picocolors": "^1.0.0", + "postcss-import": "^14.0.2", + "postcss-load-config": "^3.1.1", + "postcss-modules": "^4.3.0", + "postcss-selector-parser": "^6.0.6", + "resolve": "^1.22.1", + "tapable": "^2.2.0", + "xregexp": "3.1.0" + } + }, + "@dcloudio/uni-cloud": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-3081220230817001.tgz", + "integrity": "sha512-rrHN4PvvylrhmivAoSv4h8ZcQ3ZWHnMRXhQWPC9FBR1TInrrxrrAHuMqSZn6pTIXhCiRA3Kuy6aDNVCbt6VA+g==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001", + "@dcloudio/uni-i18n": "3.0.0-3081220230817001", + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "@vue/shared": "3.2.47", + "fast-glob": "^3.2.11" + } + }, + "@dcloudio/uni-components": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-components/-/uni-components-3.0.0-3081220230817001.tgz", + "integrity": "sha512-FlIrTgR/9Yp8FWYfhXfLPd0jJtBwJwRBAWWmLNaufkTojm6X7rX8wQOd13n+7gJGKzfXcEV8npOYpVou4P46Pw==", + "requires": { + "@dcloudio/uni-cloud": "3.0.0-3081220230817001", + "@dcloudio/uni-h5": "3.0.0-3081220230817001", + "@dcloudio/uni-i18n": "3.0.0-3081220230817001" + } + }, + "@dcloudio/uni-h5": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5/-/uni-h5-3.0.0-3081220230817001.tgz", + "integrity": "sha512-m2RCZpYxuAGnXlQKSQ8FGy4OlnUJJ8XMx2HNQWriDwtjDpAGDU8I2LZQZ7MHCNPIUd503y+mgU2NPlSQHnrlkQ==", + "requires": { + "@dcloudio/uni-h5-vite": "3.0.0-3081220230817001", + "@dcloudio/uni-h5-vue": "3.0.0-3081220230817001", + "@dcloudio/uni-i18n": "3.0.0-3081220230817001", + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47", + "debug": "^4.3.3", + "localstorage-polyfill": "^1.0.1", + "postcss-selector-parser": "^6.0.6", + "safe-area-insets": "^1.4.1", + "vue-router": "^4.1.6", + "xmlhttprequest": "^1.8.0" + } + }, + "@dcloudio/uni-h5-vite": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-3081220230817001.tgz", + "integrity": "sha512-x7F6mUTjHiOx7+lj5yIrzhD7gr0HTNJaku5gV3O8bFjxKLcIkFkAyliKPbqJ4QZCmCCmEfJpOGKrDhk35tlibg==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001", + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "mime": "^3.0.0", + "module-alias": "^2.2.2" + } + }, + "@dcloudio/uni-h5-vue": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-3081220230817001.tgz", + "integrity": "sha512-q1eFoXb5/4whNIJ1CumKmeypPjZofw8xDQRHZeGZ7NVRQ0/MYnEm6A0n/vkmEo1IgTZIY83m/jr6RNg7a9Ko/A==", + "requires": { + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "@vue/server-renderer": "3.2.47" + } + }, + "@dcloudio/uni-i18n": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-3081220230817001.tgz", + "integrity": "sha512-ooAIoNCy+DPlMtA4k9eoaJJsYQtici85le+ietIIzLdJoa2YUnudYv9CvG9Mw/RsKQI+MLl96ADAPgUpGzounw==" + }, + "@dcloudio/uni-nvue-styler": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-3081220230817001.tgz", + "integrity": "sha512-EImnyrYHmAc7ibKfIMkBG1uMavS5sPdrtQj52m40o/QNU5kcsqUk2Od9c1ULkQloxhmK2E4FZvXo4cgszE/Txw==", + "dev": true, + "requires": { + "@vue/shared": "3.2.47", + "parse-css-font": "^4.0.0", + "postcss": "^8.4.23" + } + }, + "@dcloudio/uni-push": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-push/-/uni-push-3.0.0-3081220230817001.tgz", + "integrity": "sha512-1IyVJlBnZVVvY49SQKpZG5Oxak5Wl51NvYEozuYoeBaaTeZObm7B6eyd722sXi0Dd6N1sE3kIdm/XReprK53eg==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001" + } + }, + "@dcloudio/uni-shared": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-shared/-/uni-shared-3.0.0-3081220230817001.tgz", + "integrity": "sha512-NI1pBO40VqvnWjwNXad3CqrUYvr4ffGjiDMgJGMP13rgOEAqamU7ozBimoASDVPKyyfSHTeuYuh0gtaaLu4CsQ==", + "requires": { + "@vue/shared": "3.2.47" + } + }, + "@dcloudio/uni-stat": { + "version": "3.0.0-3081220230817001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-3.0.0-3081220230817001.tgz", + "integrity": "sha512-xpbsor5WKU1eCbo0dmQ0hBUX6RrdG7DNDzCSD6oimndIXVGLkFhWrIC3brQ7S1G2GQvXdXnXJpUVskI3qNe/uw==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001", + "@dcloudio/uni-shared": "3.0.0-3081220230817001", + "debug": "^4.3.3" + } + }, + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "optional": true + }, + "@hyoga/uni-socket.io": { + "version": "3.0.4" + }, + "@intlify/core-base": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.9.tgz", + "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==", + "requires": { + "@intlify/devtools-if": "9.1.9", + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9" + } + }, + "@intlify/devtools-if": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.9.tgz", + "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==", + "requires": { + "@intlify/shared": "9.1.9" + } + }, + "@intlify/message-compiler": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.9.tgz", + "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==", + "requires": { + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9", + "source-map": "0.6.1" + } + }, + "@intlify/message-resolver": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.9.tgz", + "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==" + }, + "@intlify/runtime": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.9.tgz", + "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==", + "requires": { + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9" + } + }, + "@intlify/shared": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.9.tgz", + "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==" + }, + "@intlify/vue-devtools": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz", + "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==", + "requires": { + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9" + } + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "dev": true, + "optional": true + }, + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "dev": true + }, + "@types/lodash-es": { + "version": "4.17.12", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/md5": { + "version": "2.3.5", + "dev": true + }, + "@types/node": { + "version": "20.17.23", + "dev": true, + "requires": { + "undici-types": "~6.19.2" + } + }, + "@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "dev": true + }, + "@vue/compiler-core": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "requires": { + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "@vue/compiler-ssr": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "requires": { + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "requires": { + "@vue/shared": "3.5.13" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" + } + } + }, + "@vue/reactivity-transform": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "requires": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" + } + } + }, + "@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "requires": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" + } + } + }, + "@vue/server-renderer": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", + "requires": { + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/shared": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" + }, + "@vue/tsconfig": { + "version": "0.5.1", + "dev": true + }, + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "requires": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", + "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "requires": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "caniuse-lite": { + "version": "1.0.30001778", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001778.tgz", + "integrity": "sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + }, + "css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==", + "dev": true + }, + "css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==", + "dev": true + }, + "css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==", + "dev": true + }, + "css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==", + "dev": true + }, + "css-list-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-list-helpers/-/css-list-helpers-2.0.0.tgz", + "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ==", + "dev": true + }, + "css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==", + "dev": true + }, + "css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "requires": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + } + }, + "css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "requires": { + "css-tree": "~2.2.0" + }, + "dependencies": { + "css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "requires": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + } + }, + "mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + } + } + }, + "csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + }, + "dayjs": { + "version": "1.11.13" + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.5.307", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", + "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + } + }, + "fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true + }, + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + } + }, + "form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + }, + "fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "requires": { + "loader-utils": "^3.2.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + }, + "invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "requires": { + "hasown": "^2.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "js-pinyin": { + "version": "0.2.7" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==" + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + }, + "jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" + }, + "jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "requires": { + "invert-kv": "^3.0.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" + }, + "loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==" + }, + "localstorage-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz", + "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==" + }, + "lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true + }, + "lodash-es": { + "version": "4.17.21" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, + "md5": { + "version": "2.3.0", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.2" + } + }, + "minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true + }, + "module-alias": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.3.4.tgz", + "integrity": "sha512-bOclZt8hkpuGgSSoG07PKmvzTizROilUTvLNyrMqvlC9snhs7y7GzjNWAVbISIOlhCP1T14rH1PDAV9iNyBq/w==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" + }, + "node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "os-locale-s-fix": { + "version": "1.0.8-fix-1", + "resolved": "https://registry.npmjs.org/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz", + "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==", + "requires": { + "lcid": "^3.0.0" + } + }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "parse-css-font": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-css-font/-/parse-css-font-4.0.0.tgz", + "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==", + "dev": true, + "requires": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-list-helpers": "^2.0.0", + "css-system-font-keywords": "^1.0.0", + "unquote": "^1.1.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + } + } + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pinia": { + "version": "2.3.1", + "requires": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + } + }, + "postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "requires": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==" + }, + "postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, + "postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "requires": { + "postcss-selector-parser": "^7.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "requires": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==" + }, + "rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "@types/estree": "1.0.8", + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-area-insets": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/safe-area-insets/-/safe-area-insets-1.4.1.tgz", + "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ==" + }, + "sax": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", + "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "requires": { + "ansi-regex": "^6.2.2" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svgo": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", + "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "dev": true, + "requires": { + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0", + "sax": "^1.5.0" + } + }, + "tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "typescript": { + "version": "5.5.4", + "dev": true + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "vite": { + "version": "5.4.14", + "dev": true, + "requires": { + "esbuild": "^0.21.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + } + } + }, + "vue": { + "version": "3.5.13", + "requires": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "requires": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "requires": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "requires": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "requires": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "requires": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" + } + } + }, + "vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==" + }, + "vue-i18n": { + "version": "9.1.9", + "requires": { + "@intlify/core-base": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9", + "@vue/devtools-api": "^6.0.0-beta.7" + } + }, + "vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "requires": { + "@vue/devtools-api": "^6.6.4" + } + }, + "weixin-js-sdk": { + "version": "1.6.5" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" + }, + "xregexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-3.1.0.tgz", + "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fa5e778 --- /dev/null +++ b/package.json @@ -0,0 +1,39 @@ +{ + "name": "cool-uni", + "version": "8.0.0", + "license": "MIT", + "scripts": { + "dev": "vite --port 9900", + "dev:h5": "vite --port 9900", + "build": "vite build", + "build:h5": "vite build", + "build:mp-weixin": "vite build --mode mp-weixin" + }, + "dependencies": { + "@dcloudio/uni-app": "3.0.0-3081220230817001", + "@hyoga/uni-socket.io": "3.0.4", + "dayjs": "^1.11.13", + "js-pinyin": "^0.2.5", + "lodash-es": "^4.17.21", + "md5": "^2.3.0", + "pinia": "^2.1.7", + "vue": "^3.5.13", + "vue-i18n": "9.1.9", + "weixin-js-sdk": "^1.6.5" + }, + "engines": { + "node": ">= 16" + }, + "devDependencies": { + "@cool-vue/vite-plugin": "^8.0.3", + "@dcloudio/types": "^3.4.14", + "@dcloudio/uni-app-vite": "^3.0.0-3081220230817001", + "@dcloudio/vite-plugin-uni": "^3.0.0", + "@types/lodash-es": "^4.17.12", + "@types/md5": "^2.3.2", + "@types/node": "^20.11.26", + "@vue/tsconfig": "^0.5.1", + "typescript": "~5.5.4", + "vite": "^5.4.14" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..78562f4 --- /dev/null +++ b/pages.json @@ -0,0 +1,417 @@ +{ + "pages": [ + { + "path": "pages/user/login", // 改为登录页作为入口 + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/index/home", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/index/my", + "style": { + "navigationStyle": "custom" + } + } + ], + "subPackages": [ + { + "root": "uni_modules/cool-cs/pages", + "pages": [ + { + "path": "chat", + "style": { + "navigationBarTitleText": "客服聊天" + } + } + ], + "isTemp": true + }, + { + "root": "pages/user", + "pages": [ + { + "path": "doc", + "style": { + "navigationBarTitleText": "" + } + }, + { + "path": "set", + "style": { + "navigationBarTitleText": "%page.设置%" + } + }, + { + "path": "edit", + "style": { + "navigationBarTitleText": "%page.编辑%" + } + }, + // { + // "path": "login", + // "style": { + // "navigationStyle": "custom" + // } + // }, + { + "path": "captcha", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "about", + "style": { + "navigationBarTitleText": "%page.关于我们%" + } + } + ] + } + // { + // "root": "pages/demo", + // "pages": [ + // { + // "path": "basic/button", + // "style": { + // "navigationBarTitleText": "Button 按钮" + // } + // }, + // { + // "path": "basic/text", + // "style": { + // "navigationBarTitleText": "Text 文本" + // } + // }, + // { + // "path": "basic/image", + // "style": { + // "navigationBarTitleText": "Image 图片" + // } + // }, + // { + // "path": "basic/icon", + // "style": { + // "navigationBarTitleText": "Icon 图标" + // } + // }, + // { + // "path": "basic/tag", + // "style": { + // "navigationBarTitleText": "Tag 标签" + // } + // }, + // { + // "path": "basic/toast", + // "style": { + // "navigationBarTitleText": "Toast 提示" + // } + // }, + // { + // "path": "basic/loading", + // "style": { + // "navigationBarTitleText": "Loading 加载" + // } + // }, + // { + // "path": "view/flex", + // "style": { + // "navigationBarTitleText": "Flex 弹性" + // } + // }, + // { + // "path": "view/grid", + // "style": { + // "navigationBarTitleText": "Grid 宫格" + // } + // }, + // { + // "path": "view/divider", + // "style": { + // "navigationBarTitleText": "Divider 分割符" + // } + // }, + // { + // "path": "view/avatar", + // "style": { + // "navigationBarTitleText": "Avatar 头像" + // } + // }, + // { + // "path": "view/badge", + // "style": { + // "navigationBarTitleText": "Badge 角标" + // } + // }, + // { + // "path": "view/loadmore", + // "style": { + // "navigationBarTitleText": "Loadmore 加载更多" + // } + // }, + // { + // "path": "view/noticebar", + // "style": { + // "navigationBarTitleText": "Noticebar 通知栏" + // } + // }, + // { + // "path": "view/countdown", + // "style": { + // "navigationBarTitleText": "Countdown 倒计时" + // } + // }, + // { + // "path": "view/popup", + // "style": { + // "navigationBarTitleText": "Popup 弹出框" + // } + // }, + // { + // "path": "view/progress", + // "style": { + // "navigationBarTitleText": "Progress 进度条" + // } + // }, + // { + // "path": "view/search", + // "style": { + // "navigationBarTitleText": "Search 搜索框" + // } + // }, + // { + // "path": "view/slider", + // "style": { + // "navigationBarTitleText": "Slider 滑块" + // } + // }, + // { + // "path": "view/tabs", + // "style": { + // "navigationBarTitleText": "Tabs 选项卡" + // } + // }, + // { + // "path": "view/timeline", + // "style": { + // "navigationBarTitleText": "Timeline 时间线" + // } + // }, + // { + // "path": "view/topbar", + // "style": { + // "navigationBarTitleText": "Topbar 顶部导航栏", + // "navigationStyle": "custom" + // } + // }, + // { + // "path": "view/waterfall", + // "style": { + // "navigationBarTitleText": "Waterfall 瀑布流", + // "enablePullDownRefresh": true + // } + // }, + // { + // "path": "view/banner", + // "style": { + // "navigationBarTitleText": "Banner 轮博图" + // } + // }, + // { + // "path": "view/card", + // "style": { + // "navigationBarTitleText": "Card 卡片" + // } + // }, + // { + // "path": "view/list", + // "style": { + // "navigationBarTitleText": "List 列表" + // } + // }, + // { + // "path": "view/list-index", + // "style": { + // "navigationBarTitleText": "ListIndex 索引列表" + // } + // }, + // { + // "path": "view/scroller", + // "style": { + // "navigationBarTitleText": "Scroller 滚动条" + // } + // }, + // { + // "path": "view/skeleton", + // "style": { + // "navigationBarTitleText": "Skeleton 骨架图" + // } + // }, + // { + // "path": "form/input", + // "style": { + // "navigationBarTitleText": "Input 输入框" + // } + // }, + // { + // "path": "form/input-number", + // "style": { + // "navigationBarTitleText": "InputNumber 计数器" + // } + // }, + // { + // "path": "form/textarea", + // "style": { + // "navigationBarTitleText": "Textarea 文本域" + // } + // }, + // { + // "path": "form/checkbox", + // "style": { + // "navigationBarTitleText": "Checkbox 多选框" + // } + // }, + // { + // "path": "form/radio", + // "style": { + // "navigationBarTitleText": "Radio 单选框" + // } + // }, + // { + // "path": "form/form", + // "style": { + // "navigationBarTitleText": "Form 表单" + // } + // }, + // { + // "path": "form/select", + // "style": { + // "navigationBarTitleText": "Select 下拉框" + // } + // }, + // { + // "path": "form/select-popup", + // "style": { + // "navigationBarTitleText": "SelectPopup 下拉框弹窗" + // } + // }, + // { + // "path": "form/select-date", + // "style": { + // "navigationBarTitleText": "SelectDate 时间选择器" + // } + // }, + // { + // "path": "form/select-city", + // "style": { + // "navigationBarTitleText": "SelectCity 城市选择器" + // } + // }, + // { + // "path": "form/rate", + // "style": { + // "navigationBarTitleText": "Rate 评分" + // } + // }, + // { + // "path": "form/switch", + // "style": { + // "navigationBarTitleText": "Switch 开关" + // } + // }, + // { + // "path": "form/upload", + // "style": { + // "navigationBarTitleText": "Upload 文件上传" + // } + // }, + // { + // "path": "extend/action-sheet", + // "style": { + // "navigationBarTitleText": "ActionSheet 操作菜单" + // } + // }, + // { + // "path": "extend/captcha", + // "style": { + // "navigationBarTitleText": "Captcha 验证码" + // } + // }, + // { + // "path": "extend/confirm", + // "style": { + // "navigationBarTitleText": "Confirm 确认框" + // } + // }, + // { + // "path": "extend/dialog", + // "style": { + // "navigationBarTitleText": "Dialog 对话框" + // } + // }, + // { + // "path": "extend/filter-bar", + // "style": { + // "navigationBarTitleText": "FilterBar 过滤栏" + // } + // }, + // { + // "path": "extend/page", + // "style": { + // "navigationBarTitleText": "Page 页面" + // } + // }, + // { + // "path": "extend/tree", + // "style": { + // "navigationBarTitleText": "Tree 树形" + // } + // }, + // { + // "path": "extend/service", + // "style": { + // "navigationBarTitleText": "Service 服务" + // } + // }, + // { + // "path": "extend/slider-verify", + // "style": { + // "navigationBarTitleText": "SliderVerify 图片滑动验证" + // } + // } + // ] + // } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "cool-uni", + "navigationBarBackgroundColor": "#ffffff", + "backgroundColor": "#f6f7fa" + }, + "tabBar": { + "backgroundColor": "#ffffff", + "borderStyle": "white", + "height": 0, + "list": [ + { + "pagePath": "pages/index/home", + "iconPath": "static/icon/tabbar/home.png", + "selectedIconPath": "static/icon/tabbar/home2.png", + "text": "%演示%", + "visible": false + }, + { + "pagePath": "pages/index/my", + "iconPath": "static/icon/tabbar/my.png", + "selectedIconPath": "static/icon/tabbar/my2.png", + "text": "%我的%", + "visible": false + } + ] + } +} \ No newline at end of file diff --git a/pages/demo/basic/button.vue b/pages/demo/basic/button.vue new file mode 100644 index 0000000..bc3ea71 --- /dev/null +++ b/pages/demo/basic/button.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/pages/demo/basic/icon.vue b/pages/demo/basic/icon.vue new file mode 100644 index 0000000..c84da39 --- /dev/null +++ b/pages/demo/basic/icon.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/pages/demo/basic/image.vue b/pages/demo/basic/image.vue new file mode 100644 index 0000000..fc2fcb6 --- /dev/null +++ b/pages/demo/basic/image.vue @@ -0,0 +1,83 @@ + + + diff --git a/pages/demo/basic/loading.vue b/pages/demo/basic/loading.vue new file mode 100644 index 0000000..62c98d3 --- /dev/null +++ b/pages/demo/basic/loading.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/pages/demo/basic/tag.vue b/pages/demo/basic/tag.vue new file mode 100644 index 0000000..a950da8 --- /dev/null +++ b/pages/demo/basic/tag.vue @@ -0,0 +1,36 @@ + + + diff --git a/pages/demo/basic/text.vue b/pages/demo/basic/text.vue new file mode 100644 index 0000000..53e5461 --- /dev/null +++ b/pages/demo/basic/text.vue @@ -0,0 +1,76 @@ + + + diff --git a/pages/demo/basic/toast.vue b/pages/demo/basic/toast.vue new file mode 100644 index 0000000..e8e3d5e --- /dev/null +++ b/pages/demo/basic/toast.vue @@ -0,0 +1,62 @@ + + + diff --git a/pages/demo/extend/action-sheet.vue b/pages/demo/extend/action-sheet.vue new file mode 100644 index 0000000..25a04f8 --- /dev/null +++ b/pages/demo/extend/action-sheet.vue @@ -0,0 +1,92 @@ + + + diff --git a/pages/demo/extend/captcha.vue b/pages/demo/extend/captcha.vue new file mode 100644 index 0000000..de587a7 --- /dev/null +++ b/pages/demo/extend/captcha.vue @@ -0,0 +1,28 @@ + + + diff --git a/pages/demo/extend/confirm.vue b/pages/demo/extend/confirm.vue new file mode 100644 index 0000000..02e6ff3 --- /dev/null +++ b/pages/demo/extend/confirm.vue @@ -0,0 +1,103 @@ + + + diff --git a/pages/demo/extend/dialog.vue b/pages/demo/extend/dialog.vue new file mode 100644 index 0000000..8aaa2e8 --- /dev/null +++ b/pages/demo/extend/dialog.vue @@ -0,0 +1,44 @@ + + + diff --git a/pages/demo/extend/filter-bar.vue b/pages/demo/extend/filter-bar.vue new file mode 100644 index 0000000..9cc79f0 --- /dev/null +++ b/pages/demo/extend/filter-bar.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/pages/demo/extend/page.vue b/pages/demo/extend/page.vue new file mode 100644 index 0000000..b41ae85 --- /dev/null +++ b/pages/demo/extend/page.vue @@ -0,0 +1,69 @@ + + + diff --git a/pages/demo/extend/service.vue b/pages/demo/extend/service.vue new file mode 100644 index 0000000..7d26e44 --- /dev/null +++ b/pages/demo/extend/service.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/pages/demo/extend/slider-verify.vue b/pages/demo/extend/slider-verify.vue new file mode 100644 index 0000000..a2efd96 --- /dev/null +++ b/pages/demo/extend/slider-verify.vue @@ -0,0 +1,28 @@ + + + diff --git a/pages/demo/extend/tree.vue b/pages/demo/extend/tree.vue new file mode 100644 index 0000000..a2ccf4c --- /dev/null +++ b/pages/demo/extend/tree.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/pages/demo/form/checkbox.vue b/pages/demo/form/checkbox.vue new file mode 100644 index 0000000..7b8f682 --- /dev/null +++ b/pages/demo/form/checkbox.vue @@ -0,0 +1,111 @@ + + + diff --git a/pages/demo/form/form.vue b/pages/demo/form/form.vue new file mode 100644 index 0000000..fea7fc2 --- /dev/null +++ b/pages/demo/form/form.vue @@ -0,0 +1,186 @@ + + + diff --git a/pages/demo/form/input-number.vue b/pages/demo/form/input-number.vue new file mode 100644 index 0000000..7bbed16 --- /dev/null +++ b/pages/demo/form/input-number.vue @@ -0,0 +1,25 @@ + + + diff --git a/pages/demo/form/input.vue b/pages/demo/form/input.vue new file mode 100644 index 0000000..97e036c --- /dev/null +++ b/pages/demo/form/input.vue @@ -0,0 +1,61 @@ + + + diff --git a/pages/demo/form/radio.vue b/pages/demo/form/radio.vue new file mode 100644 index 0000000..34f200b --- /dev/null +++ b/pages/demo/form/radio.vue @@ -0,0 +1,95 @@ + + + diff --git a/pages/demo/form/rate.vue b/pages/demo/form/rate.vue new file mode 100644 index 0000000..b5b0fba --- /dev/null +++ b/pages/demo/form/rate.vue @@ -0,0 +1,19 @@ + diff --git a/pages/demo/form/select-city.vue b/pages/demo/form/select-city.vue new file mode 100644 index 0000000..391bd91 --- /dev/null +++ b/pages/demo/form/select-city.vue @@ -0,0 +1,50 @@ + + + diff --git a/pages/demo/form/select-date.vue b/pages/demo/form/select-date.vue new file mode 100644 index 0000000..0528519 --- /dev/null +++ b/pages/demo/form/select-date.vue @@ -0,0 +1,65 @@ + + + diff --git a/pages/demo/form/select-popup.vue b/pages/demo/form/select-popup.vue new file mode 100644 index 0000000..0ecc7e4 --- /dev/null +++ b/pages/demo/form/select-popup.vue @@ -0,0 +1,86 @@ + + + diff --git a/pages/demo/form/select.vue b/pages/demo/form/select.vue new file mode 100644 index 0000000..40b6e88 --- /dev/null +++ b/pages/demo/form/select.vue @@ -0,0 +1,92 @@ + + + diff --git a/pages/demo/form/switch.vue b/pages/demo/form/switch.vue new file mode 100644 index 0000000..871d5e5 --- /dev/null +++ b/pages/demo/form/switch.vue @@ -0,0 +1,21 @@ + + + diff --git a/pages/demo/form/textarea.vue b/pages/demo/form/textarea.vue new file mode 100644 index 0000000..90f4dd7 --- /dev/null +++ b/pages/demo/form/textarea.vue @@ -0,0 +1,11 @@ + diff --git a/pages/demo/form/upload.vue b/pages/demo/form/upload.vue new file mode 100644 index 0000000..9d1ffb9 --- /dev/null +++ b/pages/demo/form/upload.vue @@ -0,0 +1,23 @@ + + + diff --git a/pages/demo/static/avatar1.png b/pages/demo/static/avatar1.png new file mode 100644 index 0000000..8895486 Binary files /dev/null and b/pages/demo/static/avatar1.png differ diff --git a/pages/demo/static/avatar2.png b/pages/demo/static/avatar2.png new file mode 100644 index 0000000..dfd2901 Binary files /dev/null and b/pages/demo/static/avatar2.png differ diff --git a/pages/demo/static/avatar3.png b/pages/demo/static/avatar3.png new file mode 100644 index 0000000..9fbd0f8 Binary files /dev/null and b/pages/demo/static/avatar3.png differ diff --git a/pages/demo/static/avatar4.png b/pages/demo/static/avatar4.png new file mode 100644 index 0000000..46e04b5 Binary files /dev/null and b/pages/demo/static/avatar4.png differ diff --git a/pages/demo/static/bg1.png b/pages/demo/static/bg1.png new file mode 100644 index 0000000..1043560 Binary files /dev/null and b/pages/demo/static/bg1.png differ diff --git a/pages/demo/static/bg2.png b/pages/demo/static/bg2.png new file mode 100644 index 0000000..d36c657 Binary files /dev/null and b/pages/demo/static/bg2.png differ diff --git a/pages/demo/static/bg3.png b/pages/demo/static/bg3.png new file mode 100644 index 0000000..9501bdf Binary files /dev/null and b/pages/demo/static/bg3.png differ diff --git a/pages/demo/static/bg4.png b/pages/demo/static/bg4.png new file mode 100644 index 0000000..a5605d5 Binary files /dev/null and b/pages/demo/static/bg4.png differ diff --git a/pages/demo/view/avatar.vue b/pages/demo/view/avatar.vue new file mode 100644 index 0000000..164f95f --- /dev/null +++ b/pages/demo/view/avatar.vue @@ -0,0 +1,58 @@ + + + diff --git a/pages/demo/view/badge.vue b/pages/demo/view/badge.vue new file mode 100644 index 0000000..7b17223 --- /dev/null +++ b/pages/demo/view/badge.vue @@ -0,0 +1,61 @@ + diff --git a/pages/demo/view/banner.vue b/pages/demo/view/banner.vue new file mode 100644 index 0000000..106a7cd --- /dev/null +++ b/pages/demo/view/banner.vue @@ -0,0 +1,38 @@ + + + diff --git a/pages/demo/view/card.vue b/pages/demo/view/card.vue new file mode 100644 index 0000000..925e0b7 --- /dev/null +++ b/pages/demo/view/card.vue @@ -0,0 +1,15 @@ + diff --git a/pages/demo/view/countdown.vue b/pages/demo/view/countdown.vue new file mode 100644 index 0000000..d43a427 --- /dev/null +++ b/pages/demo/view/countdown.vue @@ -0,0 +1,29 @@ + diff --git a/pages/demo/view/divider.vue b/pages/demo/view/divider.vue new file mode 100644 index 0000000..1e402fd --- /dev/null +++ b/pages/demo/view/divider.vue @@ -0,0 +1,25 @@ + diff --git a/pages/demo/view/flex.vue b/pages/demo/view/flex.vue new file mode 100644 index 0000000..53dfe92 --- /dev/null +++ b/pages/demo/view/flex.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/pages/demo/view/grid.vue b/pages/demo/view/grid.vue new file mode 100644 index 0000000..81bce7e --- /dev/null +++ b/pages/demo/view/grid.vue @@ -0,0 +1,30 @@ + + + diff --git a/pages/demo/view/list-index.vue b/pages/demo/view/list-index.vue new file mode 100644 index 0000000..3cd011d --- /dev/null +++ b/pages/demo/view/list-index.vue @@ -0,0 +1,21 @@ + + + diff --git a/pages/demo/view/list.vue b/pages/demo/view/list.vue new file mode 100644 index 0000000..043f212 --- /dev/null +++ b/pages/demo/view/list.vue @@ -0,0 +1,64 @@ + diff --git a/pages/demo/view/loadmore.vue b/pages/demo/view/loadmore.vue new file mode 100644 index 0000000..7fc53f2 --- /dev/null +++ b/pages/demo/view/loadmore.vue @@ -0,0 +1,11 @@ + diff --git a/pages/demo/view/noticebar.vue b/pages/demo/view/noticebar.vue new file mode 100644 index 0000000..c1a3f88 --- /dev/null +++ b/pages/demo/view/noticebar.vue @@ -0,0 +1,35 @@ + diff --git a/pages/demo/view/popup.vue b/pages/demo/view/popup.vue new file mode 100644 index 0000000..e368cc7 --- /dev/null +++ b/pages/demo/view/popup.vue @@ -0,0 +1,63 @@ + + + diff --git a/pages/demo/view/progress.vue b/pages/demo/view/progress.vue new file mode 100644 index 0000000..6a997a7 --- /dev/null +++ b/pages/demo/view/progress.vue @@ -0,0 +1,34 @@ + + + diff --git a/pages/demo/view/scroller.vue b/pages/demo/view/scroller.vue new file mode 100644 index 0000000..135b07c --- /dev/null +++ b/pages/demo/view/scroller.vue @@ -0,0 +1,43 @@ + + + diff --git a/pages/demo/view/search.vue b/pages/demo/view/search.vue new file mode 100644 index 0000000..4474400 --- /dev/null +++ b/pages/demo/view/search.vue @@ -0,0 +1,19 @@ + diff --git a/pages/demo/view/skeleton.vue b/pages/demo/view/skeleton.vue new file mode 100644 index 0000000..c3962c6 --- /dev/null +++ b/pages/demo/view/skeleton.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/pages/demo/view/slider.vue b/pages/demo/view/slider.vue new file mode 100644 index 0000000..4f47111 --- /dev/null +++ b/pages/demo/view/slider.vue @@ -0,0 +1,7 @@ + diff --git a/pages/demo/view/tabs.vue b/pages/demo/view/tabs.vue new file mode 100644 index 0000000..28d73a1 --- /dev/null +++ b/pages/demo/view/tabs.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/pages/demo/view/timeline.vue b/pages/demo/view/timeline.vue new file mode 100644 index 0000000..f847263 --- /dev/null +++ b/pages/demo/view/timeline.vue @@ -0,0 +1,51 @@ + + + diff --git a/pages/demo/view/topbar.vue b/pages/demo/view/topbar.vue new file mode 100644 index 0000000..dce42c8 --- /dev/null +++ b/pages/demo/view/topbar.vue @@ -0,0 +1,41 @@ + + + diff --git a/pages/demo/view/waterfall.vue b/pages/demo/view/waterfall.vue new file mode 100644 index 0000000..9d12eee --- /dev/null +++ b/pages/demo/view/waterfall.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/pages/index/components/tabbar.vue b/pages/index/components/tabbar.vue new file mode 100644 index 0000000..8ee6c27 --- /dev/null +++ b/pages/index/components/tabbar.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/pages/index/home.vue b/pages/index/home.vue new file mode 100644 index 0000000..5afa04e --- /dev/null +++ b/pages/index/home.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/pages/index/my.vue b/pages/index/my.vue new file mode 100644 index 0000000..4097c86 --- /dev/null +++ b/pages/index/my.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/pages/user/about.vue b/pages/user/about.vue new file mode 100644 index 0000000..bfa94a0 --- /dev/null +++ b/pages/user/about.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/pages/user/captcha.vue b/pages/user/captcha.vue new file mode 100644 index 0000000..31adcba --- /dev/null +++ b/pages/user/captcha.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/pages/user/doc.vue b/pages/user/doc.vue new file mode 100644 index 0000000..1bc5b51 --- /dev/null +++ b/pages/user/doc.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/pages/user/edit.vue b/pages/user/edit.vue new file mode 100644 index 0000000..9d07929 --- /dev/null +++ b/pages/user/edit.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/pages/user/login.vue b/pages/user/login.vue new file mode 100644 index 0000000..e788dbd --- /dev/null +++ b/pages/user/login.vue @@ -0,0 +1,615 @@ + + + + + diff --git a/pages/user/set.vue b/pages/user/set.vue new file mode 100644 index 0000000..ce7d011 --- /dev/null +++ b/pages/user/set.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/pages/user/static/icon/apple.png b/pages/user/static/icon/apple.png new file mode 100644 index 0000000..2d0586e Binary files /dev/null and b/pages/user/static/icon/apple.png differ diff --git a/pages/user/static/icon/phone.png b/pages/user/static/icon/phone.png new file mode 100644 index 0000000..fae242b Binary files /dev/null and b/pages/user/static/icon/phone.png differ diff --git a/pages/user/static/icon/wx.png b/pages/user/static/icon/wx.png new file mode 100644 index 0000000..edd8c90 Binary files /dev/null and b/pages/user/static/icon/wx.png differ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..5e19115 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2926 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@dcloudio/uni-app': + specifier: 3.0.0-3081220230817001 + version: 3.0.0-3081220230817001(@dcloudio/types@3.4.14)(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@hyoga/uni-socket.io': + specifier: 3.0.4 + version: 3.0.4 + dayjs: + specifier: ^1.11.13 + version: 1.11.13 + js-pinyin: + specifier: ^0.2.5 + version: 0.2.7 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + md5: + specifier: ^2.3.0 + version: 2.3.0 + pinia: + specifier: ^2.1.7 + version: 2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4)) + vue: + specifier: ^3.5.13 + version: 3.5.13(typescript@5.5.4) + vue-i18n: + specifier: 9.1.9 + version: 9.1.9(vue@3.5.13(typescript@5.5.4)) + weixin-js-sdk: + specifier: ^1.6.5 + version: 1.6.5 + devDependencies: + '@cool-vue/vite-plugin': + specifier: ^8.0.3 + version: 8.0.3 + '@dcloudio/types': + specifier: ^3.4.14 + version: 3.4.14 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 + '@types/md5': + specifier: ^2.3.2 + version: 2.3.5 + '@types/node': + specifier: ^20.11.26 + version: 20.17.23 + '@vue/tsconfig': + specifier: ^0.5.1 + version: 0.5.1 + typescript: + specifier: ~5.5.4 + version: 5.5.4 + vite: + specifier: ^5.4.14 + version: 5.4.14(@types/node@20.17.23) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + + '@cool-vue/vite-plugin@8.0.3': + resolution: {integrity: sha512-5vxH/EyPXOJvKClllhaTZUeWh9XRJZwZJxyRlHuK2nAuD+pQxTXZ85WB4QPociMrJcOC8uZ/97EdrS4yG2Jv3Q==} + + '@dcloudio/types@3.4.14': + resolution: {integrity: sha512-VolQeZfTh8pQFsr2IlfIVX93blfvGTuBoJuZUc7iWOqtHV8gDrq6fXLhzsVlgZyuhhRZLOxlo33rkEqnY+ucAw==} + + '@dcloudio/uni-app@3.0.0-3081220230817001': + resolution: {integrity: sha512-sf8PzXHSd/VFCn7X9+QbD4nrY21FnIwjrhyX2hFit7PZK9kpyQluqCmG7YuotuXJzsNML8c8u2O9q5FaeOyTHg==} + peerDependencies: + '@dcloudio/types': ^3.3.2 + + '@dcloudio/uni-cli-shared@3.0.0-3081220230817001': + resolution: {integrity: sha512-FOeydfIdKZg+MnQsHSFLXBzzmXtgCWnmEyjw3MHNN5mGwQB6+f7vK8sLw+yjizD/j71eMnh8XXCk+dV3nD/Vzg==} + engines: {node: ^14.18.0 || >=16.0.0} + + '@dcloudio/uni-cloud@3.0.0-3081220230817001': + resolution: {integrity: sha512-rrHN4PvvylrhmivAoSv4h8ZcQ3ZWHnMRXhQWPC9FBR1TInrrxrrAHuMqSZn6pTIXhCiRA3Kuy6aDNVCbt6VA+g==} + + '@dcloudio/uni-components@3.0.0-3081220230817001': + resolution: {integrity: sha512-FlIrTgR/9Yp8FWYfhXfLPd0jJtBwJwRBAWWmLNaufkTojm6X7rX8wQOd13n+7gJGKzfXcEV8npOYpVou4P46Pw==} + + '@dcloudio/uni-h5-vite@3.0.0-3081220230817001': + resolution: {integrity: sha512-x7F6mUTjHiOx7+lj5yIrzhD7gr0HTNJaku5gV3O8bFjxKLcIkFkAyliKPbqJ4QZCmCCmEfJpOGKrDhk35tlibg==} + + '@dcloudio/uni-h5-vue@3.0.0-3081220230817001': + resolution: {integrity: sha512-q1eFoXb5/4whNIJ1CumKmeypPjZofw8xDQRHZeGZ7NVRQ0/MYnEm6A0n/vkmEo1IgTZIY83m/jr6RNg7a9Ko/A==} + + '@dcloudio/uni-h5@3.0.0-3081220230817001': + resolution: {integrity: sha512-m2RCZpYxuAGnXlQKSQ8FGy4OlnUJJ8XMx2HNQWriDwtjDpAGDU8I2LZQZ7MHCNPIUd503y+mgU2NPlSQHnrlkQ==} + + '@dcloudio/uni-i18n@3.0.0-3081220230817001': + resolution: {integrity: sha512-ooAIoNCy+DPlMtA4k9eoaJJsYQtici85le+ietIIzLdJoa2YUnudYv9CvG9Mw/RsKQI+MLl96ADAPgUpGzounw==} + + '@dcloudio/uni-push@3.0.0-3081220230817001': + resolution: {integrity: sha512-1IyVJlBnZVVvY49SQKpZG5Oxak5Wl51NvYEozuYoeBaaTeZObm7B6eyd722sXi0Dd6N1sE3kIdm/XReprK53eg==} + + '@dcloudio/uni-shared@3.0.0-3081220230817001': + resolution: {integrity: sha512-NI1pBO40VqvnWjwNXad3CqrUYvr4ffGjiDMgJGMP13rgOEAqamU7ozBimoASDVPKyyfSHTeuYuh0gtaaLu4CsQ==} + + '@dcloudio/uni-stat@3.0.0-3081220230817001': + resolution: {integrity: sha512-xpbsor5WKU1eCbo0dmQ0hBUX6RrdG7DNDzCSD6oimndIXVGLkFhWrIC3brQ7S1G2GQvXdXnXJpUVskI3qNe/uw==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.17.19': + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.17.19': + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.17.19': + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.17.19': + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.17.19': + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.17.19': + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.17.19': + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.17.19': + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.17.19': + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.17.19': + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.17.19': + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.17.19': + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.17.19': + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.17.19': + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.17.19': + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.17.19': + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.17.19': + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.17.19': + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.17.19': + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.17.19': + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.17.19': + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.17.19': + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@hyoga/uni-socket.io@3.0.4': + resolution: {integrity: sha512-m04M/ALXpTWcKoJGPDMzJosmzuopyAXF51DFN/qxLyXnbCFeQwsWOXT/XNLl4aWoBVGwQ7IptECFFRCA6z5C8A==} + + '@intlify/core-base@9.1.9': + resolution: {integrity: sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==} + engines: {node: '>= 10'} + + '@intlify/devtools-if@9.1.9': + resolution: {integrity: sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==} + engines: {node: '>= 10'} + + '@intlify/message-compiler@9.1.9': + resolution: {integrity: sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==} + engines: {node: '>= 10'} + + '@intlify/message-resolver@9.1.9': + resolution: {integrity: sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==} + engines: {node: '>= 10'} + + '@intlify/runtime@9.1.9': + resolution: {integrity: sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==} + engines: {node: '>= 10'} + + '@intlify/shared@9.1.9': + resolution: {integrity: sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==} + engines: {node: '>= 10'} + + '@intlify/vue-devtools@9.1.9': + resolution: {integrity: sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==} + engines: {node: '>= 10'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@rollup/rollup-android-arm-eabi@4.34.9': + resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.9': + resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.9': + resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.9': + resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.9': + resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.9': + resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.34.9': + resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.34.9': + resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-s390x-gnu@4.34.9': + resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.34.9': + resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.34.9': + resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.34.9': + resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.9': + resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.9': + resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} + cpu: [x64] + os: [win32] + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.16': + resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} + + '@types/md5@2.3.5': + resolution: {integrity: sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==} + + '@types/node@20.17.23': + resolution: {integrity: sha512-8PCGZ1ZJbEZuYNTMqywO+Sj4vSKjSjT6Ua+6RFOYlEvIvKQABPtrNkoVSLSKDb4obYcMhspVKmsw8Cm10NFRUg==} + + '@vue/compiler-core@3.2.47': + resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.2.47': + resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.2.47': + resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.2.47': + resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/reactivity-transform@3.2.47': + resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.2.47': + resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==} + peerDependencies: + vue: 3.2.47 + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.2.47': + resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vue/tsconfig@0.5.1': + resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.8.1: + resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64url@3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + caniuse-lite@1.0.30001702: + resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + compare-versions@3.6.0: + resolution: {integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.112: + resolution: {integrity: sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + 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==} + + generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash-sum@2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + invert-kv@3.0.1: + resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==} + engines: {node: '>=8'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + js-pinyin@0.2.7: + resolution: {integrity: sha512-Dbm7qJDwlC2MRHRXQo7GrVrL5w975tEOX6sfc0M8Z3oL9VhR4uUqgkwaETMqh4bAJ14w4zVs3tXsi9pDxWUmNg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + lcid@3.1.1: + resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==} + engines: {node: '>=8'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + localstorage-polyfill@1.0.1: + resolution: {integrity: sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==} + engines: {node: '>=6'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + merge@2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + module-alias@2.2.3: + resolution: {integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + os-locale-s-fix@1.0.8-fix-1: + resolution: {integrity: sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==} + engines: {node: '>=10', yarn: ^1.22.4} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinia@2.3.1: + resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + postcss-import@14.1.0: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules@4.3.1: + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} + hasBin: true + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.34.9: + resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-area-insets@1.4.1: + resolution: {integrity: sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + 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: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + 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-i18n@9.1.9: + resolution: {integrity: sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA==} + engines: {node: '>= 10'} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + weixin-js-sdk@1.6.5: + resolution: {integrity: sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + xmlhttprequest@1.8.0: + resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} + engines: {node: '>=0.4.0'} + + xregexp@3.1.0: + resolution: {integrity: sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@cool-vue/vite-plugin@8.0.3': + dependencies: + '@vue/compiler-sfc': 3.5.13 + axios: 1.8.1 + glob: 10.4.5 + lodash: 4.17.21 + magic-string: 0.30.17 + prettier: 3.5.3 + svgo: 3.3.2 + transitivePeerDependencies: + - debug + + '@dcloudio/types@3.4.14': {} + + '@dcloudio/uni-app@3.0.0-3081220230817001(@dcloudio/types@3.4.14)(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/types': 3.4.14 + '@dcloudio/uni-cloud': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-components': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-i18n': 3.0.0-3081220230817001 + '@dcloudio/uni-push': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-shared': 3.0.0-3081220230817001 + '@dcloudio/uni-stat': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@vue/shared': 3.2.47 + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@dcloudio/uni-cli-shared@3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@dcloudio/uni-i18n': 3.0.0-3081220230817001 + '@dcloudio/uni-shared': 3.0.0-3081220230817001 + '@intlify/core-base': 9.1.9 + '@intlify/shared': 9.1.9 + '@intlify/vue-devtools': 9.1.9 + '@rollup/pluginutils': 4.2.1 + '@vue/compiler-core': 3.2.47 + '@vue/compiler-dom': 3.2.47 + '@vue/compiler-sfc': 3.2.47 + '@vue/server-renderer': 3.2.47(vue@3.5.13(typescript@5.5.4)) + '@vue/shared': 3.2.47 + autoprefixer: 10.4.20(postcss@8.5.3) + base64url: 3.0.1 + chokidar: 3.6.0 + compare-versions: 3.6.0 + debug: 4.4.0 + es-module-lexer: 1.6.0 + esbuild: 0.17.19 + estree-walker: 2.0.2 + fast-glob: 3.3.3 + fs-extra: 10.1.0 + hash-sum: 2.0.0 + jsonc-parser: 3.3.1 + magic-string: 0.30.17 + merge: 2.1.1 + mime: 3.0.0 + module-alias: 2.2.3 + os-locale-s-fix: 1.0.8-fix-1 + picocolors: 1.1.1 + postcss-import: 14.1.0(postcss@8.5.3) + postcss-load-config: 3.1.4(postcss@8.5.3) + postcss-modules: 4.3.1(postcss@8.5.3) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + tapable: 2.2.1 + xregexp: 3.1.0 + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@dcloudio/uni-cloud@3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/uni-cli-shared': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-i18n': 3.0.0-3081220230817001 + '@dcloudio/uni-shared': 3.0.0-3081220230817001 + '@vue/shared': 3.2.47 + fast-glob: 3.3.3 + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@dcloudio/uni-components@3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/uni-cloud': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-h5': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-i18n': 3.0.0-3081220230817001 + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@dcloudio/uni-h5-vite@3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/uni-cli-shared': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-shared': 3.0.0-3081220230817001 + '@rollup/pluginutils': 4.2.1 + '@vue/compiler-dom': 3.2.47 + '@vue/compiler-sfc': 3.2.47 + '@vue/server-renderer': 3.2.47(vue@3.5.13(typescript@5.5.4)) + '@vue/shared': 3.2.47 + debug: 4.4.0 + fs-extra: 10.1.0 + mime: 3.0.0 + module-alias: 2.2.3 + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@dcloudio/uni-h5-vue@3.0.0-3081220230817001(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/uni-shared': 3.0.0-3081220230817001 + '@vue/server-renderer': 3.2.47(vue@3.5.13(typescript@5.5.4)) + transitivePeerDependencies: + - vue + + '@dcloudio/uni-h5@3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/uni-h5-vite': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-h5-vue': 3.0.0-3081220230817001(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-i18n': 3.0.0-3081220230817001 + '@dcloudio/uni-shared': 3.0.0-3081220230817001 + '@vue/server-renderer': 3.2.47(vue@3.5.13(typescript@5.5.4)) + '@vue/shared': 3.2.47 + debug: 4.4.0 + localstorage-polyfill: 1.0.1 + postcss-selector-parser: 6.1.2 + safe-area-insets: 1.4.1 + vue-router: 4.5.0(vue@3.5.13(typescript@5.5.4)) + xmlhttprequest: 1.8.0 + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@dcloudio/uni-i18n@3.0.0-3081220230817001': {} + + '@dcloudio/uni-push@3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/uni-cli-shared': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@dcloudio/uni-shared@3.0.0-3081220230817001': + dependencies: + '@vue/shared': 3.2.47 + + '@dcloudio/uni-stat@3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@dcloudio/uni-cli-shared': 3.0.0-3081220230817001(postcss@8.5.3)(vue@3.5.13(typescript@5.5.4)) + '@dcloudio/uni-shared': 3.0.0-3081220230817001 + debug: 4.4.0 + transitivePeerDependencies: + - postcss + - supports-color + - ts-node + - vue + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.17.19': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.17.19': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.17.19': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.17.19': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.17.19': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.17.19': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.17.19': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.17.19': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.17.19': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.17.19': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.17.19': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.17.19': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.17.19': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.17.19': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.17.19': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.17.19': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.17.19': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.17.19': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.17.19': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.17.19': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.17.19': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.17.19': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@hyoga/uni-socket.io@3.0.4': {} + + '@intlify/core-base@9.1.9': + dependencies: + '@intlify/devtools-if': 9.1.9 + '@intlify/message-compiler': 9.1.9 + '@intlify/message-resolver': 9.1.9 + '@intlify/runtime': 9.1.9 + '@intlify/shared': 9.1.9 + '@intlify/vue-devtools': 9.1.9 + + '@intlify/devtools-if@9.1.9': + dependencies: + '@intlify/shared': 9.1.9 + + '@intlify/message-compiler@9.1.9': + dependencies: + '@intlify/message-resolver': 9.1.9 + '@intlify/shared': 9.1.9 + source-map: 0.6.1 + + '@intlify/message-resolver@9.1.9': {} + + '@intlify/runtime@9.1.9': + dependencies: + '@intlify/message-compiler': 9.1.9 + '@intlify/message-resolver': 9.1.9 + '@intlify/shared': 9.1.9 + + '@intlify/shared@9.1.9': {} + + '@intlify/vue-devtools@9.1.9': + dependencies: + '@intlify/message-resolver': 9.1.9 + '@intlify/runtime': 9.1.9 + '@intlify/shared': 9.1.9 + + '@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 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@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.19.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@rollup/rollup-android-arm-eabi@4.34.9': + optional: true + + '@rollup/rollup-android-arm64@4.34.9': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.9': + optional: true + + '@rollup/rollup-darwin-x64@4.34.9': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.9': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.9': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.9': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.9': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.9': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.9': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.9': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.9': + optional: true + + '@trysound/sax@0.2.0': {} + + '@types/estree@1.0.6': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.16 + + '@types/lodash@4.17.16': {} + + '@types/md5@2.3.5': {} + + '@types/node@20.17.23': + dependencies: + undici-types: 6.19.8 + + '@vue/compiler-core@3.2.47': + dependencies: + '@babel/parser': 7.26.9 + '@vue/shared': 3.2.47 + estree-walker: 2.0.2 + source-map: 0.6.1 + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.9 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.2.47': + dependencies: + '@vue/compiler-core': 3.2.47 + '@vue/shared': 3.2.47 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.2.47': + dependencies: + '@babel/parser': 7.26.9 + '@vue/compiler-core': 3.2.47 + '@vue/compiler-dom': 3.2.47 + '@vue/compiler-ssr': 3.2.47 + '@vue/reactivity-transform': 3.2.47 + '@vue/shared': 3.2.47 + estree-walker: 2.0.2 + magic-string: 0.25.9 + postcss: 8.5.3 + source-map: 0.6.1 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.9 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.2.47': + dependencies: + '@vue/compiler-dom': 3.2.47 + '@vue/shared': 3.2.47 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@6.6.4': {} + + '@vue/reactivity-transform@3.2.47': + dependencies: + '@babel/parser': 7.26.9 + '@vue/compiler-core': 3.2.47 + '@vue/shared': 3.2.47 + estree-walker: 2.0.2 + magic-string: 0.25.9 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.2.47(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@vue/compiler-ssr': 3.2.47 + '@vue/shared': 3.2.47 + vue: 3.5.13(typescript@5.5.4) + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.5.4))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.5.4) + + '@vue/shared@3.2.47': {} + + '@vue/shared@3.5.13': {} + + '@vue/tsconfig@0.5.1': {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + asynckit@0.4.0: {} + + autoprefixer@10.4.20(postcss@8.5.3): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001702 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + + axios@1.8.1: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base64url@3.0.1: {} + + binary-extensions@2.3.0: {} + + boolbase@1.0.0: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001702 + electron-to-chromium: 1.5.112 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + caniuse-lite@1.0.30001702: {} + + charenc@0.0.2: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + 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 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@7.2.0: {} + + compare-versions@3.6.0: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.1.3: {} + + dayjs@1.11.13: {} + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + delayed-stream@1.0.0: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.112: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.17.19: + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + estree-walker@2.0.2: {} + + fast-glob@3.3.3: + 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.8 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + follow-redirects@1.15.9: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + fraction.js@4.3.7: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + generic-names@4.0.0: + dependencies: + loader-utils: 3.3.1 + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hash-sum@2.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + icss-replace-symbols@1.1.0: {} + + icss-utils@5.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + invert-kv@3.0.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-buffer@1.1.6: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + js-pinyin@0.2.7: {} + + js-tokens@4.0.0: {} + + jsesc@3.1.0: {} + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + lcid@3.1.1: + dependencies: + invert-kv: 3.0.1 + + lilconfig@2.1.0: {} + + loader-utils@3.3.1: {} + + localstorage-polyfill@1.0.1: {} + + lodash-es@4.17.21: {} + + lodash.camelcase@4.3.0: {} + + lodash@4.17.21: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + math-intrinsics@1.1.0: {} + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + merge2@1.4.1: {} + + merge@2.1.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@3.0.0: {} + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + module-alias@2.2.3: {} + + ms@2.1.3: {} + + nanoid@3.3.8: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + os-locale-s-fix@1.0.8-fix-1: + dependencies: + lcid: 3.1.1 + + package-json-from-dist@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pinia@2.3.1(typescript@5.5.4)(vue@3.5.13(typescript@5.5.4)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.5.4) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.5.4)) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - '@vue/composition-api' + + postcss-import@14.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-load-config@3.1.4(postcss@8.5.3): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.5.3 + + postcss-modules-extract-imports@3.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + + postcss-modules-local-by-default@4.2.0(postcss@8.5.3): + dependencies: + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 + + postcss-modules-values@4.0.0(postcss@8.5.3): + dependencies: + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + + postcss-modules@4.3.1(postcss@8.5.3): + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.5.3 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) + postcss-modules-scope: 3.2.1(postcss@8.5.3) + postcss-modules-values: 4.0.0(postcss@8.5.3) + string-hash: 1.1.3 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@3.5.3: {} + + proxy-from-env@1.1.0: {} + + queue-microtask@1.2.3: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + rollup@4.34.9: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.9 + '@rollup/rollup-android-arm64': 4.34.9 + '@rollup/rollup-darwin-arm64': 4.34.9 + '@rollup/rollup-darwin-x64': 4.34.9 + '@rollup/rollup-freebsd-arm64': 4.34.9 + '@rollup/rollup-freebsd-x64': 4.34.9 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 + '@rollup/rollup-linux-arm-musleabihf': 4.34.9 + '@rollup/rollup-linux-arm64-gnu': 4.34.9 + '@rollup/rollup-linux-arm64-musl': 4.34.9 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 + '@rollup/rollup-linux-riscv64-gnu': 4.34.9 + '@rollup/rollup-linux-s390x-gnu': 4.34.9 + '@rollup/rollup-linux-x64-gnu': 4.34.9 + '@rollup/rollup-linux-x64-musl': 4.34.9 + '@rollup/rollup-win32-arm64-msvc': 4.34.9 + '@rollup/rollup-win32-ia32-msvc': 4.34.9 + '@rollup/rollup-win32-x64-msvc': 4.34.9 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-area-insets@1.4.1: {} + + semver@6.3.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + source-map-js@1.2.1: {} + + source-map@0.6.1: {} + + sourcemap-codec@1.4.8: {} + + string-hash@1.1.3: {} + + 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 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + tapable@2.2.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + typescript@5.5.4: {} + + undici-types@6.19.8: {} + + universalify@2.0.1: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + vite@5.4.14(@types/node@20.17.23): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.3 + rollup: 4.34.9 + optionalDependencies: + '@types/node': 20.17.23 + fsevents: 2.3.3 + + vue-demi@0.14.10(vue@3.5.13(typescript@5.5.4)): + dependencies: + vue: 3.5.13(typescript@5.5.4) + + vue-i18n@9.1.9(vue@3.5.13(typescript@5.5.4)): + dependencies: + '@intlify/core-base': 9.1.9 + '@intlify/shared': 9.1.9 + '@intlify/vue-devtools': 9.1.9 + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.5.4) + + vue-router@4.5.0(vue@3.5.13(typescript@5.5.4)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.5.4) + + vue@3.5.13(typescript@5.5.4): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.5.4)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.5.4 + + weixin-js-sdk@1.6.5: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + 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 + + xmlhttprequest@1.8.0: {} + + xregexp@3.1.0: {} + + yallist@3.1.1: {} + + yaml@1.10.2: {} diff --git a/router/index.ts b/router/index.ts new file mode 100644 index 0000000..352597d --- /dev/null +++ b/router/index.ts @@ -0,0 +1,25 @@ +import { router, useStore } from "/@/cool"; + +const ignoreToken = [ + "/pages/index/home", + "/pages/index/website", + "/pages/index/admin", + "/pages/index/my", + "/pages/user/login", + "/pages/user/captcha", + "/pages/user/doc", +]; + +router.beforeEach((to, next) => { + const { user } = useStore(); + + if (ignoreToken.includes(to.path) || to.path.startsWith("/pages/demo")) { + next(); + } else { + if (user.token) { + next(); + } else { + router.login(); + } + } +}); diff --git a/static/css/index.scss b/static/css/index.scss new file mode 100644 index 0000000..d402420 --- /dev/null +++ b/static/css/index.scss @@ -0,0 +1,70 @@ +/* #ifdef H5 */ +* { + font-family: Arial, "Microsoft Yahei", "微软雅黑"; +} + +.uni-page-head-btn { + display: inline-flex; + align-items: center; +} +/* #endif */ + +// 主题 +.cl-page { + &.theme-default { + // 渐变色 + .cl-tag.cl-tag--primary:not(.is-plain), + .cl-button--primary:not(.is-plain) { + background: linear-gradient(120deg, rgba($cl-color-primary, 0.7), $cl-color-primary); + border: 0; + } + + .cl-button { + &.is-custom { + height: 80rpx; + font-size: 30rpx; + width: 100%; + } + } + } + + &.theme-grey { + $color: #f6f7fa; + + @mixin set() { + background-color: $color; + border-color: $color; + } + + .cl-button--default, + .cl-input, + .cl-select-inner, + .cl-upload, + .cl-textarea, + .cl-checkbox.is-border, + .cl-search__input { + @include set(); + } + + .cl-upload { + border: 0; + } + } +} + +// 其他 +.mp-html { + // #ifndef MP + img, + // #endif + image { + display: block; + max-width: 100%; + } + + .hl-pre { + border-radius: 20rpx; + box-sizing: border-box; + // width 看页面情况设置,如:calc(100vw - 48rpx) + } +} diff --git a/static/empty/comm.png b/static/empty/comm.png new file mode 100644 index 0000000..04329df Binary files /dev/null and b/static/empty/comm.png differ diff --git a/static/icon/tabbar/admin.png b/static/icon/tabbar/admin.png new file mode 100644 index 0000000..716aa1b Binary files /dev/null and b/static/icon/tabbar/admin.png differ diff --git a/static/icon/tabbar/admin2.png b/static/icon/tabbar/admin2.png new file mode 100644 index 0000000..b690784 Binary files /dev/null and b/static/icon/tabbar/admin2.png differ diff --git a/static/icon/tabbar/cool.png b/static/icon/tabbar/cool.png new file mode 100644 index 0000000..b8c97b7 Binary files /dev/null and b/static/icon/tabbar/cool.png differ diff --git a/static/icon/tabbar/cool2.png b/static/icon/tabbar/cool2.png new file mode 100644 index 0000000..674839e Binary files /dev/null and b/static/icon/tabbar/cool2.png differ diff --git a/static/icon/tabbar/home.png b/static/icon/tabbar/home.png new file mode 100644 index 0000000..7977336 Binary files /dev/null and b/static/icon/tabbar/home.png differ diff --git a/static/icon/tabbar/home2.png b/static/icon/tabbar/home2.png new file mode 100644 index 0000000..2242c15 Binary files /dev/null and b/static/icon/tabbar/home2.png differ diff --git a/static/icon/tabbar/my.png b/static/icon/tabbar/my.png new file mode 100644 index 0000000..04b13a3 Binary files /dev/null and b/static/icon/tabbar/my.png differ diff --git a/static/icon/tabbar/my2.png b/static/icon/tabbar/my2.png new file mode 100644 index 0000000..e598678 Binary files /dev/null and b/static/icon/tabbar/my2.png differ diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000..a75c618 Binary files /dev/null and b/static/logo.png differ diff --git a/types/env.d.ts b/types/env.d.ts new file mode 100644 index 0000000..0efc421 --- /dev/null +++ b/types/env.d.ts @@ -0,0 +1,15 @@ +/// +/// +/// +/// + +declare module "*.vue" { + import { DefineComponent } from "vue"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any>; + export default component; +} + +declare module "virtual:ctx"; +declare module "virtual:eps"; +declare module "@dcloudio/vite-plugin-uni"; diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..31e990f --- /dev/null +++ b/uni.scss @@ -0,0 +1,77 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ +@import "/$/cool-ui/theme.scss"; + +/* 行为相关颜色 */ +$uni-color-primary: #6b69f8; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color: #333; //基本色 +$uni-text-color-inverse: #fff; //反色 +$uni-text-color-grey: #999; //辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable: #c0c0c0; + +/* 背景颜色 */ +$uni-bg-color: #ffffff; +$uni-bg-color-grey: #f8f8f8; +$uni-bg-color-hover: #f1f1f1; //点击状态颜色 +$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色 + +/* 边框颜色 */ +$uni-border-color: #c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm: 24upx; +$uni-font-size-base: 28upx; +$uni-font-size-lg: 32upx; + +/* 图片尺寸 */ +$uni-img-size-sm: 40upx; +$uni-img-size-base: 52upx; +$uni-img-size-lg: 80upx; + +/* Border Radius */ +$uni-border-radius-sm: 4upx; +$uni-border-radius-base: 6upx; +$uni-border-radius-lg: 12upx; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 20upx; +$uni-spacing-row-lg: 30upx; + +/* 垂直间距 */ +$uni-spacing-col-sm: 8upx; +$uni-spacing-col-base: 16upx; +$uni-spacing-col-lg: 24upx; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2c405a; // 文章标题颜色 +$uni-font-size-title: 40upx; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle: 36upx; +$uni-color-paragraph: #3f536e; // 文章段落颜色 +$uni-font-size-paragraph: 30upx; diff --git a/uni_modules/cool-cs/components/msg-item.vue b/uni_modules/cool-cs/components/msg-item.vue new file mode 100644 index 0000000..788c57e --- /dev/null +++ b/uni_modules/cool-cs/components/msg-item.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/uni_modules/cool-cs/components/msg-list.vue b/uni_modules/cool-cs/components/msg-list.vue new file mode 100644 index 0000000..13f0739 --- /dev/null +++ b/uni_modules/cool-cs/components/msg-list.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/uni_modules/cool-cs/components/tools/emoji.vue b/uni_modules/cool-cs/components/tools/emoji.vue new file mode 100644 index 0000000..4ad9a51 --- /dev/null +++ b/uni_modules/cool-cs/components/tools/emoji.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/uni_modules/cool-cs/components/tools/fn.vue b/uni_modules/cool-cs/components/tools/fn.vue new file mode 100644 index 0000000..458b3cc --- /dev/null +++ b/uni_modules/cool-cs/components/tools/fn.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/uni_modules/cool-cs/components/tools/index.vue b/uni_modules/cool-cs/components/tools/index.vue new file mode 100644 index 0000000..9f834a8 --- /dev/null +++ b/uni_modules/cool-cs/components/tools/index.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/uni_modules/cool-cs/config.ts b/uni_modules/cool-cs/config.ts new file mode 100644 index 0000000..7934d87 --- /dev/null +++ b/uni_modules/cool-cs/config.ts @@ -0,0 +1,14 @@ +import { config, type ModuleConfig } from "/@/cool"; + +export default (): ModuleConfig => { + return { + description: "客服聊天模块", + options: { + url: config.host + "/cs", + }, + demo: { + label: "CS 客服聊天", + path: "/uni_modules/cool-cs/pages/chat", + }, + }; +}; diff --git a/uni_modules/cool-cs/hooks/index.ts b/uni_modules/cool-cs/hooks/index.ts new file mode 100644 index 0000000..54134f4 --- /dev/null +++ b/uni_modules/cool-cs/hooks/index.ts @@ -0,0 +1,4 @@ +export * from "./tools"; +export * from "./socket"; +export * from "./session"; +export * from "./message"; diff --git a/uni_modules/cool-cs/hooks/message.ts b/uni_modules/cool-cs/hooks/message.ts new file mode 100644 index 0000000..da9fa2a --- /dev/null +++ b/uni_modules/cool-cs/hooks/message.ts @@ -0,0 +1,120 @@ +import { defineStore } from "pinia"; +import { computed, ref } from "vue"; +import type { Cs } from "../types"; +import dayjs from "dayjs"; +import { service, useStore } from "/@/cool"; +import { last } from "lodash-es"; +import { useSession } from "./session"; +import { uuid } from "/@/cool/utils"; +import { useScroller } from "./tools"; +import { dateFormatter } from "../utils"; + +export const useMessage = defineStore("cs.message", () => { + const session = useSession(); + const scroller = useScroller(); + const { user } = useStore(); + + // 加载中 + const loading = ref(false); + + // 所有页 + const data = ref<{ id: string; data: Cs.Msg[] }[]>([]); + + // 列表 + const list = computed(() => { + data.value.forEach((e) => { + if (e.data[0]) { + let date = e.data[0].createTime; + + if (date) { + e.data.forEach((a, i) => { + const d = dateFormatter(a.createTime); + + if (i == 0) { + a.date = d; + } + + if (dayjs(a.createTime).subtract(10, "minute").isAfter(dayjs(date))) { + a.date = d; + date = a.createTime; + } + }); + } + } + }); + + return data.value; + }); + + // 追加消息 + function append(item: Cs.Msg) { + const list = last(data.value)?.data; + + if (list) { + list.push({ + sessionId: session.info?.id, + type: 0, + nickName: user.info?.nickName, + avatarUrl: user.info?.avatarUrl, + ...item, + isAnimation: true, + }); + + scroller.scrollToBottom(); + } + } + + // 清除消息 + function clear() { + data.value = []; + } + + // 读消息 + function read(id: number) { + service.cs.msg.read({ + msgIds: [id], + }); + } + + // 获取消息 + async function refresh(params?: any) { + loading.value = true; + + if (params.page == 1) { + data.value = []; + } + + await service.cs.msg + .page({ + sessionId: session.info?.id, + order: "createTime", + sort: "desc", + ...params, + }) + .then((res) => { + res.list.forEach((e) => { + if (e.type == 1) { + e.avatarUrl = e.adminUserHeadImg; + e.nickName = e.adminUserName; + } + }); + + data.value.unshift({ + id: uuid(), + data: res.list.reverse() as any[], + }); + }); + + loading.value = false; + } + + return { + data, + list, + loading, + append, + clear, + read, + refresh, + }; +}); diff --git a/uni_modules/cool-cs/hooks/session.ts b/uni_modules/cool-cs/hooks/session.ts new file mode 100644 index 0000000..f221f29 --- /dev/null +++ b/uni_modules/cool-cs/hooks/session.ts @@ -0,0 +1,24 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; +import type { Cs } from "../types"; + +export const useSession = defineStore("cs.session", () => { + // 详情 + const info = ref(); + + // 设置会话 + function set(data: Cs.Session) { + info.value = data; + } + + // 清除会话 + function clear() { + info.value = undefined; + } + + return { + info, + set, + clear, + }; +}); diff --git a/uni_modules/cool-cs/hooks/socket.ts b/uni_modules/cool-cs/hooks/socket.ts new file mode 100644 index 0000000..03324f0 --- /dev/null +++ b/uni_modules/cool-cs/hooks/socket.ts @@ -0,0 +1,96 @@ +import { defineStore } from "pinia"; +// @ts-ignore +import io, { type Socket } from "@hyoga/uni-socket.io"; +import type { Cs } from "../types"; +import { useStore, module } from "/@/cool"; +import { useSession } from "./session"; +import { useMessage } from "./message"; + +export const useSocket = defineStore("cs.socket", () => { + const config = module.config("cool-cs"); + const { user } = useStore(); + const session = useSession(); + const message = useMessage(); + + let client = undefined as Socket | undefined; + + // 连接 + function connect() { + if (!user.token) { + return false; + } + + if (client) { + disconnect(); + } + + if (!client) { + client = io(config.url, { + transports: ["websocket", "polling"], + auth: { + isAdmin: false, + token: user.token, + }, + }); + + client.on("connect", () => { + console.log("[cs] connect"); + }); + + client.on("disconnect", () => { + console.log("[cs] disconnect"); + }); + + client.on("msg", (data: Cs.Msg) => { + if (data.type == 1) { + if (data.sessionId == session.info?.id) { + // 追加消息 + message.append({ + ...data.user, + ...data, + isAnimation: true, + }); + + // 读消息 + message.read(data.id!); + } + } + }); + } + } + + // 断开连接 + function disconnect() { + client?.disconnect(); + client = undefined; + } + + // 发送消息 + function send(content: Cs.Content) { + if (client) { + // 发送事件 + client.emit("send", { + sessionId: session.info?.id, + content, + }); + + // 追加消息 + message.append({ content }); + } else { + console.log("[cs] client error"); + } + } + + // 监听退出 + uni.$on("user.logout", () => { + session.clear(); + message.clear(); + disconnect(); + }); + + return { + connect, + client, + send, + }; +}); diff --git a/uni_modules/cool-cs/hooks/tools.ts b/uni_modules/cool-cs/hooks/tools.ts new file mode 100644 index 0000000..108dd44 --- /dev/null +++ b/uni_modules/cool-cs/hooks/tools.ts @@ -0,0 +1,61 @@ +import { defineStore } from "pinia"; +import { nextTick, ref } from "vue"; +import { throttle } from "lodash-es"; + +export const useTools = defineStore("cs.tools", () => { + const visible = ref(false); + const mode = ref(""); + + // 打开 + function open(m: string) { + if (visible.value && mode.value === m) { + return close(); + } + + visible.value = true; + mode.value = m; + } + + // 关闭 + function close() { + visible.value = false; + } + + return { + visible, + mode, + open, + close, + }; +}); + +export const useScroller = defineStore("cs.scroller", () => { + // 滚动距离 + const top = ref(0); + + // 滚动动画 + const animation = ref(true); + + let n = 0; + + // 滚动到指定位置 + const scrollTo = throttle((scrollTop: number, smooth?: boolean) => { + nextTick().then(() => { + top.value = scrollTop; + + animation.value = smooth ?? true; + }); + }, 500); + + // 滚动到底部 + const scrollToBottom = (smooth?: boolean) => { + scrollTo(100000 + n++, smooth); + }; + + return { + animation, + top, + scrollToBottom, + scrollTo, + }; +}); diff --git a/uni_modules/cool-cs/pages/chat.vue b/uni_modules/cool-cs/pages/chat.vue new file mode 100644 index 0000000..25e14d2 --- /dev/null +++ b/uni_modules/cool-cs/pages/chat.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/uni_modules/cool-cs/pages_init.json b/uni_modules/cool-cs/pages_init.json new file mode 100644 index 0000000..fccd4e3 --- /dev/null +++ b/uni_modules/cool-cs/pages_init.json @@ -0,0 +1,15 @@ +{ + "subPackages": [ + { + "root": "uni_modules/cool-cs/pages", + "pages": [ + { + "path": "chat", + "style": { + "navigationBarTitleText": "客服聊天" + } + } + ] + } + ] +} diff --git a/uni_modules/cool-cs/static/add.png b/uni_modules/cool-cs/static/add.png new file mode 100644 index 0000000..38acc2c Binary files /dev/null and b/uni_modules/cool-cs/static/add.png differ diff --git a/uni_modules/cool-cs/static/emoji.png b/uni_modules/cool-cs/static/emoji.png new file mode 100644 index 0000000..fb49e09 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji.png differ diff --git a/uni_modules/cool-cs/static/emoji/angry-face.png b/uni_modules/cool-cs/static/emoji/angry-face.png new file mode 100644 index 0000000..bd0b383 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/angry-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/anguished-face.png b/uni_modules/cool-cs/static/emoji/anguished-face.png new file mode 100644 index 0000000..fa4678b Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/anguished-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/astonished-face.png b/uni_modules/cool-cs/static/emoji/astonished-face.png new file mode 100644 index 0000000..41dc2b6 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/astonished-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/confounded-face.png b/uni_modules/cool-cs/static/emoji/confounded-face.png new file mode 100644 index 0000000..7e1b967 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/confounded-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/confused-face.png b/uni_modules/cool-cs/static/emoji/confused-face.png new file mode 100644 index 0000000..b01d70e Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/confused-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/crying-face.png b/uni_modules/cool-cs/static/emoji/crying-face.png new file mode 100644 index 0000000..c5aae1c Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/crying-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/disappointed-but-relieved-face.png b/uni_modules/cool-cs/static/emoji/disappointed-but-relieved-face.png new file mode 100644 index 0000000..f4f6e3e Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/disappointed-but-relieved-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/disappointed-face.png b/uni_modules/cool-cs/static/emoji/disappointed-face.png new file mode 100644 index 0000000..aa3e501 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/disappointed-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/dizzy-face.png b/uni_modules/cool-cs/static/emoji/dizzy-face.png new file mode 100644 index 0000000..9bd63d4 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/dizzy-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/drooling-face.png b/uni_modules/cool-cs/static/emoji/drooling-face.png new file mode 100644 index 0000000..a7e2545 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/drooling-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/expressionless-face.png b/uni_modules/cool-cs/static/emoji/expressionless-face.png new file mode 100644 index 0000000..a39bc99 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/expressionless-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-savouring-delicious-food.png b/uni_modules/cool-cs/static/emoji/face-savouring-delicious-food.png new file mode 100644 index 0000000..7f3d434 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-savouring-delicious-food.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-screaming-in-fear.png b/uni_modules/cool-cs/static/emoji/face-screaming-in-fear.png new file mode 100644 index 0000000..0458687 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-screaming-in-fear.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-throwing-a-kiss.png b/uni_modules/cool-cs/static/emoji/face-throwing-a-kiss.png new file mode 100644 index 0000000..15220bf Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-throwing-a-kiss.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-cold-sweat.png b/uni_modules/cool-cs/static/emoji/face-with-cold-sweat.png new file mode 100644 index 0000000..c91ab17 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-cold-sweat.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-cowboy-hat.png b/uni_modules/cool-cs/static/emoji/face-with-cowboy-hat.png new file mode 100644 index 0000000..5801afc Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-cowboy-hat.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-finger-covering-closed-lips.png b/uni_modules/cool-cs/static/emoji/face-with-finger-covering-closed-lips.png new file mode 100644 index 0000000..3e37c47 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-finger-covering-closed-lips.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-head-bandage.png b/uni_modules/cool-cs/static/emoji/face-with-head-bandage.png new file mode 100644 index 0000000..00471c0 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-head-bandage.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-look-of-triumph.png b/uni_modules/cool-cs/static/emoji/face-with-look-of-triumph.png new file mode 100644 index 0000000..fa3bb8e Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-look-of-triumph.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-medical-mask.png b/uni_modules/cool-cs/static/emoji/face-with-medical-mask.png new file mode 100644 index 0000000..8b237f5 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-medical-mask.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-monocle.png b/uni_modules/cool-cs/static/emoji/face-with-monocle.png new file mode 100644 index 0000000..12982a9 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-monocle.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-one-eyebrow-raised.png b/uni_modules/cool-cs/static/emoji/face-with-one-eyebrow-raised.png new file mode 100644 index 0000000..c14f913 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-one-eyebrow-raised.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-open-mouth-and-cold-sweat.png b/uni_modules/cool-cs/static/emoji/face-with-open-mouth-and-cold-sweat.png new file mode 100644 index 0000000..9359dd9 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-open-mouth-and-cold-sweat.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-open-mouth-vomiting.png b/uni_modules/cool-cs/static/emoji/face-with-open-mouth-vomiting.png new file mode 100644 index 0000000..637be5f Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-open-mouth-vomiting.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-open-mouth.png b/uni_modules/cool-cs/static/emoji/face-with-open-mouth.png new file mode 100644 index 0000000..6b9af1e Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-open-mouth.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-party-horn-and-party-hat.png b/uni_modules/cool-cs/static/emoji/face-with-party-horn-and-party-hat.png new file mode 100644 index 0000000..d1d3f27 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-party-horn-and-party-hat.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-pleading-eyes.png b/uni_modules/cool-cs/static/emoji/face-with-pleading-eyes.png new file mode 100644 index 0000000..3901299 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-pleading-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-rolling-eyes.png b/uni_modules/cool-cs/static/emoji/face-with-rolling-eyes.png new file mode 100644 index 0000000..3c1c933 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-rolling-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue-and-tightly-closed-eyes.png b/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue-and-tightly-closed-eyes.png new file mode 100644 index 0000000..13e5574 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue-and-tightly-closed-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue-and-winking-eye.png b/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue-and-winking-eye.png new file mode 100644 index 0000000..3c6c276 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue-and-winking-eye.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue.png b/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue.png new file mode 100644 index 0000000..9b040b3 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-stuck-out-tongue.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-thermometer.png b/uni_modules/cool-cs/static/emoji/face-with-thermometer.png new file mode 100644 index 0000000..407c0c8 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-thermometer.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-with-uneven-eyes-and-wavy-mouth.png b/uni_modules/cool-cs/static/emoji/face-with-uneven-eyes-and-wavy-mouth.png new file mode 100644 index 0000000..3777295 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-with-uneven-eyes-and-wavy-mouth.png differ diff --git a/uni_modules/cool-cs/static/emoji/face-without-mouth.png b/uni_modules/cool-cs/static/emoji/face-without-mouth.png new file mode 100644 index 0000000..8a2fbf3 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/face-without-mouth.png differ diff --git a/uni_modules/cool-cs/static/emoji/fearful-face.png b/uni_modules/cool-cs/static/emoji/fearful-face.png new file mode 100644 index 0000000..f1927f0 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/fearful-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/flushed-face.png b/uni_modules/cool-cs/static/emoji/flushed-face.png new file mode 100644 index 0000000..adad5ca Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/flushed-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/freezing-face.png b/uni_modules/cool-cs/static/emoji/freezing-face.png new file mode 100644 index 0000000..97a9310 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/freezing-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/frowning-face-with-open-mouth.png b/uni_modules/cool-cs/static/emoji/frowning-face-with-open-mouth.png new file mode 100644 index 0000000..1ec8ac6 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/frowning-face-with-open-mouth.png differ diff --git a/uni_modules/cool-cs/static/emoji/grimacing-face.png b/uni_modules/cool-cs/static/emoji/grimacing-face.png new file mode 100644 index 0000000..82ca911 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/grimacing-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/grinning-face-with-one-large-and-one-small-eye.png b/uni_modules/cool-cs/static/emoji/grinning-face-with-one-large-and-one-small-eye.png new file mode 100644 index 0000000..7f3ec34 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/grinning-face-with-one-large-and-one-small-eye.png differ diff --git a/uni_modules/cool-cs/static/emoji/grinning-face-with-smiling-eyes.png b/uni_modules/cool-cs/static/emoji/grinning-face-with-smiling-eyes.png new file mode 100644 index 0000000..d90a62d Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/grinning-face-with-smiling-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/grinning-face-with-star-eyes.png b/uni_modules/cool-cs/static/emoji/grinning-face-with-star-eyes.png new file mode 100644 index 0000000..9d3a098 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/grinning-face-with-star-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/grinning-face.png b/uni_modules/cool-cs/static/emoji/grinning-face.png new file mode 100644 index 0000000..56e7da7 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/grinning-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/hugging-face.png b/uni_modules/cool-cs/static/emoji/hugging-face.png new file mode 100644 index 0000000..edc9e01 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/hugging-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/hushed-face.png b/uni_modules/cool-cs/static/emoji/hushed-face.png new file mode 100644 index 0000000..f236530 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/hushed-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/imp.png b/uni_modules/cool-cs/static/emoji/imp.png new file mode 100644 index 0000000..7a4bcdb Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/imp.png differ diff --git a/uni_modules/cool-cs/static/emoji/kissing-face-with-closed-eyes.png b/uni_modules/cool-cs/static/emoji/kissing-face-with-closed-eyes.png new file mode 100644 index 0000000..a16080e Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/kissing-face-with-closed-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/kissing-face-with-smiling-eyes.png b/uni_modules/cool-cs/static/emoji/kissing-face-with-smiling-eyes.png new file mode 100644 index 0000000..f041364 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/kissing-face-with-smiling-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/kissing-face.png b/uni_modules/cool-cs/static/emoji/kissing-face.png new file mode 100644 index 0000000..7f57e24 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/kissing-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/loudly-crying-face.png b/uni_modules/cool-cs/static/emoji/loudly-crying-face.png new file mode 100644 index 0000000..37bc4fd Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/loudly-crying-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/lying-face.png b/uni_modules/cool-cs/static/emoji/lying-face.png new file mode 100644 index 0000000..a7af452 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/lying-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/money-mouth-face.png b/uni_modules/cool-cs/static/emoji/money-mouth-face.png new file mode 100644 index 0000000..e72b3b8 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/money-mouth-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/nauseated-face.png b/uni_modules/cool-cs/static/emoji/nauseated-face.png new file mode 100644 index 0000000..2b30261 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/nauseated-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/nerd-face.png b/uni_modules/cool-cs/static/emoji/nerd-face.png new file mode 100644 index 0000000..c915863 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/nerd-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/neutral-face.png b/uni_modules/cool-cs/static/emoji/neutral-face.png new file mode 100644 index 0000000..8fc3f3e Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/neutral-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/overheated-face.png b/uni_modules/cool-cs/static/emoji/overheated-face.png new file mode 100644 index 0000000..b8c9f63 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/overheated-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/pensive-face.png b/uni_modules/cool-cs/static/emoji/pensive-face.png new file mode 100644 index 0000000..1eefb52 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/pensive-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/persevering-face.png b/uni_modules/cool-cs/static/emoji/persevering-face.png new file mode 100644 index 0000000..daa2cc0 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/persevering-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/pouting-face.png b/uni_modules/cool-cs/static/emoji/pouting-face.png new file mode 100644 index 0000000..398f18a Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/pouting-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/relieved-face.png b/uni_modules/cool-cs/static/emoji/relieved-face.png new file mode 100644 index 0000000..502f517 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/relieved-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/rolling-on-the-floor-laughing.png b/uni_modules/cool-cs/static/emoji/rolling-on-the-floor-laughing.png new file mode 100644 index 0000000..2eabc38 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/rolling-on-the-floor-laughing.png differ diff --git a/uni_modules/cool-cs/static/emoji/serious-face-with-symbols-covering-mouth.png b/uni_modules/cool-cs/static/emoji/serious-face-with-symbols-covering-mouth.png new file mode 100644 index 0000000..c5c95e0 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/serious-face-with-symbols-covering-mouth.png differ diff --git a/uni_modules/cool-cs/static/emoji/shocked-face-with-exploding-head.png b/uni_modules/cool-cs/static/emoji/shocked-face-with-exploding-head.png new file mode 100644 index 0000000..c939400 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/shocked-face-with-exploding-head.png differ diff --git a/uni_modules/cool-cs/static/emoji/sleeping-face.png b/uni_modules/cool-cs/static/emoji/sleeping-face.png new file mode 100644 index 0000000..749e4ee Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/sleeping-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/sleepy-face.png b/uni_modules/cool-cs/static/emoji/sleepy-face.png new file mode 100644 index 0000000..21b72c1 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/sleepy-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/slightly-frowning-face.png b/uni_modules/cool-cs/static/emoji/slightly-frowning-face.png new file mode 100644 index 0000000..8608109 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/slightly-frowning-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/slightly-smiling-face.png b/uni_modules/cool-cs/static/emoji/slightly-smiling-face.png new file mode 100644 index 0000000..a0d68d1 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/slightly-smiling-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-halo.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-halo.png new file mode 100644 index 0000000..0cd0b3d Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-halo.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-heart-shaped-eyes.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-heart-shaped-eyes.png new file mode 100644 index 0000000..2cefcb5 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-heart-shaped-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-horns.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-horns.png new file mode 100644 index 0000000..f0b56af Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-horns.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth-and-smiling-eyes.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth-and-smiling-eyes.png new file mode 100644 index 0000000..a702c93 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth-and-smiling-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth-and-tightly-closed-eyes.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth-and-tightly-closed-eyes.png new file mode 100644 index 0000000..83ebaa5 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth-and-tightly-closed-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth.png new file mode 100644 index 0000000..7798b41 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-open-mouth.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes-and-hand-covering-mouth.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes-and-hand-covering-mouth.png new file mode 100644 index 0000000..27777df Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes-and-hand-covering-mouth.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes-and-three-hearts.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes-and-three-hearts.png new file mode 100644 index 0000000..d621f0d Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes-and-three-hearts.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes.png new file mode 100644 index 0000000..69700dc Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-smiling-eyes.png differ diff --git a/uni_modules/cool-cs/static/emoji/smiling-face-with-sunglasses.png b/uni_modules/cool-cs/static/emoji/smiling-face-with-sunglasses.png new file mode 100644 index 0000000..2a70eff Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smiling-face-with-sunglasses.png differ diff --git a/uni_modules/cool-cs/static/emoji/smirking-face.png b/uni_modules/cool-cs/static/emoji/smirking-face.png new file mode 100644 index 0000000..430d45b Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/smirking-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/sneezing-face.png b/uni_modules/cool-cs/static/emoji/sneezing-face.png new file mode 100644 index 0000000..18f5b95 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/sneezing-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/thinking-face.png b/uni_modules/cool-cs/static/emoji/thinking-face.png new file mode 100644 index 0000000..7431ed0 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/thinking-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/tired-face.png b/uni_modules/cool-cs/static/emoji/tired-face.png new file mode 100644 index 0000000..ff0898f Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/tired-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/upside-down-face.png b/uni_modules/cool-cs/static/emoji/upside-down-face.png new file mode 100644 index 0000000..677f746 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/upside-down-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/weary-face.png b/uni_modules/cool-cs/static/emoji/weary-face.png new file mode 100644 index 0000000..74325b9 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/weary-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/white-frowning-face.png b/uni_modules/cool-cs/static/emoji/white-frowning-face.png new file mode 100644 index 0000000..3644ff5 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/white-frowning-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/white-smiling-face.png b/uni_modules/cool-cs/static/emoji/white-smiling-face.png new file mode 100644 index 0000000..082b271 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/white-smiling-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/winking-face.png b/uni_modules/cool-cs/static/emoji/winking-face.png new file mode 100644 index 0000000..59c99e0 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/winking-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/worried-face.png b/uni_modules/cool-cs/static/emoji/worried-face.png new file mode 100644 index 0000000..8638920 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/worried-face.png differ diff --git a/uni_modules/cool-cs/static/emoji/zipper-mouth-face.png b/uni_modules/cool-cs/static/emoji/zipper-mouth-face.png new file mode 100644 index 0000000..79e02a3 Binary files /dev/null and b/uni_modules/cool-cs/static/emoji/zipper-mouth-face.png differ diff --git a/uni_modules/cool-cs/static/fn-camera.png b/uni_modules/cool-cs/static/fn-camera.png new file mode 100644 index 0000000..9593ed6 Binary files /dev/null and b/uni_modules/cool-cs/static/fn-camera.png differ diff --git a/uni_modules/cool-cs/static/fn-pic.png b/uni_modules/cool-cs/static/fn-pic.png new file mode 100644 index 0000000..2584560 Binary files /dev/null and b/uni_modules/cool-cs/static/fn-pic.png differ diff --git a/uni_modules/cool-cs/static/minus.png b/uni_modules/cool-cs/static/minus.png new file mode 100644 index 0000000..723dbd8 Binary files /dev/null and b/uni_modules/cool-cs/static/minus.png differ diff --git a/uni_modules/cool-cs/static/plus.png b/uni_modules/cool-cs/static/plus.png new file mode 100644 index 0000000..38acc2c Binary files /dev/null and b/uni_modules/cool-cs/static/plus.png differ diff --git a/uni_modules/cool-cs/types/index.d.ts b/uni_modules/cool-cs/types/index.d.ts new file mode 100644 index 0000000..ec31c09 --- /dev/null +++ b/uni_modules/cool-cs/types/index.d.ts @@ -0,0 +1,16 @@ +export declare namespace Cs { + interface Content { + type: "text" | "image" | "voice" | "video" | "file" | "link" | "location" | "emoji"; + data: string; + } + + interface Msg extends Eps.CsMsgEntity { + content: Content; + sessionId?: number; + } + + interface Session { + id: number; + [key: string]: any; + } +} diff --git a/uni_modules/cool-cs/utils/index.ts b/uni_modules/cool-cs/utils/index.ts new file mode 100644 index 0000000..40f3e27 --- /dev/null +++ b/uni_modules/cool-cs/utils/index.ts @@ -0,0 +1,13 @@ +import dayjs from "dayjs"; + +// 日期格式化 +export function dateFormatter(date?: Date) { + const t = dayjs(date); + + // 在今天之前 + if (t.isBefore(dayjs().hour(0).minute(0).second(0))) { + return t.format("YYYY-MM-DD HH:mm"); + } else { + return t.format("HH:mm"); + } +} diff --git a/uni_modules/cool-ui/changelog.md b/uni_modules/cool-ui/changelog.md new file mode 100644 index 0000000..832eea8 --- /dev/null +++ b/uni_modules/cool-ui/changelog.md @@ -0,0 +1,16 @@ +## 2024-4-27 + +- 优化 cl-switch 组件 + +## 2024-3-13 + +- 添加 cl-select-city 组件 + +## 2024-3-8 + +- 部分组件重构 +- 更新 icon + +## 2024-3-1 + +- [cl-select-date] 解决切换日期时,列数据显示问题 diff --git a/uni_modules/cool-ui/components/cl-action-sheet/cl-action-sheet.vue b/uni_modules/cool-ui/components/cl-action-sheet/cl-action-sheet.vue new file mode 100644 index 0000000..d031746 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-action-sheet/cl-action-sheet.vue @@ -0,0 +1,137 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-avatar-group/cl-avatar-group.vue b/uni_modules/cool-ui/components/cl-avatar-group/cl-avatar-group.vue new file mode 100644 index 0000000..c71c87c --- /dev/null +++ b/uni_modules/cool-ui/components/cl-avatar-group/cl-avatar-group.vue @@ -0,0 +1,61 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-avatar/cl-avatar.vue b/uni_modules/cool-ui/components/cl-avatar/cl-avatar.vue new file mode 100644 index 0000000..d4f4056 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-avatar/cl-avatar.vue @@ -0,0 +1,101 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-badge/cl-badge.vue b/uni_modules/cool-ui/components/cl-badge/cl-badge.vue new file mode 100644 index 0000000..e7fe5d5 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-badge/cl-badge.vue @@ -0,0 +1,77 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-banner/cl-banner.vue b/uni_modules/cool-ui/components/cl-banner/cl-banner.vue new file mode 100644 index 0000000..cca4b54 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-banner/cl-banner.vue @@ -0,0 +1,293 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-button/cl-button.vue b/uni_modules/cool-ui/components/cl-button/cl-button.vue new file mode 100644 index 0000000..ebd664f --- /dev/null +++ b/uni_modules/cool-ui/components/cl-button/cl-button.vue @@ -0,0 +1,179 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-captcha/cl-captcha.vue b/uni_modules/cool-ui/components/cl-captcha/cl-captcha.vue new file mode 100644 index 0000000..50b3612 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-captcha/cl-captcha.vue @@ -0,0 +1,123 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-card/cl-card.vue b/uni_modules/cool-ui/components/cl-card/cl-card.vue new file mode 100644 index 0000000..b184e2c --- /dev/null +++ b/uni_modules/cool-ui/components/cl-card/cl-card.vue @@ -0,0 +1,67 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-checkbox-group/cl-checkbox-group.vue b/uni_modules/cool-ui/components/cl-checkbox-group/cl-checkbox-group.vue new file mode 100644 index 0000000..eb719d9 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-checkbox-group/cl-checkbox-group.vue @@ -0,0 +1,63 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-checkbox/cl-checkbox.vue b/uni_modules/cool-ui/components/cl-checkbox/cl-checkbox.vue new file mode 100644 index 0000000..dffb811 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-checkbox/cl-checkbox.vue @@ -0,0 +1,154 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-col/cl-col.vue b/uni_modules/cool-ui/components/cl-col/cl-col.vue new file mode 100644 index 0000000..9e69e8f --- /dev/null +++ b/uni_modules/cool-ui/components/cl-col/cl-col.vue @@ -0,0 +1,65 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-confirm/cl-confirm.vue b/uni_modules/cool-ui/components/cl-confirm/cl-confirm.vue new file mode 100644 index 0000000..6d3674f --- /dev/null +++ b/uni_modules/cool-ui/components/cl-confirm/cl-confirm.vue @@ -0,0 +1,176 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-countdown/cl-countdown.vue b/uni_modules/cool-ui/components/cl-countdown/cl-countdown.vue new file mode 100644 index 0000000..9624843 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-countdown/cl-countdown.vue @@ -0,0 +1,273 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-dialog/cl-dialog.vue b/uni_modules/cool-ui/components/cl-dialog/cl-dialog.vue new file mode 100644 index 0000000..7ee6d63 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-dialog/cl-dialog.vue @@ -0,0 +1,110 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-divider/cl-divider.vue b/uni_modules/cool-ui/components/cl-divider/cl-divider.vue new file mode 100644 index 0000000..cf75419 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-divider/cl-divider.vue @@ -0,0 +1,53 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-empty/cl-empty.vue b/uni_modules/cool-ui/components/cl-empty/cl-empty.vue new file mode 100644 index 0000000..a169b62 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-empty/cl-empty.vue @@ -0,0 +1,68 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-filter-bar/cl-filter-bar.vue b/uni_modules/cool-ui/components/cl-filter-bar/cl-filter-bar.vue new file mode 100644 index 0000000..588804a --- /dev/null +++ b/uni_modules/cool-ui/components/cl-filter-bar/cl-filter-bar.vue @@ -0,0 +1,124 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-filter-item/cl-filter-item.vue b/uni_modules/cool-ui/components/cl-filter-item/cl-filter-item.vue new file mode 100644 index 0000000..67e8731 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-filter-item/cl-filter-item.vue @@ -0,0 +1,348 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-footer/cl-footer.vue b/uni_modules/cool-ui/components/cl-footer/cl-footer.vue new file mode 100644 index 0000000..ce173fc --- /dev/null +++ b/uni_modules/cool-ui/components/cl-footer/cl-footer.vue @@ -0,0 +1,157 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-form-item/cl-form-item.vue b/uni_modules/cool-ui/components/cl-form-item/cl-form-item.vue new file mode 100644 index 0000000..b78fa5c --- /dev/null +++ b/uni_modules/cool-ui/components/cl-form-item/cl-form-item.vue @@ -0,0 +1,286 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-form/cl-form.vue b/uni_modules/cool-ui/components/cl-form/cl-form.vue new file mode 100644 index 0000000..5d0908b --- /dev/null +++ b/uni_modules/cool-ui/components/cl-form/cl-form.vue @@ -0,0 +1,244 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-grid-item/cl-grid-item.vue b/uni_modules/cool-ui/components/cl-grid-item/cl-grid-item.vue new file mode 100644 index 0000000..66f5dc4 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-grid-item/cl-grid-item.vue @@ -0,0 +1,28 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-grid/cl-grid.vue b/uni_modules/cool-ui/components/cl-grid/cl-grid.vue new file mode 100644 index 0000000..c67d35e --- /dev/null +++ b/uni_modules/cool-ui/components/cl-grid/cl-grid.vue @@ -0,0 +1,31 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-guide/cl-guide.vue b/uni_modules/cool-ui/components/cl-guide/cl-guide.vue new file mode 100644 index 0000000..d686433 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-guide/cl-guide.vue @@ -0,0 +1,321 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-icon/cl-icon.vue b/uni_modules/cool-ui/components/cl-icon/cl-icon.vue new file mode 100644 index 0000000..e10305a --- /dev/null +++ b/uni_modules/cool-ui/components/cl-icon/cl-icon.vue @@ -0,0 +1,39 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-image/cl-image.vue b/uni_modules/cool-ui/components/cl-image/cl-image.vue new file mode 100644 index 0000000..64e2e4e --- /dev/null +++ b/uni_modules/cool-ui/components/cl-image/cl-image.vue @@ -0,0 +1,182 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-input-number/cl-input-number.vue b/uni_modules/cool-ui/components/cl-input-number/cl-input-number.vue new file mode 100644 index 0000000..65c5a31 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-input-number/cl-input-number.vue @@ -0,0 +1,206 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-input/cl-input.vue b/uni_modules/cool-ui/components/cl-input/cl-input.vue new file mode 100644 index 0000000..cef93ac --- /dev/null +++ b/uni_modules/cool-ui/components/cl-input/cl-input.vue @@ -0,0 +1,240 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-list-index/cl-list-index.vue b/uni_modules/cool-ui/components/cl-list-index/cl-list-index.vue new file mode 100644 index 0000000..eedc20b --- /dev/null +++ b/uni_modules/cool-ui/components/cl-list-index/cl-list-index.vue @@ -0,0 +1,456 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-list-item/cl-list-item.vue b/uni_modules/cool-ui/components/cl-list-item/cl-list-item.vue new file mode 100644 index 0000000..bd5432f --- /dev/null +++ b/uni_modules/cool-ui/components/cl-list-item/cl-list-item.vue @@ -0,0 +1,258 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-list/cl-list.vue b/uni_modules/cool-ui/components/cl-list/cl-list.vue new file mode 100644 index 0000000..942700b --- /dev/null +++ b/uni_modules/cool-ui/components/cl-list/cl-list.vue @@ -0,0 +1,33 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-loading-mask/cl-loading-mask.vue b/uni_modules/cool-ui/components/cl-loading-mask/cl-loading-mask.vue new file mode 100644 index 0000000..19147f7 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-loading-mask/cl-loading-mask.vue @@ -0,0 +1,64 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-loading/cl-loading.vue b/uni_modules/cool-ui/components/cl-loading/cl-loading.vue new file mode 100644 index 0000000..0bbf572 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-loading/cl-loading.vue @@ -0,0 +1,24 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-loadmore/cl-loadmore.vue b/uni_modules/cool-ui/components/cl-loadmore/cl-loadmore.vue new file mode 100644 index 0000000..335ddd6 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-loadmore/cl-loadmore.vue @@ -0,0 +1,82 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-noticebar/cl-noticebar.vue b/uni_modules/cool-ui/components/cl-noticebar/cl-noticebar.vue new file mode 100644 index 0000000..5969570 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-noticebar/cl-noticebar.vue @@ -0,0 +1,220 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-page/cl-page.vue b/uni_modules/cool-ui/components/cl-page/cl-page.vue new file mode 100644 index 0000000..e2991d1 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-page/cl-page.vue @@ -0,0 +1,233 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-pay/ali.png b/uni_modules/cool-ui/components/cl-pay/ali.png new file mode 100644 index 0000000..94baa08 Binary files /dev/null and b/uni_modules/cool-ui/components/cl-pay/ali.png differ diff --git a/uni_modules/cool-ui/components/cl-pay/cl-pay.vue b/uni_modules/cool-ui/components/cl-pay/cl-pay.vue new file mode 100644 index 0000000..bd1f31c --- /dev/null +++ b/uni_modules/cool-ui/components/cl-pay/cl-pay.vue @@ -0,0 +1,90 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-pay/wx.png b/uni_modules/cool-ui/components/cl-pay/wx.png new file mode 100644 index 0000000..99aab12 Binary files /dev/null and b/uni_modules/cool-ui/components/cl-pay/wx.png differ diff --git a/uni_modules/cool-ui/components/cl-popup/cl-popup.vue b/uni_modules/cool-ui/components/cl-popup/cl-popup.vue new file mode 100644 index 0000000..432a1d2 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-popup/cl-popup.vue @@ -0,0 +1,295 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-progress/cl-progress.vue b/uni_modules/cool-ui/components/cl-progress/cl-progress.vue new file mode 100644 index 0000000..60dfed3 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-progress/cl-progress.vue @@ -0,0 +1,101 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-radio-group/cl-radio-group.vue b/uni_modules/cool-ui/components/cl-radio-group/cl-radio-group.vue new file mode 100644 index 0000000..0c9502b --- /dev/null +++ b/uni_modules/cool-ui/components/cl-radio-group/cl-radio-group.vue @@ -0,0 +1,50 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-radio/cl-radio.vue b/uni_modules/cool-ui/components/cl-radio/cl-radio.vue new file mode 100644 index 0000000..3766487 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-radio/cl-radio.vue @@ -0,0 +1,155 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-rate/cl-rate.vue b/uni_modules/cool-ui/components/cl-rate/cl-rate.vue new file mode 100644 index 0000000..07db621 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-rate/cl-rate.vue @@ -0,0 +1,138 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-row/cl-row.vue b/uni_modules/cool-ui/components/cl-row/cl-row.vue new file mode 100644 index 0000000..2cfe563 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-row/cl-row.vue @@ -0,0 +1,79 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-scroller/cl-scroller.vue b/uni_modules/cool-ui/components/cl-scroller/cl-scroller.vue new file mode 100644 index 0000000..e7aa29a --- /dev/null +++ b/uni_modules/cool-ui/components/cl-scroller/cl-scroller.vue @@ -0,0 +1,265 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-search/cl-search.vue b/uni_modules/cool-ui/components/cl-search/cl-search.vue new file mode 100644 index 0000000..14388c6 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-search/cl-search.vue @@ -0,0 +1,208 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-select-city/cl-select-city.vue b/uni_modules/cool-ui/components/cl-select-city/cl-select-city.vue new file mode 100644 index 0000000..e696f72 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-select-city/cl-select-city.vue @@ -0,0 +1,307 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-select-date/cl-select-date.vue b/uni_modules/cool-ui/components/cl-select-date/cl-select-date.vue new file mode 100644 index 0000000..d578ee5 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-select-date/cl-select-date.vue @@ -0,0 +1,294 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-select-inner/cl-select-inner.vue b/uni_modules/cool-ui/components/cl-select-inner/cl-select-inner.vue new file mode 100644 index 0000000..672f72c --- /dev/null +++ b/uni_modules/cool-ui/components/cl-select-inner/cl-select-inner.vue @@ -0,0 +1,53 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-select-inner/config.ts b/uni_modules/cool-ui/components/cl-select-inner/config.ts new file mode 100644 index 0000000..643fb09 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-select-inner/config.ts @@ -0,0 +1,39 @@ +import { t } from "/@/locale"; + +export const Props = { + // 组件高 + height: [String, Number], + // 占位文本 + placeholder: { + type: String, + + default: t("请选择"), + }, + // 是否禁用 + + disabled: { + type: Boolean, + default: null, + }, + // 是否带有边框 + border: { + type: Boolean, + default: true, + }, + // 是否圆角 + round: { + type: Boolean, + default: null, + }, + // 图标 + arrowIcon: { + type: String, + default: "cl-icon-arrow-bottom", + }, + // 背景色 + backgroundColor: String, + // 圆角边框 + borderRadius: [String, Number, Array], + // 内间距 + padding: [String, Number, Array], +}; diff --git a/uni_modules/cool-ui/components/cl-select-popup/cl-select-popup.vue b/uni_modules/cool-ui/components/cl-select-popup/cl-select-popup.vue new file mode 100644 index 0000000..58818c7 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-select-popup/cl-select-popup.vue @@ -0,0 +1,302 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-select-region/cl-select-region.vue b/uni_modules/cool-ui/components/cl-select-region/cl-select-region.vue new file mode 100644 index 0000000..1a6704c --- /dev/null +++ b/uni_modules/cool-ui/components/cl-select-region/cl-select-region.vue @@ -0,0 +1,145 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-select/cl-select.vue b/uni_modules/cool-ui/components/cl-select/cl-select.vue new file mode 100644 index 0000000..fb7b6f1 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-select/cl-select.vue @@ -0,0 +1,236 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-service/cl-service.vue b/uni_modules/cool-ui/components/cl-service/cl-service.vue new file mode 100644 index 0000000..60eb369 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-service/cl-service.vue @@ -0,0 +1,90 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-share-popup/cl-share-popup.vue b/uni_modules/cool-ui/components/cl-share-popup/cl-share-popup.vue new file mode 100644 index 0000000..ddfbf61 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-share-popup/cl-share-popup.vue @@ -0,0 +1,72 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-share/alipay.png b/uni_modules/cool-ui/components/cl-share/alipay.png new file mode 100644 index 0000000..94baa08 Binary files /dev/null and b/uni_modules/cool-ui/components/cl-share/alipay.png differ diff --git a/uni_modules/cool-ui/components/cl-share/cl-share.vue b/uni_modules/cool-ui/components/cl-share/cl-share.vue new file mode 100644 index 0000000..c7a276e --- /dev/null +++ b/uni_modules/cool-ui/components/cl-share/cl-share.vue @@ -0,0 +1,127 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-share/qq.png b/uni_modules/cool-ui/components/cl-share/qq.png new file mode 100644 index 0000000..f115924 Binary files /dev/null and b/uni_modules/cool-ui/components/cl-share/qq.png differ diff --git a/uni_modules/cool-ui/components/cl-share/wx.png b/uni_modules/cool-ui/components/cl-share/wx.png new file mode 100644 index 0000000..99aab12 Binary files /dev/null and b/uni_modules/cool-ui/components/cl-share/wx.png differ diff --git a/uni_modules/cool-ui/components/cl-share/wx2.png b/uni_modules/cool-ui/components/cl-share/wx2.png new file mode 100644 index 0000000..61072c7 Binary files /dev/null and b/uni_modules/cool-ui/components/cl-share/wx2.png differ diff --git a/uni_modules/cool-ui/components/cl-skeleton/cl-skeleton.vue b/uni_modules/cool-ui/components/cl-skeleton/cl-skeleton.vue new file mode 100644 index 0000000..2b0030a --- /dev/null +++ b/uni_modules/cool-ui/components/cl-skeleton/cl-skeleton.vue @@ -0,0 +1,39 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-slider-verify/cl-slider-verify.vue b/uni_modules/cool-ui/components/cl-slider-verify/cl-slider-verify.vue new file mode 100644 index 0000000..60b6edd --- /dev/null +++ b/uni_modules/cool-ui/components/cl-slider-verify/cl-slider-verify.vue @@ -0,0 +1,261 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-slider/cl-slider.vue b/uni_modules/cool-ui/components/cl-slider/cl-slider.vue new file mode 100644 index 0000000..f50fec0 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-slider/cl-slider.vue @@ -0,0 +1,110 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-status-bar/cl-status-bar.vue b/uni_modules/cool-ui/components/cl-status-bar/cl-status-bar.vue new file mode 100644 index 0000000..5865297 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-status-bar/cl-status-bar.vue @@ -0,0 +1,64 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-sticky/cl-sticky.vue b/uni_modules/cool-ui/components/cl-sticky/cl-sticky.vue new file mode 100644 index 0000000..081f04f --- /dev/null +++ b/uni_modules/cool-ui/components/cl-sticky/cl-sticky.vue @@ -0,0 +1,69 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-switch/cl-switch.vue b/uni_modules/cool-ui/components/cl-switch/cl-switch.vue new file mode 100644 index 0000000..521e05b --- /dev/null +++ b/uni_modules/cool-ui/components/cl-switch/cl-switch.vue @@ -0,0 +1,64 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-tabs/cl-tabs.vue b/uni_modules/cool-ui/components/cl-tabs/cl-tabs.vue new file mode 100644 index 0000000..84ce283 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-tabs/cl-tabs.vue @@ -0,0 +1,394 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-tag/cl-tag.vue b/uni_modules/cool-ui/components/cl-tag/cl-tag.vue new file mode 100644 index 0000000..759c05e --- /dev/null +++ b/uni_modules/cool-ui/components/cl-tag/cl-tag.vue @@ -0,0 +1,80 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-text/cl-text.vue b/uni_modules/cool-ui/components/cl-text/cl-text.vue new file mode 100644 index 0000000..ac17140 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-text/cl-text.vue @@ -0,0 +1,179 @@ + + + diff --git a/uni_modules/cool-ui/components/cl-textarea/cl-textarea.vue b/uni_modules/cool-ui/components/cl-textarea/cl-textarea.vue new file mode 100644 index 0000000..277d5a7 --- /dev/null +++ b/uni_modules/cool-ui/components/cl-textarea/cl-textarea.vue @@ -0,0 +1,201 @@ +