diff --git a/.github/workflows/docs-deploy.yaml b/.github/workflows/docs-deploy.yaml index 1d876c70..8aec8a33 100644 --- a/.github/workflows/docs-deploy.yaml +++ b/.github/workflows/docs-deploy.yaml @@ -9,7 +9,6 @@ on: jobs: build-and-deploy: - if: github.event.pull_request.merged == true runs-on: ubuntu-latest steps: diff --git a/CHANGELOG.md b/CHANGELOG.md index 2df84713..2ddb1baf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,74 @@ # CHANGE LOG +## 4.5.0 + +破坏性更新。 + +更新 `vue` 版本至 `3.4.0`,请查看相关变更:[Vue 3.4.0](https://github.com/vuejs/core/blob/main/CHANGELOG.md)。该版本破坏性更新了一些东西,例如: + +- `JSX` 命名空间默认移除 +- `ReactiveTransform` 移除 +- `v-is` 指令移除 + +更新 `@vitejs/plugin-vue` 版本至 `5.0.0`,请查看相关变更:[vite-plugin-vue](https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/CHANGELOG.md)。该版本破坏性更新了一些东西,例如: + +- 放弃 `ReactivityTransform` 支持 +- 放弃 `node14, 16` 版本支持 +- 放弃 `vite4.x` 版本支持 +- 弃用 `defineModel` 配置,`vue3.4.0` 版本该功能已经稳定 + +解决 `sameLevel` 问题与核心包 `store/men` 的一些问题。提高了性能,避免了潜在的空引用问题。 + +是统一 `types` 包的导入导出行为。 + +## Feats + +- 统一 `types` 包下的导出方式,现在统一为 `import type { xxx } from '@/types'` 导入 +- `RQRCode` 组件 + - 在 `loading` 状态下会模糊显示二维码,并且展示 `loading` 状态 + - 优化显示 `error` 状态下默认按钮样式 +- 更新 `README.md`, `README-ZH.md` 文档 +- 取消 `changeModelValue` 节流锁 +- 优化 `changeModelValue`, `updateMenuKeyWhenRouteUpdate` 方法,避免潜在的空引用问题 +- 插件相关 + - 更新 `vue` 版本至 `3.4.0` + - 更新 `@vitejs/plugin-vue-jsx` 版本至 `3.1.0` +- `RModal` 组件相关 + - 新增 `memo` 配置项,用于配置是否记忆上一次的位置 +- `RChart` 组件 + - 补充部分注释 + - 新增 `isDispose` 方法,检测当前图表是否被卸载 +- 新增 `AppVersionProvider` 注入器,用于注入 `appVersion` 全局变量,检测是否需要重新加载页面 + +## Fixes + +- 修复初始化的时候面包屑为空的问题 +- 修复 `sameLevel` 平级模式面包屑追加问题 +- `RModal` 组件 + - 修复初始化配置 `show = true` 时,`dad` 属性不生效的问题 + +## 4.4.7 + +## Feats + +- 更新 `vue` 版本至 `3.3.13` 版本 +- 更新 `naive-ui` 版本至 `3.36.0`。新增了几个新组件 +- 更新 `vite` 版本至 `5.0.10` +- `appConfig` 相关 + - 移除 `APP_WATERMARK_CONFIG` 配置项,现在水印配置项会被 `watermarkConfig` 替代 + - 移除 `ROOT_ROUTE` 配置项,现在根路由配置项会被 `appRootRoute` 替代 +- `variable` 相关 + - 移除 `variable` 管理 `ROO_ROUTE` 配置项 +- `commit-message` 新增 `plugin` 更新相关前缀配置 +- `RQRCode` 组件 + - 调整 `loading` 透明度 + - `downloadQRCode` 方法将会返回一个 `Promise` 对象 +- `basic` 包 + - `downloadAnyFile` 方法将会返回一个 `Promise` 对象 +- `types` 包 + - 新增 `ReturnPromiseType` 工具类型,用于获取函数返回值的 `Promise` 类型 + - 新增 `ConditionalExclude` 工具类型,用于条件排除指定类型 + ## 4.4.6 ## Feats diff --git a/README-ZH.md b/README-ZH.md index bcc79fa7..3ca2fc10 100644 --- a/README-ZH.md +++ b/README-ZH.md @@ -1,6 +1,22 @@
- Ray Template

- LICENSE + + Ray Template + +
+
+ node compatibility + LICENSE + language + npm package
@@ -9,32 +25,40 @@ 简体中文 | [English](https://github.com/XiaoDaiGua-Ray/ray-template/blob/main/README.md) -一个 `免费`、`高效`、`特性完整` 并且基于 vite5.x & ts(x) & pinia & vue3.x 等最新技术的中后台模板。 +一个 `完全免费`、`高效`、`特性完整` 并且基于 vite5.x & ts(x) & pinia & vue3.x 等最新技术的中后台模板。
+## 🌻 简介 + +`Ray Template`采用前沿前端技术,摒弃繁杂与臃肿,采用模块化设计,解耦数据、方法和视图,专注业务开发。提供丰富配置和丰富的模板 `Hooks`,支持个性化定制,满足你的项目需求。 + ## ✨ 特性 -- **靠爱发电**:几乎包含市面常见的模板特性并且全部免费使用 -- **最新技术栈**:使用 vue3.x/vite5.x/pinia 等前端前沿技术开发 -- **TypeScript**:应用程序级 JavaScript 的语言 -- **主题**:可配置的主题 -- **国际化**:内置完善的国际化方案 -- **Mock 数据**:内置 Mock 数据方案 -- **权限**:内置完善的动态路由权限生成方案 -- **组件**:二次封装了多个常用的组件 -- **Axios 请求**:二次封装 axios 库,支持:取消、防抖、自动重复取消等功能 -- **缓存**:任意深度页面缓存 -- **SVG**:内置 svg icon 解决方案 -- **独立的 Data Methods Views**:解耦管理的数据、方法、视图,放心二次开发 -- **模板专属 hooks**:基于模板特性封装的 hooks 让你更加方便的使用模板一些功能 +- `全新技术栈:`使用 ts(x), vite5.x, vue3.x, pinia 等前端前沿技术开发 +- `主题:`可配置的主题 +- `国际化:`内置完善的国际化方案 +- `权限:`内置完善的动态路由权限生成方案 +- `组件:`二次封装了多个常用的组件 +- `工具包:`常用的工具函数封装 +- `缓存:`任意深度页面缓存 +- `模块化设计:`解耦管理的数据、方法、视图,放心二次开发 +- `配置化:`支持丰富的配置项 +- `代码风格:`内置 prettier, eslint 等代码风格工具 +- `多端适配:`支持 pc, phone, pad +- `文档:`完善的文档 +- `Mock 数据:`内置 Mock 数据方案 +- `Axios 请求:`二次封装 axios 库,支持:取消、防抖、自动重复取消等功能 +- `SVG:`内置 svg icon 解决方案 +- `Hooks:`基于模板特性封装的 hooks 让你更加方便的使用模板一些功能 +- `TypeScript:`提供完整的类型 -## 🪄 预览地址 +## 👀 预览地址 - [点击预览](https://xiaodaigua-ray.github.io/ray-template/#/) - [点击预览(加速地址)](https://ray-template.yunkuangao.com/#/) -## 🦾 文档地址 +## 📌 文档地址 - [文档](https://xiaodaigua-ray.github.io/ray-template-doc/) - [文档(加速地址)](https://ray-template.yunkuangao.com/ray-template-doc/) @@ -50,8 +74,9 @@ - [Vue3](https://v3.vuejs.org/) - 熟悉 Vue 基础语法 - [TypeScript](https://www.typescriptlang.org/) - 熟悉 TypeScript 基本语法 - [Es6+](http://es6.ruanyifeng.com/) - 熟悉 es6 基本语法 +- [Vue-Hooks-Plus] - 熟悉 vue-hooks-plus useRequest 方法的基本使用 - [Vue-Router-Next](https://next.router.vuejs.org/) - 熟悉 vue-router4.x 基本使用 -- [Naive-UI](https://www.naiveui.com) - ui 基本使用 +- [Naive-UI](https://www.naiveui.com) - naive ui 基本使用 - [Mock.js](https://github.com/nuysoft/Mock) - mockjs 基本语法 - [Pinia](https://pinia.vuejs.org/zh/introduction.html) - 状态管理器 pinia 使用 - [TSX](https://github.com/vuejs/babel-plugin-jsx/blob/main/packages/babel-plugin-jsx/README-zh_CN.md) - tsx 基本语法 @@ -98,9 +123,9 @@ pnpm preview pnpm report ``` -### 开发 +### 快速开发 -简介、易上手是该模板的核心思路。所以你可以放心的直接删除 `views/demo` `router/moduels/demo` 下的所有文件,这样就是一个干净的项目了。 +只需要删除 `views/demo`, `router/modules/demo` 下的文件即可得到一个干净的项目模板。 ## 🪴 项目活动 diff --git a/README.md b/README.md index 35ae9450..6cf7dcc4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,22 @@
- Ray Template

- LICENSE + + Ray Template + +
+
+ node compatibility + LICENSE + language + npm package
@@ -9,35 +25,43 @@ English | [简体中文](https://github.com/XiaoDaiGua-Ray/ray-template/blob/main/README-ZH.md) -A `free`, `efficient`, `complete with features` middle and backend template based on the latest technologies such as vite5.x & ts(x) & pinia & vue3.x. +A `completely free`, `efficient`, `feature complete` and based on vite5. x & ts(x) & pinia & vue3. x and other latest technology in the background template.
-## ✨ Feature +## 🌻 Intro -- **Power by love**: Contains almost all common template features on the market and all are free to use. -- **Latest Technology Stack**:Developed using front-end cutting-edge technologies such as vue3.x/vite5.x/pinia. -- **TypeScript**:The language for application-level JavaScript. -- **App Theme**:Configurable themes. -- **Globalization**:Built-in complete internationalization solution. -- **Mock Data**:Built-in Mock data scheme. -- **Permissions**:Built-in complete dynamic routing permission generation solution. -- **Components**:Secondary encapsulation of multiple commonly used components. -- **Axios Request**:Secondary encapsulation of the axios library, supporting functions such as cancellation, anti-shake, automatic repeat cancellation, etc. -- **Page Cache**:Arbitrarily deep page cache. -- **SVG**:Built-in svg icon solution. -- **Standalone Data Methods Views**:Decoupled management of data, methods, and views allows for secondary development with confidence. -- **Template Specific Hooks** : Hooks based on the template feature package make it easier to use some of the features of the template. +`Ray Template` uses cutting-edge front-end technology, abandoning complexity and bloat, using modular design, decoupling data, methods and views, focusing on business development. Provide rich configuration and rich template `Hooks`, support personalized customization, to meet your project needs. -## 🪄 Preview +## ✨ Features -- [Click to preview](https://xiaodaigua-ray.github.io/ray-template/#/) -- [Click to preview(Acceleration address)](https://ray-template.yunkuangao.com/#/) +- `New technology stack:` using ts(x), vite5. x, vue3. x, pinia and other front-end cutting-edge technology development +- `Theme:` configurable theme +- `Internationalization:` built-in perfect internationalization solution +- `Permissions:` built-in perfect dynamic routing permission generation solution +- `Components:` secondary encapsulation of multiple common components +- `Toolkit:` common tool function packaging +- `Cache:` arbitrary depth page caching +- `Modular design:` decoupling management data, methods, views, rest assured secondary development +- `Configurable:` support rich configuration items +- `Code style:` built-in prettier, eslint and other code style tools +- `Multi-terminal adaptation:` support pc, phone, pad +- `Documentation:` complete documentation +- `Mock data:` built-in Mock data solution +- `Axios request:` secondary encapsulation of axios library, support: cancel, jitter, automatic repeat cancellation and other functions +- `SVG:` built-in svg icon solution +- `Hooks:` based on the template characteristics of the encapsulated hooks to make it easier to use some functions of the template +- `TypeScript:` provide a complete type -## 🦾 Document +## 👀 Preview -- [Document](https://xiaodaigua-ray.github.io/ray-template-doc/) -- [Document(Acceleration address)](https://ray-template.yunkuangao.com/ray-template-doc/) +- [Preview](https://xiaodaigua-ray.github.io/ray-template/#/) +- [Preview(Acceleration address)](https://ray-template.yunkuangao.com/#/) + +## 📌 Documentation + +- [Documentation](https://xiaodaigua-ray.github.io/ray-template-doc/) +- [Documentation(Acceleration address)](https://ray-template.yunkuangao.com/ray-template-doc/) ## 🔋 Change Log @@ -45,16 +69,17 @@ A `free`, `efficient`, `complete with features` middle and backend template base ## 🪴 Prepare -- [Node](http://nodejs.org/) and [git](https://git-scm.com/) - Project development environment -- [Vite](https://vitejs.dev/) - Familiar with vite features -- [Vue3](https://v3.vuejs.org/) - Familiar with Vue3.x basic syntax -- [TypeScript](https://www.typescriptlang.org/) - Familiar with TypeScript basic syntax -- [Es6+](http://es6.ruanyifeng.com/) - Familiar with es6 basic syntax -- [Vue-Router-Next](https://next.router.vuejs.org/) - Familiar with the basic use of vue-router4.x -- [Naive-UI](https://www.naiveui.com) - UI basic usage -- [Mock.js](https://github.com/nuysoft/Mock) - Mockjs basic syntax -- [Pinia](https://pinia.vuejs.org/zh/introduction.html) - State manager pinia uses -- [TSX](https://github.com/vuejs/babel-plugin-jsx/blob/main/packages/babel-plugin-jsx/README-zh_CN.md) - TSX basic syntax +- [Node](http://nodejs.org/) and [git](https://git-scm.com/) - project development environment +- [Vite](https://vitejs.dev/) - familiar with vite features +- [Vue3](https://v3.vuejs.org/) - familiar with Vue basic syntax +- [TypeScript](https://www.typescriptlang.org/) - familiar with TypeScript basic syntax +- [Es6+](http://es6.ruanyifeng.com/) - familiar with es6 basic syntax +- [Vue-Hooks-Plus] - familiar with vue-hooks-plus useRequest method basic use +- [Vue-Router-Next](https://next.router.vuejs.org/) - familiar with vue-router4.x basic use +- [Naive-UI](https://www.naiveui.com) - naive ui basic use +- [Mock.js](https://github.com/nuysoft/Mock) - mockjs basic syntax +- [Pinia](https://pinia.vuejs.org/zh/introduction.html) - state manager pinia usage +- [TSX](https://github.com/vuejs/babel-plugin-jsx/blob/main/packages/babel-plugin-jsx/README-zh_CN.md) - tsx basic syntax ## 📦 Setup @@ -80,7 +105,7 @@ pnpm i pnpm dev ``` -### Project packaging +### Build project ```sh pnpm build @@ -92,23 +117,23 @@ pnpm build pnpm preview ``` -### Volumetric analysis +### Report project ```sh pnpm report ``` -### Develop +### Development -Introduction and ease of use are the core ideas of this template. So you can safely delete all files under `views/demo` and `router/moduels/demo`, and you will have a clean project. +Just delete the files under `views/demo`, `router/modules/demo` to get a clean project template. ## 🪴 Project Activities ![Alt](https://repobeats.axiom.co/api/embed/fab6071297ab281913a42f07a2779b488cfd62b8.svg 'Repobeats analytics image') -### Contributor +### Contributors -Thanks for all their contributions 🐝! +Thanks for all their contributions 🐝 ! diff --git a/cfg.ts b/cfg.ts index 35ddd233..5dee5ebb 100644 --- a/cfg.ts +++ b/cfg.ts @@ -42,7 +42,7 @@ import { htmlTitlePlugin, mixinCSSPlugin } from './vite-plugins/index' import { APP_THEME } from './src/app-config/designConfig' import { PRE_LOADING_CONFIG, SIDE_BAR_LOGO } from './src/app-config/appConfig' -import type { AppConfigExport } from '@/types/modules/cfg' +import type { AppConfigExport } from '@/types' import type { BuildOptions } from 'vite' const config: AppConfigExport = { diff --git a/commitlint.config.cjs b/commitlint.config.cjs index 5326360b..27a034ac 100644 --- a/commitlint.config.cjs +++ b/commitlint.config.cjs @@ -8,6 +8,7 @@ // style: 代码格式(不影响功能,例如空格、分号等格式修正) | Code format (no functional impact, such as space, semicolon, etc.) // version: 更新迭代 package.json 版本号 | Update the package.json version number // build: 构建 | Build +// plugin: 更新插件版本 | Update plugin version module.exports = { ignores: [(commit) => commit.includes('init')], @@ -33,6 +34,7 @@ module.exports = { 'style', 'version', 'build', + 'plugin', ], ], }, diff --git a/package.json b/package.json index a1ff91a8..82542875 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ray-template", "private": false, - "version": "4.4.6", + "version": "4.5.0", "type": "module", "engines": { "node": "^18.0.0 || >=20.0.0", @@ -44,11 +44,11 @@ "interactjs": "1.10.26", "lodash-es": "^4.17.21", "mockjs": "1.1.0", - "naive-ui": "^2.35.0", + "naive-ui": "^2.36.0", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.0", "print-js": "^1.6.0", - "vue": "^3.3.11", + "vue": "^3.4.0", "vue-hooks-plus": "1.8.5", "vue-i18n": "^9.8.0", "vue-router": "^4.2.5", @@ -67,8 +67,8 @@ "@types/mockjs": "1.0.7", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.5.0", - "@vitejs/plugin-vue": "^4.4.1", - "@vitejs/plugin-vue-jsx": "^3.0.2", + "@vitejs/plugin-vue": "^5.0.0", + "@vitejs/plugin-vue-jsx": "^3.1.0", "@vue-hooks-plus/resolvers": "1.2.4", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^11.0.3", @@ -93,7 +93,7 @@ "typescript": "^5.2.2", "unplugin-auto-import": "^0.16.6", "unplugin-vue-components": "^0.25.2", - "vite": "^5.0.8", + "vite": "^5.0.10", "vite-plugin-cdn2": "0.15.2", "vite-plugin-compression": "^0.5.1", "vite-plugin-ejs": "^1.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd6ee6c3..fbaed425 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: dependencies: '@vueuse/core': specifier: ^10.6.1 - version: 10.6.1(vue@3.3.11) + version: 10.6.1(vue@3.4.0) awesome-qr: specifier: 2.1.5-rc.0 version: 2.1.5-rc.0 @@ -42,11 +42,11 @@ dependencies: specifier: 1.1.0 version: 1.1.0 naive-ui: - specifier: ^2.35.0 - version: 2.35.0(vue@3.3.11) + specifier: ^2.36.0 + version: 2.36.0(vue@3.4.0) pinia: specifier: ^2.1.7 - version: 2.1.7(typescript@5.2.2)(vue@3.3.11) + version: 2.1.7(typescript@5.2.2)(vue@3.4.0) pinia-plugin-persistedstate: specifier: ^3.2.0 version: 3.2.0(pinia@2.1.7) @@ -54,17 +54,17 @@ dependencies: specifier: ^1.6.0 version: 1.6.0 vue: - specifier: ^3.3.11 - version: 3.3.11(typescript@5.2.2) + specifier: ^3.4.0 + version: 3.4.0(typescript@5.2.2) vue-hooks-plus: specifier: 1.8.5 - version: 1.8.5(vue@3.3.11) + version: 1.8.5(vue@3.4.0) vue-i18n: specifier: ^9.8.0 - version: 9.8.0(vue@3.3.11) + version: 9.8.0(vue@3.4.0) vue-router: specifier: ^4.2.5 - version: 4.2.5(vue@3.3.11) + version: 4.2.5(vue@3.4.0) xlsx: specifier: ^0.18.5 version: 0.18.5 @@ -107,11 +107,11 @@ devDependencies: specifier: ^6.5.0 version: 6.5.0(eslint@8.52.0)(typescript@5.2.2) '@vitejs/plugin-vue': - specifier: ^4.4.1 - version: 4.4.1(vite@5.0.8)(vue@3.3.11) + specifier: ^5.0.0 + version: 5.0.0(vite@5.0.10)(vue@3.4.0) '@vitejs/plugin-vue-jsx': - specifier: ^3.0.2 - version: 3.0.2(vite@5.0.8)(vue@3.3.11) + specifier: ^3.1.0 + version: 3.1.0(vite@5.0.10)(vue@3.4.0) '@vue-hooks-plus/resolvers': specifier: 1.2.4 version: 1.2.4(vue-hooks-plus@1.8.5) @@ -183,34 +183,34 @@ devDependencies: version: 0.16.6(@vueuse/core@10.6.1) unplugin-vue-components: specifier: ^0.25.2 - version: 0.25.2(vue@3.3.11) + version: 0.25.2(vue@3.4.0) vite: - specifier: ^5.0.8 - version: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + specifier: ^5.0.10 + version: 5.0.10(@types/node@20.4.7)(sass@1.69.5) vite-plugin-cdn2: specifier: 0.15.2 version: 0.15.2 vite-plugin-compression: specifier: ^0.5.1 - version: 0.5.1(vite@5.0.8) + version: 0.5.1(vite@5.0.10) vite-plugin-ejs: specifier: ^1.7.0 - version: 1.7.0(vite@5.0.8) + version: 1.7.0(vite@5.0.10) vite-plugin-eslint: specifier: 1.8.1 - version: 1.8.1(eslint@8.52.0)(vite@5.0.8) + version: 1.8.1(eslint@8.52.0)(vite@5.0.10) vite-plugin-imp: specifier: ^2.4.0 - version: 2.4.0(vite@5.0.8) + version: 2.4.0(vite@5.0.10) vite-plugin-inspect: specifier: ^0.7.38 - version: 0.7.38(vite@5.0.8) + version: 0.7.38(vite@5.0.10) vite-plugin-mock-dev-server: specifier: 1.3.4 - version: 1.3.4(vite@5.0.8) + version: 1.3.4(vite@5.0.10) vite-plugin-svg-icons: specifier: ^2.0.1 - version: 2.0.1(vite@5.0.8) + version: 2.0.1(vite@5.0.10) vite-svg-loader: specifier: ^4.0.0 version: 4.0.0 @@ -245,11 +245,24 @@ packages: chalk: 2.4.2 dev: true + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + /@babel/compat-data@7.22.9: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} dev: true + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core@7.23.2: resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} engines: {node: '>=6.9.0'} @@ -273,6 +286,29 @@ packages: - supports-color dev: true + /@babel/core@7.23.6: + resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helpers': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/eslint-parser@7.22.11(@babel/core@7.23.2)(eslint@8.52.0): resolution: {integrity: sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -291,7 +327,7 @@ packages: resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 @@ -307,11 +343,21 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.6 dev: true /@babel/helper-compilation-targets@7.22.15: @@ -325,19 +371,33 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.9(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 @@ -376,11 +436,11 @@ packages: '@babel/types': 7.23.3 dev: true - /@babel/helper-member-expression-to-functions@7.22.15: - resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==} + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.6 dev: true /@babel/helper-module-imports@7.22.15: @@ -404,11 +464,25 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.6 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -416,15 +490,18 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers@7.22.9(@babel/core@7.23.2): - resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true dependencies: - '@babel/core': 7.23.2 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 dev: true @@ -439,7 +516,7 @@ packages: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.6 dev: true /@babel/helper-split-export-declaration@7.22.6: @@ -467,6 +544,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helpers@7.23.2: resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} engines: {node: '>=6.9.0'} @@ -478,6 +560,17 @@ packages: - supports-color dev: true + /@babel/helpers@7.23.6: + resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/highlight@7.22.13: resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} engines: {node: '>=6.9.0'} @@ -487,6 +580,15 @@ packages: js-tokens: 4.0.0 dev: true + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/parser@7.22.5: resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} engines: {node: '>=6.0.0'} @@ -503,51 +605,51 @@ packages: '@babel/types': 7.23.3 dev: true - /@babel/parser@7.23.5: - resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) dev: true - /@babel/runtime@7.23.2: - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 dev: false /@babel/template@7.22.15: @@ -570,7 +672,7 @@ packages: '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 + '@babel/types': 7.23.6 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -613,6 +715,24 @@ packages: - supports-color dev: true + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.23.3: resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} engines: {node: '>=6.9.0'} @@ -622,8 +742,8 @@ packages: to-fast-properties: 2.0.0 dev: true - /@babel/types@7.23.5: - resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 @@ -813,18 +933,36 @@ packages: css-render: 0.15.12 dev: false - /@css-render/vue3-ssr@0.15.12(vue@3.3.11): + /@css-render/vue3-ssr@0.15.12(vue@3.4.0): resolution: {integrity: sha512-AQLGhhaE0F+rwybRCkKUdzBdTEM/5PZBYy+fSYe1T9z9+yxMuV/k7ZRqa4M69X+EI1W8pa4kc9Iq2VjQkZx4rg==} peerDependencies: vue: ^3.0.11 dependencies: - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) dev: false /@emotion/hash@0.8.0: resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} dev: false + /@esbuild/aix-ppc64@0.19.10: + resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.10: + resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.19.5: resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} engines: {node: '>=12'} @@ -834,10 +972,10 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.7: - resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} + /@esbuild/android-arm@0.19.10: + resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [android] requiresBuild: true dev: true @@ -852,10 +990,10 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.7: - resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} + /@esbuild/android-x64@0.19.10: + resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} engines: {node: '>=12'} - cpu: [arm] + cpu: [x64] os: [android] requiresBuild: true dev: true @@ -870,11 +1008,11 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.7: - resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} + /@esbuild/darwin-arm64@0.19.10: + resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} engines: {node: '>=12'} - cpu: [x64] - os: [android] + cpu: [arm64] + os: [darwin] requiresBuild: true dev: true optional: true @@ -888,10 +1026,10 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.7: - resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} + /@esbuild/darwin-x64@0.19.10: + resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [x64] os: [darwin] requiresBuild: true dev: true @@ -906,11 +1044,11 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.7: - resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} + /@esbuild/freebsd-arm64@0.19.10: + resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} engines: {node: '>=12'} - cpu: [x64] - os: [darwin] + cpu: [arm64] + os: [freebsd] requiresBuild: true dev: true optional: true @@ -924,10 +1062,10 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.7: - resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} + /@esbuild/freebsd-x64@0.19.10: + resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [x64] os: [freebsd] requiresBuild: true dev: true @@ -942,11 +1080,11 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.7: - resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} + /@esbuild/linux-arm64@0.19.10: + resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] + cpu: [arm64] + os: [linux] requiresBuild: true dev: true optional: true @@ -960,10 +1098,10 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.7: - resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} + /@esbuild/linux-arm@0.19.10: + resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: true @@ -978,10 +1116,10 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.7: - resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} + /@esbuild/linux-ia32@0.19.10: + resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [ia32] os: [linux] requiresBuild: true dev: true @@ -996,10 +1134,10 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.7: - resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} + /@esbuild/linux-loong64@0.19.10: + resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} engines: {node: '>=12'} - cpu: [ia32] + cpu: [loong64] os: [linux] requiresBuild: true dev: true @@ -1014,10 +1152,10 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.7: - resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} + /@esbuild/linux-mips64el@0.19.10: + resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} engines: {node: '>=12'} - cpu: [loong64] + cpu: [mips64el] os: [linux] requiresBuild: true dev: true @@ -1032,10 +1170,10 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.7: - resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} + /@esbuild/linux-ppc64@0.19.10: + resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} engines: {node: '>=12'} - cpu: [mips64el] + cpu: [ppc64] os: [linux] requiresBuild: true dev: true @@ -1050,10 +1188,10 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.7: - resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} + /@esbuild/linux-riscv64@0.19.10: + resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} engines: {node: '>=12'} - cpu: [ppc64] + cpu: [riscv64] os: [linux] requiresBuild: true dev: true @@ -1068,10 +1206,10 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.7: - resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} + /@esbuild/linux-s390x@0.19.10: + resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} engines: {node: '>=12'} - cpu: [riscv64] + cpu: [s390x] os: [linux] requiresBuild: true dev: true @@ -1086,10 +1224,10 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.7: - resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} + /@esbuild/linux-x64@0.19.10: + resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} engines: {node: '>=12'} - cpu: [s390x] + cpu: [x64] os: [linux] requiresBuild: true dev: true @@ -1104,11 +1242,11 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.7: - resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} + /@esbuild/netbsd-x64@0.19.10: + resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} engines: {node: '>=12'} cpu: [x64] - os: [linux] + os: [netbsd] requiresBuild: true dev: true optional: true @@ -1122,11 +1260,11 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.7: - resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} + /@esbuild/openbsd-x64@0.19.10: + resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} engines: {node: '>=12'} cpu: [x64] - os: [netbsd] + os: [openbsd] requiresBuild: true dev: true optional: true @@ -1140,11 +1278,11 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.7: - resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} + /@esbuild/sunos-x64@0.19.10: + resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} engines: {node: '>=12'} cpu: [x64] - os: [openbsd] + os: [sunos] requiresBuild: true dev: true optional: true @@ -1158,11 +1296,11 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.7: - resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} + /@esbuild/win32-arm64@0.19.10: + resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} engines: {node: '>=12'} - cpu: [x64] - os: [sunos] + cpu: [arm64] + os: [win32] requiresBuild: true dev: true optional: true @@ -1176,10 +1314,10 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.7: - resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} + /@esbuild/win32-ia32@0.19.10: + resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [ia32] os: [win32] requiresBuild: true dev: true @@ -1194,17 +1332,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.7: - resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.19.5: - resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} + /@esbuild/win32-x64@0.19.10: + resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1212,8 +1341,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.7: - resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} + /@esbuild/win32-x64@0.19.5: + resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1307,7 +1436,7 @@ packages: magic-string: 0.30.5 mlly: 1.4.1 source-map-js: 1.0.2 - vue-i18n: 9.8.0(vue@3.3.11) + vue-i18n: 9.8.0(vue@3.4.0) yaml-eslint-parser: 1.2.2 dev: true @@ -1369,7 +1498,7 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 unplugin: 1.4.0 - vue-i18n: 9.8.0(vue@3.3.11) + vue-i18n: 9.8.0(vue@3.4.0) transitivePeerDependencies: - rollup - supports-color @@ -1404,6 +1533,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -1504,96 +1640,104 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.5.2: - resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==} + /@rollup/rollup-android-arm-eabi@4.9.1: + resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.5.2: - resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==} + /@rollup/rollup-android-arm64@4.9.1: + resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.5.2: - resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==} + /@rollup/rollup-darwin-arm64@4.9.1: + resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.5.2: - resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==} + /@rollup/rollup-darwin-x64@4.9.1: + resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.5.2: - resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==} + /@rollup/rollup-linux-arm-gnueabihf@4.9.1: + resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.5.2: - resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==} + /@rollup/rollup-linux-arm64-gnu@4.9.1: + resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.5.2: - resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==} + /@rollup/rollup-linux-arm64-musl@4.9.1: + resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.5.2: - resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==} + /@rollup/rollup-linux-riscv64-gnu@4.9.1: + resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.1: + resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.5.2: - resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==} + /@rollup/rollup-linux-x64-musl@4.9.1: + resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.5.2: - resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==} + /@rollup/rollup-win32-arm64-msvc@4.9.1: + resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.5.2: - resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==} + /@rollup/rollup-win32-ia32-msvc@4.9.1: + resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.5.2: - resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==} + /@rollup/rollup-win32-x64-msvc@4.9.1: + resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} cpu: [x64] os: [win32] requiresBuild: true @@ -1651,8 +1795,8 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/katex@0.16.2: - resolution: {integrity: sha512-dHsSjSlU/EWEEbeNADr3FtZZOAXPkFPUO457QCnoNqcZQXNqNEu/svQd0Nritvd3wNff4vvC/f4e6xgX3Llt8A==} + /@types/katex@0.16.7: + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} dev: false /@types/lodash-es@4.17.11: @@ -1663,6 +1807,10 @@ packages: /@types/lodash@4.14.199: resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} + /@types/lodash@4.14.202: + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + dev: false + /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true @@ -1969,31 +2117,31 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitejs/plugin-vue-jsx@3.0.2(vite@5.0.8)(vue@3.3.11): - resolution: {integrity: sha512-obF26P2Z4Ogy3cPp07B4VaW6rpiu0ue4OT2Y15UxT5BZZ76haUY9guOsZV3uWh/I6xc+VeiW+ZVabRE82FyzWw==} + /@vitejs/plugin-vue-jsx@3.1.0(vite@5.0.10)(vue@3.4.0): + resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.0.0 + vite: ^4.0.0 || ^5.0.0 vue: ^3.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2) - '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.2) - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) - vue: 3.3.11(typescript@5.2.2) + '@babel/core': 7.23.6 + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.6) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) + vue: 3.4.0(typescript@5.2.2) transitivePeerDependencies: - supports-color dev: true - /@vitejs/plugin-vue@4.4.1(vite@5.0.8)(vue@3.3.11): - resolution: {integrity: sha512-HCQG8VDFDM7YDAdcj5QI5DvUi+r6xvo9LgvYdk7LSkUNwdpempdB5horkMSZsbdey9Ywsf5aaU8kEPw9M5kREA==} - engines: {node: ^14.18.0 || >=16.0.0} + /@vitejs/plugin-vue@5.0.0(vite@5.0.10)(vue@3.4.0): + resolution: {integrity: sha512-7x5e8X4J1Wi4NxudGjJBd2OFerAi/0nzF80ojCzvfj347WVr0YSn82C8BSsgwSHzlk9Kw5xnZfj0/7RLnNwP5w==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: ^4.0.0 + vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) - vue: 3.3.11(typescript@5.2.2) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) + vue: 3.4.0(typescript@5.2.2) dev: true /@volar/language-core@1.10.1: @@ -2021,24 +2169,24 @@ packages: vue-hooks-plus: ^1.5.2 dependencies: local-pkg: 0.4.3 - vue-hooks-plus: 1.8.5(vue@3.3.11) + vue-hooks-plus: 1.8.5(vue@3.4.0) dev: true /@vue/babel-helper-vue-transform-on@1.1.5: resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==} dev: true - /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.23.2): + /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.23.6): resolution: {integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.6 '@babel/helper-module-imports': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) '@babel/template': 7.22.15 - '@babel/traverse': 7.22.19 - '@babel/types': 7.23.3 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 '@vue/babel-helper-vue-transform-on': 1.1.5 camelcase: 6.3.0 html-tags: 3.3.1 @@ -2047,13 +2195,14 @@ packages: - supports-color dev: true - /@vue/compiler-core@3.3.11: - resolution: {integrity: sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==} + /@vue/compiler-core@3.3.13: + resolution: {integrity: sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==} dependencies: - '@babel/parser': 7.23.5 - '@vue/shared': 3.3.11 + '@babel/parser': 7.23.6 + '@vue/shared': 3.3.13 estree-walker: 2.0.2 source-map-js: 1.0.2 + dev: true /@vue/compiler-core@3.3.8: resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==} @@ -2064,11 +2213,21 @@ packages: source-map-js: 1.0.2 dev: true - /@vue/compiler-dom@3.3.11: - resolution: {integrity: sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==} + /@vue/compiler-core@3.4.0: + resolution: {integrity: sha512-cw4S15PkNGTKkP9OFFl4wnQoJJk+HqaYBafgrpDnSukiQGpcYJeRpzmqnCVCIkl6V6Eqsv58E0OAdl6b592vuA==} dependencies: - '@vue/compiler-core': 3.3.11 - '@vue/shared': 3.3.11 + '@babel/parser': 7.23.6 + '@vue/shared': 3.4.0 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + + /@vue/compiler-dom@3.3.13: + resolution: {integrity: sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==} + dependencies: + '@vue/compiler-core': 3.3.13 + '@vue/shared': 3.3.13 + dev: true /@vue/compiler-dom@3.3.8: resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==} @@ -2077,19 +2236,11 @@ packages: '@vue/shared': 3.3.8 dev: true - /@vue/compiler-sfc@3.3.11: - resolution: {integrity: sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==} + /@vue/compiler-dom@3.4.0: + resolution: {integrity: sha512-E957uOhpoE48YjZGWeAoLmNYd3UeU4oIP8kJi8Rcsb9l2tV8Z48Jn07Zgq1aW0v3vuhlmydEKkKKbhLpADHXEA==} dependencies: - '@babel/parser': 7.23.5 - '@vue/compiler-core': 3.3.11 - '@vue/compiler-dom': 3.3.11 - '@vue/compiler-ssr': 3.3.11 - '@vue/reactivity-transform': 3.3.11 - '@vue/shared': 3.3.11 - estree-walker: 2.0.2 - magic-string: 0.30.5 - postcss: 8.4.32 - source-map-js: 1.0.2 + '@vue/compiler-core': 3.4.0 + '@vue/shared': 3.4.0 /@vue/compiler-sfc@3.3.8: resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==} @@ -2106,11 +2257,18 @@ packages: source-map-js: 1.0.2 dev: true - /@vue/compiler-ssr@3.3.11: - resolution: {integrity: sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==} + /@vue/compiler-sfc@3.4.0: + resolution: {integrity: sha512-PWE0mE2yW7bJS7PmaCrVDEG6KPaDJo0pb4AKnCxJ5lRRDO4IwL/fswBGhCpov+v/c+N/e+hQHpXNwvqU9BtUXg==} dependencies: - '@vue/compiler-dom': 3.3.11 - '@vue/shared': 3.3.11 + '@babel/parser': 7.23.6 + '@vue/compiler-core': 3.4.0 + '@vue/compiler-dom': 3.4.0 + '@vue/compiler-ssr': 3.4.0 + '@vue/shared': 3.4.0 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.32 + source-map-js: 1.0.2 /@vue/compiler-ssr@3.3.8: resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==} @@ -2119,6 +2277,12 @@ packages: '@vue/shared': 3.3.8 dev: true + /@vue/compiler-ssr@3.4.0: + resolution: {integrity: sha512-+oXKy105g9DIYQKDi3Gwung0xqQX5gJHr0GR+Vf7yK/WkNDM6q61ummcKmKAB85EIst8y3vj2PA9z9YU5Oc4DQ==} + dependencies: + '@vue/compiler-dom': 3.4.0 + '@vue/shared': 3.4.0 + /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} @@ -2167,24 +2331,15 @@ packages: dependencies: '@volar/language-core': 1.10.1 '@volar/source-map': 1.10.1 - '@vue/compiler-dom': 3.3.8 + '@vue/compiler-dom': 3.3.13 '@vue/reactivity': 3.3.8 - '@vue/shared': 3.3.8 + '@vue/shared': 3.3.13 minimatch: 9.0.3 muggle-string: 0.3.1 typescript: 5.2.2 vue-template-compiler: 2.7.14 dev: true - /@vue/reactivity-transform@3.3.11: - resolution: {integrity: sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==} - dependencies: - '@babel/parser': 7.23.5 - '@vue/compiler-core': 3.3.11 - '@vue/shared': 3.3.11 - estree-walker: 2.0.2 - magic-string: 0.30.5 - /@vue/reactivity-transform@3.3.8: resolution: {integrity: sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==} dependencies: @@ -2195,46 +2350,50 @@ packages: magic-string: 0.30.5 dev: true - /@vue/reactivity@3.3.11: - resolution: {integrity: sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==} - dependencies: - '@vue/shared': 3.3.11 - /@vue/reactivity@3.3.8: resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==} dependencies: '@vue/shared': 3.3.8 dev: true - /@vue/runtime-core@3.3.11: - resolution: {integrity: sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==} + /@vue/reactivity@3.4.0: + resolution: {integrity: sha512-X6BvQjNcgKKHWPQzlRJjZvIu72Kkn8xJSv6VNptqWh8dToMknD0Hch1l4N7llKgVt6Diq4lMeUnErbZFvuGlAA==} dependencies: - '@vue/reactivity': 3.3.11 - '@vue/shared': 3.3.11 + '@vue/shared': 3.4.0 - /@vue/runtime-dom@3.3.11: - resolution: {integrity: sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==} + /@vue/runtime-core@3.4.0: + resolution: {integrity: sha512-NYrj/JgMMqnSWcIud8lLzDQrBLu+EVEeQ56QE9DYJeKG2eFrnQy8o/h57R9nCprafHs0uImKL3xsdXjHseYVxw==} dependencies: - '@vue/runtime-core': 3.3.11 - '@vue/shared': 3.3.11 - csstype: 3.1.2 + '@vue/reactivity': 3.4.0 + '@vue/shared': 3.4.0 - /@vue/server-renderer@3.3.11(vue@3.3.11): - resolution: {integrity: sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==} + /@vue/runtime-dom@3.4.0: + resolution: {integrity: sha512-1ZoHEsA5l77qbx2F+SWo/hQdBksPuOmww1t/jznidDG+xMB/iidafEFvo2ZTtZii0JfTIrlDhjshfYUvQC17wQ==} + dependencies: + '@vue/runtime-core': 3.4.0 + '@vue/shared': 3.4.0 + csstype: 3.1.3 + + /@vue/server-renderer@3.4.0(vue@3.4.0): + resolution: {integrity: sha512-GuOVCyLDlWPu8nKo5AUxb8B+iB/Ik4I1WwqAlBqf5+y48z6D6rvKshp7KR3cJea+pte1tdTsb0+Ja82KizMZOw==} peerDependencies: - vue: 3.3.11 + vue: 3.4.0 dependencies: - '@vue/compiler-ssr': 3.3.11 - '@vue/shared': 3.3.11 - vue: 3.3.11(typescript@5.2.2) + '@vue/compiler-ssr': 3.4.0 + '@vue/shared': 3.4.0 + vue: 3.4.0(typescript@5.2.2) - /@vue/shared@3.3.11: - resolution: {integrity: sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==} + /@vue/shared@3.3.13: + resolution: {integrity: sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==} + dev: true /@vue/shared@3.3.8: resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} dev: true + /@vue/shared@3.4.0: + resolution: {integrity: sha512-Nhh3ed3G1R6HDAWiG6YYFt0Zmq/To6u5vjzwa9TIquGheCXPY6nEdIAO8ZdlwXsWqC2yNLj700FOvShpYt5CEA==} + /@vue/typescript@1.8.8(typescript@5.2.2): resolution: {integrity: sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==} dependencies: @@ -2244,13 +2403,13 @@ packages: - typescript dev: true - /@vueuse/core@10.6.1(vue@3.3.11): + /@vueuse/core@10.6.1(vue@3.4.0): resolution: {integrity: sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==} dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.6.1 - '@vueuse/shared': 10.6.1(vue@3.3.11) - vue-demi: 0.14.6(vue@3.3.11) + '@vueuse/shared': 10.6.1(vue@3.4.0) + vue-demi: 0.14.6(vue@3.4.0) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -2258,10 +2417,10 @@ packages: /@vueuse/metadata@10.6.1: resolution: {integrity: sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==} - /@vueuse/shared@10.6.1(vue@3.3.11): + /@vueuse/shared@10.6.1(vue@3.4.0): resolution: {integrity: sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==} dependencies: - vue-demi: 0.14.6(vue@3.3.11) + vue-demi: 0.14.6(vue@3.4.0) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -2764,6 +2923,17 @@ packages: update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: true + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001571 + electron-to-chromium: 1.4.616 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: @@ -2842,6 +3012,10 @@ packages: resolution: {integrity: sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==} dev: true + /caniuse-lite@1.0.30001571: + resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==} + dev: true + /canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} engines: {node: '>=6'} @@ -3246,8 +3420,8 @@ packages: resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} dev: false - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} /currency.js@2.0.4: resolution: {integrity: sha512-6/OplJYgJ0RUlli74d93HJ/OsKVBi8lB1+Z6eJYS1YZzBuIp4qKKHpJ7ad+GvTlWmLR/hLJOWTykN5Nm8NJ7+w==} @@ -3271,7 +3445,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.23.6 dev: false /dayjs@1.11.10: @@ -3623,6 +3797,10 @@ packages: resolution: {integrity: sha512-KGKjcafTpOxda0kqwQ72M0tDmX6RsGhUJTy0Hr7slt0+CgHh9Oex8JdjY9Og68dUkTLUlBOJC0A5W5Mw3QSGCg==} dev: true + /electron-to-chromium@1.4.616: + resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3646,7 +3824,6 @@ packages: /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - dev: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -3727,6 +3904,37 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild@0.19.10: + resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.10 + '@esbuild/android-arm': 0.19.10 + '@esbuild/android-arm64': 0.19.10 + '@esbuild/android-x64': 0.19.10 + '@esbuild/darwin-arm64': 0.19.10 + '@esbuild/darwin-x64': 0.19.10 + '@esbuild/freebsd-arm64': 0.19.10 + '@esbuild/freebsd-x64': 0.19.10 + '@esbuild/linux-arm': 0.19.10 + '@esbuild/linux-arm64': 0.19.10 + '@esbuild/linux-ia32': 0.19.10 + '@esbuild/linux-loong64': 0.19.10 + '@esbuild/linux-mips64el': 0.19.10 + '@esbuild/linux-ppc64': 0.19.10 + '@esbuild/linux-riscv64': 0.19.10 + '@esbuild/linux-s390x': 0.19.10 + '@esbuild/linux-x64': 0.19.10 + '@esbuild/netbsd-x64': 0.19.10 + '@esbuild/openbsd-x64': 0.19.10 + '@esbuild/sunos-x64': 0.19.10 + '@esbuild/win32-arm64': 0.19.10 + '@esbuild/win32-ia32': 0.19.10 + '@esbuild/win32-x64': 0.19.10 + dev: true + /esbuild@0.19.5: resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} engines: {node: '>=12'} @@ -3757,36 +3965,6 @@ packages: '@esbuild/win32-x64': 0.19.5 dev: true - /esbuild@0.19.7: - resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.19.7 - '@esbuild/android-arm64': 0.19.7 - '@esbuild/android-x64': 0.19.7 - '@esbuild/darwin-arm64': 0.19.7 - '@esbuild/darwin-x64': 0.19.7 - '@esbuild/freebsd-arm64': 0.19.7 - '@esbuild/freebsd-x64': 0.19.7 - '@esbuild/linux-arm': 0.19.7 - '@esbuild/linux-arm64': 0.19.7 - '@esbuild/linux-ia32': 0.19.7 - '@esbuild/linux-loong64': 0.19.7 - '@esbuild/linux-mips64el': 0.19.7 - '@esbuild/linux-ppc64': 0.19.7 - '@esbuild/linux-riscv64': 0.19.7 - '@esbuild/linux-s390x': 0.19.7 - '@esbuild/linux-x64': 0.19.7 - '@esbuild/netbsd-x64': 0.19.7 - '@esbuild/openbsd-x64': 0.19.7 - '@esbuild/sunos-x64': 0.19.7 - '@esbuild/win32-arm64': 0.19.7 - '@esbuild/win32-ia32': 0.19.7 - '@esbuild/win32-x64': 0.19.7 - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -4781,8 +4959,8 @@ packages: engines: {node: '>=8'} dev: true - /highlight.js@11.8.0: - resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==} + /highlight.js@11.9.0: + resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} engines: {node: '>=12.0.0'} dev: false @@ -5806,30 +5984,30 @@ packages: minimatch: 3.1.2 dev: true - /naive-ui@2.35.0(vue@3.3.11): - resolution: {integrity: sha512-PdnLpOip1LQaKs5+rXLZoPDPQkTq26TnHWeABvUA2eOQjtHxE4+TQvj0Jq/W8clM2On/7jptoGmenLt48G3Bhg==} + /naive-ui@2.36.0(vue@3.4.0): + resolution: {integrity: sha512-r1ydtEm1Ryf/aWpbLCf32mQAGK99jd1eXgpkCtIomcBRZeAtusfy6zCtIpCppoCuIKM3BW5DMafhVxilubk/lQ==} peerDependencies: vue: ^3.0.0 dependencies: '@css-render/plugin-bem': 0.15.12(css-render@0.15.12) - '@css-render/vue3-ssr': 0.15.12(vue@3.3.11) - '@types/katex': 0.16.2 - '@types/lodash': 4.14.199 + '@css-render/vue3-ssr': 0.15.12(vue@3.4.0) + '@types/katex': 0.16.7 + '@types/lodash': 4.14.202 '@types/lodash-es': 4.17.11 async-validator: 4.2.5 css-render: 0.15.12 date-fns: 2.30.0 date-fns-tz: 2.0.0(date-fns@2.30.0) evtd: 0.2.4 - highlight.js: 11.8.0 + highlight.js: 11.9.0 lodash: 4.17.21 lodash-es: 4.17.21 - seemly: 0.3.6 + seemly: 0.3.8 treemate: 0.3.11 - vdirs: 0.1.8(vue@3.3.11) - vooks: 0.2.12(vue@3.3.11) - vue: 3.3.11(typescript@5.2.2) - vueuc: 0.4.51(vue@3.3.11) + vdirs: 0.1.8(vue@3.4.0) + vooks: 0.2.12(vue@3.4.0) + vue: 3.4.0(typescript@5.2.2) + vueuc: 0.4.54(vue@3.4.0) dev: false /nan@2.17.0: @@ -5891,6 +6069,10 @@ packages: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -6212,10 +6394,10 @@ packages: peerDependencies: pinia: ^2.0.0 dependencies: - pinia: 2.1.7(typescript@5.2.2)(vue@3.3.11) + pinia: 2.1.7(typescript@5.2.2)(vue@3.4.0) dev: false - /pinia@2.1.7(typescript@5.2.2)(vue@3.3.11): + /pinia@2.1.7(typescript@5.2.2)(vue@3.4.0): resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} peerDependencies: '@vue/composition-api': ^1.4.0 @@ -6229,8 +6411,8 @@ packages: dependencies: '@vue/devtools-api': 6.5.1 typescript: 5.2.2 - vue: 3.3.11(typescript@5.2.2) - vue-demi: 0.14.6(vue@3.3.11) + vue: 3.4.0(typescript@5.2.2) + vue-demi: 0.14.6(vue@3.4.0) dev: false /pkg-types@1.0.3: @@ -6455,8 +6637,8 @@ packages: strip-indent: 3.0.0 dev: true - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: false /regex-not@1.0.2: @@ -6595,23 +6777,24 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.5.2: - resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==} + /rollup@4.9.1: + resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.5.2 - '@rollup/rollup-android-arm64': 4.5.2 - '@rollup/rollup-darwin-arm64': 4.5.2 - '@rollup/rollup-darwin-x64': 4.5.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 - '@rollup/rollup-linux-arm64-gnu': 4.5.2 - '@rollup/rollup-linux-arm64-musl': 4.5.2 - '@rollup/rollup-linux-x64-gnu': 4.5.2 - '@rollup/rollup-linux-x64-musl': 4.5.2 - '@rollup/rollup-win32-arm64-msvc': 4.5.2 - '@rollup/rollup-win32-ia32-msvc': 4.5.2 - '@rollup/rollup-win32-x64-msvc': 4.5.2 + '@rollup/rollup-android-arm-eabi': 4.9.1 + '@rollup/rollup-android-arm64': 4.9.1 + '@rollup/rollup-darwin-arm64': 4.9.1 + '@rollup/rollup-darwin-x64': 4.9.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 + '@rollup/rollup-linux-arm64-gnu': 4.9.1 + '@rollup/rollup-linux-arm64-musl': 4.9.1 + '@rollup/rollup-linux-riscv64-gnu': 4.9.1 + '@rollup/rollup-linux-x64-gnu': 4.9.1 + '@rollup/rollup-linux-x64-musl': 4.9.1 + '@rollup/rollup-win32-arm64-msvc': 4.9.1 + '@rollup/rollup-win32-ia32-msvc': 4.9.1 + '@rollup/rollup-win32-x64-msvc': 4.9.1 fsevents: 2.3.3 dev: true @@ -6693,8 +6876,8 @@ packages: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} dev: true - /seemly@0.3.6: - resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==} + /seemly@0.3.8: + resolution: {integrity: sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA==} dev: false /select@1.1.2: @@ -7502,7 +7685,7 @@ packages: dependencies: '@antfu/utils': 0.7.6 '@rollup/pluginutils': 5.0.4 - '@vueuse/core': 10.6.1(vue@3.3.11) + '@vueuse/core': 10.6.1(vue@3.4.0) fast-glob: 3.3.1 local-pkg: 0.4.3 magic-string: 0.30.5 @@ -7513,7 +7696,7 @@ packages: - rollup dev: true - /unplugin-vue-components@0.25.2(vue@3.3.11): + /unplugin-vue-components@0.25.2(vue@3.4.0): resolution: {integrity: sha512-OVmLFqILH6w+eM8fyt/d/eoJT9A6WO51NZLf1vC5c1FZ4rmq2bbGxTy8WP2Jm7xwFdukaIdv819+UI7RClPyCA==} engines: {node: '>=14'} peerDependencies: @@ -7536,7 +7719,7 @@ packages: minimatch: 9.0.3 resolve: 1.22.5 unplugin: 1.4.0 - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) transitivePeerDependencies: - rollup - supports-color @@ -7575,6 +7758,17 @@ packages: picocolors: 1.0.0 dev: true + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -7616,13 +7810,13 @@ packages: engines: {node: '>= 0.8'} dev: true - /vdirs@0.1.8(vue@3.3.11): + /vdirs@0.1.8(vue@3.4.0): resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==} peerDependencies: vue: ^3.0.11 dependencies: evtd: 0.2.4 - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) dev: false /vite-plugin-cdn2@0.15.2: @@ -7638,7 +7832,7 @@ packages: - supports-color dev: true - /vite-plugin-compression@0.5.1(vite@5.0.8): + /vite-plugin-compression@0.5.1(vite@5.0.10): resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} peerDependencies: vite: '>=2.0.0' @@ -7646,21 +7840,21 @@ packages: chalk: 4.1.2 debug: 4.3.4 fs-extra: 10.1.0 - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) transitivePeerDependencies: - supports-color dev: true - /vite-plugin-ejs@1.7.0(vite@5.0.8): + /vite-plugin-ejs@1.7.0(vite@5.0.10): resolution: {integrity: sha512-JNP3zQDC4mSbfoJ3G73s5mmZITD8NGjUmLkq4swxyahy/W0xuokK9U9IJGXw7KCggq6UucT6hJ0p+tQrNtqTZw==} peerDependencies: vite: '>=5.0.0' dependencies: ejs: 3.1.9 - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) dev: true - /vite-plugin-eslint@1.8.1(eslint@8.52.0)(vite@5.0.8): + /vite-plugin-eslint@1.8.1(eslint@8.52.0)(vite@5.0.10): resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} peerDependencies: eslint: '>=7' @@ -7670,10 +7864,10 @@ packages: '@types/eslint': 8.44.2 eslint: 8.52.0 rollup: 2.79.1 - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) dev: true - /vite-plugin-imp@2.4.0(vite@5.0.8): + /vite-plugin-imp@2.4.0(vite@5.0.10): resolution: {integrity: sha512-L/6/nvOw+MyNh4UxAlCZHsmKd5MitmHamqqAWB15sbUgVIEz/OQ8jpKr6kkQU0eA/AIe8fkCVbQBlP81ajrqWg==} peerDependencies: vite: '>= 2.0.0-beta.5' @@ -7685,12 +7879,12 @@ packages: chalk: 4.1.2 param-case: 3.0.4 pascal-case: 3.1.2 - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) transitivePeerDependencies: - supports-color dev: true - /vite-plugin-inspect@0.7.38(vite@5.0.8): + /vite-plugin-inspect@0.7.38(vite@5.0.10): resolution: {integrity: sha512-+p6pJVtBOLGv+RBrcKAFUdx+euizg0bjL35HhPyM0MjtKlqoC5V9xkCmO9Ctc8JrTyXqODbHqiLWJKumu5zJ7g==} engines: {node: '>=14'} peerDependencies: @@ -7708,13 +7902,13 @@ packages: open: 9.1.0 picocolors: 1.0.0 sirv: 2.0.3 - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) transitivePeerDependencies: - rollup - supports-color dev: true - /vite-plugin-mock-dev-server@1.3.4(vite@5.0.8): + /vite-plugin-mock-dev-server@1.3.4(vite@5.0.10): resolution: {integrity: sha512-50biXarRPdKYxR/q9an4vHMh2cbwFlEWHfLJdXg6gpS63CMMrCo9XQWYIkdytZNSEs/5AwykGB5Xo0ORMMttgQ==} engines: {node: ^14.18.0 || >=16} peerDependencies: @@ -7735,7 +7929,7 @@ packages: mime-types: 2.1.35 path-to-regexp: 6.2.1 picocolors: 1.0.0 - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) ws: 8.13.0 transitivePeerDependencies: - bufferutil @@ -7743,7 +7937,7 @@ packages: - utf-8-validate dev: true - /vite-plugin-svg-icons@2.0.1(vite@5.0.8): + /vite-plugin-svg-icons@2.0.1(vite@5.0.10): resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} peerDependencies: vite: '>=2.0.0' @@ -7756,7 +7950,7 @@ packages: pathe: 0.2.0 svg-baker: 1.7.0 svgo: 2.8.0 - vite: 5.0.8(@types/node@20.4.7)(sass@1.69.5) + vite: 5.0.10(@types/node@20.4.7)(sass@1.69.5) transitivePeerDependencies: - supports-color dev: true @@ -7768,8 +7962,8 @@ packages: svgo: 3.0.2 dev: true - /vite@5.0.8(@types/node@20.4.7)(sass@1.69.5): - resolution: {integrity: sha512-jYMALd8aeqR3yS9xlHd0OzQJndS9fH5ylVgWdB+pxTwxLKdO1pgC5Dlb398BUxpfaBxa4M9oT7j1g503Gaj5IQ==} + /vite@5.0.10(@types/node@20.4.7)(sass@1.69.5): + resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -7797,24 +7991,24 @@ packages: optional: true dependencies: '@types/node': 20.4.7 - esbuild: 0.19.7 + esbuild: 0.19.10 postcss: 8.4.32 - rollup: 4.5.2 + rollup: 4.9.1 sass: 1.69.5 optionalDependencies: fsevents: 2.3.3 dev: true - /vooks@0.2.12(vue@3.3.11): + /vooks@0.2.12(vue@3.4.0): resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==} peerDependencies: vue: ^3.0.0 dependencies: evtd: 0.2.4 - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) dev: false - /vue-demi@0.14.6(vue@3.3.11): + /vue-demi@0.14.6(vue@3.4.0): resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} engines: {node: '>=12'} hasBin: true @@ -7826,7 +8020,7 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) /vue-eslint-parser@9.3.1(eslint@8.52.0): resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} @@ -7846,7 +8040,7 @@ packages: - supports-color dev: true - /vue-hooks-plus@1.8.5(vue@3.3.11): + /vue-hooks-plus@1.8.5(vue@3.4.0): resolution: {integrity: sha512-cIatTWz6QQcoSCDn7jadQ3zMr799FmNiHyb59yUvR7Ws5KDJ/KdIMHHx/b0XDKzbGhQ61kcJ78zJKAKhOV0pWw==} peerDependencies: vue: ^3.2.25 @@ -7858,9 +8052,9 @@ packages: qs: 6.11.2 query-string: 7.1.3 screenfull: 5.2.0 - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) - /vue-i18n@9.8.0(vue@3.3.11): + /vue-i18n@9.8.0(vue@3.4.0): resolution: {integrity: sha512-Izho+6PYjejsTq2mzjcRdBZ5VLRQoSuuexvR8029h5CpN03FYqiqBrShMyf2I1DKkN6kw/xmujcbvC+4QybpsQ==} engines: {node: '>= 16'} peerDependencies: @@ -7869,15 +8063,15 @@ packages: '@intlify/core-base': 9.8.0 '@intlify/shared': 9.8.0 '@vue/devtools-api': 6.5.1 - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) - /vue-router@4.2.5(vue@3.3.11): + /vue-router@4.2.5(vue@3.4.0): resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} peerDependencies: vue: ^3.2.0 dependencies: '@vue/devtools-api': 6.5.1 - vue: 3.3.11(typescript@5.2.2) + vue: 3.4.0(typescript@5.2.2) dev: false /vue-template-compiler@2.7.14: @@ -7899,34 +8093,34 @@ packages: typescript: 5.2.2 dev: true - /vue@3.3.11(typescript@5.2.2): - resolution: {integrity: sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==} + /vue@3.4.0(typescript@5.2.2): + resolution: {integrity: sha512-iTE9Ve/7DO/H39+gXHrNkRdnh1jDwPe/fap4brbPKkp1APMkS03OiZ+UY0dwpqtRX0iPWQTkh8Fu3hKgLtaxfA==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.3.11 - '@vue/compiler-sfc': 3.3.11 - '@vue/runtime-dom': 3.3.11 - '@vue/server-renderer': 3.3.11(vue@3.3.11) - '@vue/shared': 3.3.11 + '@vue/compiler-dom': 3.4.0 + '@vue/compiler-sfc': 3.4.0 + '@vue/runtime-dom': 3.4.0 + '@vue/server-renderer': 3.4.0(vue@3.4.0) + '@vue/shared': 3.4.0 typescript: 5.2.2 - /vueuc@0.4.51(vue@3.3.11): - resolution: {integrity: sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==} + /vueuc@0.4.54(vue@3.4.0): + resolution: {integrity: sha512-2LED7h1BSnCRPBI6AlSIf+1Yte1shN+Vb2gpspO5wHI7zWzbcq4bAu2f9nFh5yXIUKdzqmLvzRsOXDl4TrDyCw==} peerDependencies: vue: ^3.0.11 dependencies: - '@css-render/vue3-ssr': 0.15.12(vue@3.3.11) + '@css-render/vue3-ssr': 0.15.12(vue@3.4.0) '@juggle/resize-observer': 3.4.0 css-render: 0.15.12 evtd: 0.2.4 - seemly: 0.3.6 - vdirs: 0.1.8(vue@3.3.11) - vooks: 0.2.12(vue@3.3.11) - vue: 3.3.11(typescript@5.2.2) + seemly: 0.3.8 + vdirs: 0.1.8(vue@3.4.0) + vooks: 0.2.12(vue@3.4.0) + vue: 3.4.0(typescript@5.2.2) dev: false /webidl-conversions@3.0.1: diff --git a/src/App.tsx b/src/App.tsx index b568cc66..e9271308 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,12 +4,14 @@ import AppStyleProvider from '@/app-components/provider/AppStyleProvider' import AppLockScreen from '@/app-components/app/AppLockScreen' import AppWatermarkProvider from '@/app-components/provider/AppWatermarkProvider' import AppGlobalSpin from '@/spin' +import AppVersionProvider from '@/app-components/provider/AppVersionProvider' export default defineComponent({ name: 'App', render() { return ( + diff --git a/src/api/demo/mock/person.ts b/src/api/demo/mock/person.ts index d8767b63..2ac2a6cc 100644 --- a/src/api/demo/mock/person.ts +++ b/src/api/demo/mock/person.ts @@ -1,6 +1,6 @@ import { request } from '@/axios' -import type { BasicResponse, PaginationResponse } from '@/types/modules/axios' +import type { PaginationResponse } from '@/types' export interface MockListParams { page: number diff --git a/src/api/demo/test.ts b/src/api/demo/test.ts index 0124197a..1b611ad0 100644 --- a/src/api/demo/test.ts +++ b/src/api/demo/test.ts @@ -21,7 +21,7 @@ import { request } from '@/axios' -import type { BasicResponse } from '@/types/modules/axios' +import type { BasicResponse } from '@/types' interface AxiosTestResponse extends UnknownObjectKey { data: UnknownObjectKey[] diff --git a/src/app-components/provider/AppRequestCancelerProvider/index.tsx b/src/app-components/provider/AppRequestCancelerProvider/index.tsx index 6aa15f36..7117e50f 100644 --- a/src/app-components/provider/AppRequestCancelerProvider/index.tsx +++ b/src/app-components/provider/AppRequestCancelerProvider/index.tsx @@ -29,13 +29,7 @@ const AppRequestCancelerProvider = defineComponent({ expose() }, render() { - return ( -
- ) + return
}, }) diff --git a/src/app-components/provider/AppStyleProvider/index.tsx b/src/app-components/provider/AppStyleProvider/index.tsx index 5379d392..dc391d8a 100644 --- a/src/app-components/provider/AppStyleProvider/index.tsx +++ b/src/app-components/provider/AppStyleProvider/index.tsx @@ -9,8 +9,6 @@ * @remark 今天也是元气满满撸代码的一天 */ -import './index.scss' - import { get } from 'lodash-es' import { addClass, diff --git a/src/app-components/provider/AppVersionProvider/index.tsx b/src/app-components/provider/AppVersionProvider/index.tsx new file mode 100644 index 00000000..eb640fd7 --- /dev/null +++ b/src/app-components/provider/AppVersionProvider/index.tsx @@ -0,0 +1,70 @@ +/** + * + * @author Ray + * + * @date 2024-01-01 + * + * @workspace ray-template + * + * @remark 今天也是元气满满撸代码的一天 + */ + +/** + * + * 检测当前版本是否为最新版本 + * 如果不是最新版本则弹出提示框,提示用户更新,点击确认后退出登录并且刷新资源 + */ + +import { RModal } from '@/components' + +import { getStorage, setStorage } from '@/utils' +import { useSigningActions } from '@/store' + +export default defineComponent({ + name: 'AppVersionProvider', + setup() { + const storageKey = 'appVersionProvider' + const { + pkg: { version }, + } = __APP_CFG__ + const cacheVersion = getStorage(storageKey, 'localStorage') + const modalShow = ref(false) + const { logout } = useSigningActions() + + if (version !== cacheVersion || !cacheVersion) { + modalShow.value = true + + setStorage(storageKey, version, 'localStorage') + } + + return { + modalShow, + logout, + } + }, + render() { + const { logout } = this + + return ( +
+ { + this.modalShow = false + }} + /> +
+ ) + }, +}) diff --git a/src/app-components/provider/AppStyleProvider/index.scss b/src/app-components/provider/provider.scss similarity index 100% rename from src/app-components/provider/AppStyleProvider/index.scss rename to src/app-components/provider/provider.scss diff --git a/src/app-config/appConfig.ts b/src/app-config/appConfig.ts index aec231b0..8411abaa 100644 --- a/src/app-config/appConfig.ts +++ b/src/app-config/appConfig.ts @@ -11,12 +11,8 @@ /** 系统配置 */ -import type { - LayoutSideBarLogo, - PreloadingConfig, - RootRoute, -} from '@/types/modules/cfg' -import type { AppMenuConfig, AppKeepAlive } from '@/types/modules/appConfig' +import type { LayoutSideBarLogo, PreloadingConfig } from '@/types' +import type { AppMenuConfig, AppKeepAlive } from '@/types' /** * @@ -44,21 +40,6 @@ export const PRE_LOADING_CONFIG: PreloadingConfig = { titleColor: '#2d8cf0', } -/** - * - * 配置根路由信息 - * 模板维护一个根路由 ROOT_ROUTE,所有的重定向操作、回到 Layout Root Path 操作都依赖该 path - * - * 该变量的值,会传递给 globalRootRoute - * 这么做也是为了能够在兼容老版本的模板,并且也是为了能够动态的维护根路由信息 - * - * 有些时候,如果你希望动态的维护 Root Route 信息,可以使用 useAppRoot 方法 - */ -export const ROOT_ROUTE: RootRoute = { - name: 'Dashboard', - path: '/dashboard', -} - /** * * icon: LOGO 图标, 依赖 `RIcon` 实现(如果为空则不会渲染图标) @@ -111,19 +92,3 @@ export const APP_CATCH_KEY = { localeLanguage: 'localeLanguage', token: 'token', } as const - -/** - * - * 系统水印配置 - * 具体配置信息查看官网: https://www.naiveui.com/zh-CN/dark/components/watermark#API - */ -export const APP_WATERMARK_CONFIG = { - content: 'Trying be better~', - fontSize: 16, - lineHeight: 16, - width: 384, - height: 384, - xOffset: 12, - yOffset: 60, - rotate: -15, -} as const diff --git a/src/app-config/designConfig.ts b/src/app-config/designConfig.ts index 845ed7b2..6708bab3 100644 --- a/src/app-config/designConfig.ts +++ b/src/app-config/designConfig.ts @@ -11,7 +11,7 @@ /** 系统颜色风格配置入口 */ -import type { AppTheme } from '@/types/modules/cfg' +import type { AppTheme } from '@/types' export const APP_THEME: AppTheme = { /** @@ -65,6 +65,8 @@ export const APP_THEME: AppTheme = { * * 配置 echart 主题颜色 * 约定配置时以:主题名称为文件名,其文件夹下两个主题风格的 json 文件。并且暗色主题必须为 xxx-dark.json + * + * [文档地址](https://xiaodaigua-ray.github.io/ray-template-doc/ray-template-docs/advanced/echart-themes.html) */ echartTheme: 'macarons', } diff --git a/src/app-config/localConfig.ts b/src/app-config/localConfig.ts index 79fa9415..9834f3ef 100644 --- a/src/app-config/localConfig.ts +++ b/src/app-config/localConfig.ts @@ -11,12 +11,8 @@ /** 国际化相关配置 */ -import type { - TemplateLocale, - LocalOptions, - DayjsLocalMap, -} from '@/types/modules/appConfig' -import type { ValueOf } from '@/types/modules/helper' +import type { TemplateLocale, LocalOptions, DayjsLocalMap } from '@/types' +import type { ValueOf } from '@/types' /** * diff --git a/src/app-config/requestConfig.ts b/src/app-config/requestConfig.ts index 7e9e1fb5..c8bc8e31 100644 --- a/src/app-config/requestConfig.ts +++ b/src/app-config/requestConfig.ts @@ -9,7 +9,7 @@ * @remark 今天也是元气满满撸代码的一天 */ -import type { AxiosConfig } from '@/types/modules/appConfig' +import type { AxiosConfig } from '@/types' /** axios 相关配置 */ export const AXIOS_CONFIG: AxiosConfig = { diff --git a/src/axios/helper/interceptor.ts b/src/axios/helper/interceptor.ts index 2b9e0f17..9f0588b2 100644 --- a/src/axios/helper/interceptor.ts +++ b/src/axios/helper/interceptor.ts @@ -32,7 +32,7 @@ import type { AxiosFetchInstance, AxiosFetchError, } from '@/axios/type' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' /** 当前请求的实例 */ const axiosFetchInstance: AxiosFetchInstance = { diff --git a/src/axios/inject/request/provider.ts b/src/axios/inject/request/provider.ts index 9decae3a..11f37547 100644 --- a/src/axios/inject/request/provider.ts +++ b/src/axios/inject/request/provider.ts @@ -30,7 +30,7 @@ import type { BeforeFetchFunction, FetchErrorFunction, } from '@/axios/type' -import type { Recordable } from '@/types/modules/helper' +import type { Recordable } from '@/types' /** * diff --git a/src/axios/inject/response/provider.ts b/src/axios/inject/response/provider.ts index 3fbcb5e1..137fb587 100644 --- a/src/axios/inject/response/provider.ts +++ b/src/axios/inject/response/provider.ts @@ -27,7 +27,7 @@ import type { BeforeFetchFunction, FetchErrorFunction, } from '@/axios/type' -import type { Recordable } from '@/types/modules/helper' +import type { Recordable } from '@/types' /** * diff --git a/src/axios/type.ts b/src/axios/type.ts index 191c486a..4dcdb019 100644 --- a/src/axios/type.ts +++ b/src/axios/type.ts @@ -7,7 +7,7 @@ import type { Axios, AxiosResponse, } from 'axios' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' export type AxiosHeaderValue = | AxiosHeaders diff --git a/src/components/RChart/src/index.tsx b/src/components/RChart/src/index.tsx index 30b06bf4..99ee4044 100644 --- a/src/components/RChart/src/index.tsx +++ b/src/components/RChart/src/index.tsx @@ -49,7 +49,7 @@ import { RMoreDropdown } from '@/components' import { useSettingGetters } from '@/store' import type { WatchStopHandle } from 'vue' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' import type { DebouncedFunc } from 'lodash-es' import type { UseResizeObserverReturn } from '@vueuse/core' import type { ECharts, EChartsCoreOption } from 'echarts/core' @@ -124,9 +124,7 @@ export default defineComponent({ try { echarts.use(props.use?.filter(Boolean)) } catch (e) { - console.error( - 'register chart Core error: wrong property and method passed in extend attribute', - ) + console.error('RChart register error: ', e) } } @@ -249,6 +247,7 @@ export default defineComponent({ } } + // chart 是否已经销毁 const isDispose = () => !!(echartInst && echartInst.getDom()) /** @@ -270,6 +269,14 @@ export default defineComponent({ } } + /** + * + * @param key moreDropDownOptions key + * @param option moreDropDownOptions current click option + * + * 预设 card 风格下拉框点击 + * 当前仅实现下载图片功能 + */ const dropdownSelect = (key: string | number, option: DropdownOption) => { if (key === 'downloadChart' && isDispose()) { const { filename, ...args } = props.downloadOptions @@ -303,7 +310,6 @@ export default defineComponent({ if (props.autoResize) { resizeThrottleReturn = throttle(resizeChart, props.throttleWait) /** 监听内容区域尺寸变化更新 chart */ - resizeObserverReturn = useResizeObserver( props.observer || rayChartWrapperRef, resizeThrottleReturn, @@ -336,7 +342,6 @@ export default defineComponent({ } }, ) - /** * * 贴花跟随主题渲染 @@ -350,7 +355,6 @@ export default defineComponent({ updateChartTheme() }, ) - watchEffect(() => { /** 监听 options 变化 */ if (props.watchOptions) { @@ -367,6 +371,7 @@ export default defineComponent({ echartInst?.setOption(options, setOpt) }, { + // 深度监听 options deep: true, }, ) @@ -383,6 +388,7 @@ export default defineComponent({ echart: echartInstanceRef, dispose: unmount, render: mount, + isDispose, }) onBeforeMount(async () => { diff --git a/src/components/RChart/src/props.ts b/src/components/RChart/src/props.ts index a7535180..287d588c 100644 --- a/src/components/RChart/src/props.ts +++ b/src/components/RChart/src/props.ts @@ -1,6 +1,6 @@ import type * as echarts from 'echarts/core' // `echarts` 核心模块 import type { PropType, VNode } from 'vue' -import type { MaybeArray } from '@/types/modules/utils' +import type { MaybeArray } from '@/types' import type { LoadingOptions, AutoResize, @@ -52,6 +52,7 @@ const props = { type: Array as PropType, }, preset: { + // 是否启用预设样式 type: String as PropType, }, contentStyle: { @@ -153,6 +154,8 @@ const props = { * * 拓展 `echarts` 图表 * 用于自己手动拓展相关的包 + * + * 注意,该方法不支持动态调用,及时动态更新了该属性,也不会生效 */ type: Array as PropType, default: () => [], diff --git a/src/components/RCollapseGrid/src/props.ts b/src/components/RCollapseGrid/src/props.ts index c9e97dda..aa3202ef 100644 --- a/src/components/RCollapseGrid/src/props.ts +++ b/src/components/RCollapseGrid/src/props.ts @@ -2,7 +2,7 @@ import { gridProps } from 'naive-ui' import type { PropType } from 'vue' import type { CollapseToggleText } from './type' -import type { AnyFC, MaybeArray } from '@/types/modules/utils' +import type { AnyFC, MaybeArray } from '@/types' const props = { open: { diff --git a/src/components/RIcon/src/props.ts b/src/components/RIcon/src/props.ts index bce58a2e..f071751c 100644 --- a/src/components/RIcon/src/props.ts +++ b/src/components/RIcon/src/props.ts @@ -10,7 +10,7 @@ */ import type { PropType } from 'vue' -import type { MaybeArray } from '@/types/modules/utils' +import type { MaybeArray } from '@/types' const props = { color: { diff --git a/src/components/RIframe/src/props.ts b/src/components/RIframe/src/props.ts index d5b0d5d9..9f37c49c 100644 --- a/src/components/RIframe/src/props.ts +++ b/src/components/RIframe/src/props.ts @@ -10,7 +10,7 @@ */ import type { PropType } from 'vue' -import type { MaybeArray } from '@/types/modules/utils' +import type { MaybeArray } from '@/types' import type { SpinProps } from 'naive-ui' const props = { diff --git a/src/components/RModal/src/Modal.tsx b/src/components/RModal/src/Modal.tsx index ccec2433..2cc8aaf1 100644 --- a/src/components/RModal/src/Modal.tsx +++ b/src/components/RModal/src/Modal.tsx @@ -32,6 +32,11 @@ export default defineComponent({ })) const uuidEl = uuid() let intractable: null | ReturnType + // 记录拖拽的位置 + const position = { + x: 0, + y: 0, + } /** * @@ -44,7 +49,16 @@ export default defineComponent({ const target = document.getElementById(uuidEl) if (target) { - setupDraggable(target, props.preset).then((res) => { + setupDraggable(target, props.preset, { + scheduler: (event) => { + const target = event.target + + position.x += event.dx + position.y += event.dy + + target.style.transform = `translate(${position.x}px, ${position.y}px)` + }, + }).then((res) => { intractable = res }) } @@ -60,6 +74,12 @@ export default defineComponent({ ) { nextTick(() => { setupInteract() + + const target = document.getElementById(uuidEl) + + if (props.memo && target) { + target.style.transform = `translate(${position.x}px, ${position.y}px)` + } }) } else { intractable?.unset() @@ -67,6 +87,9 @@ export default defineComponent({ intractable = null } }, + { + immediate: true, + }, ) return { diff --git a/src/components/RModal/src/props.ts b/src/components/RModal/src/props.ts index 0e922828..338e2c3f 100644 --- a/src/components/RModal/src/props.ts +++ b/src/components/RModal/src/props.ts @@ -13,6 +13,16 @@ import { modalProps } from 'naive-ui' const props = { ...modalProps, + memo: { + /** + * + * 是否记住上一次的位置 + * + * @default true + */ + type: Boolean, + default: true, + }, /** * * 是否全屏 diff --git a/src/components/RModal/src/utils.ts b/src/components/RModal/src/utils.ts index 9fc51871..af85d9ee 100644 --- a/src/components/RModal/src/utils.ts +++ b/src/components/RModal/src/utils.ts @@ -1,6 +1,11 @@ import interact from 'interactjs' import type { ModalProps } from 'naive-ui' +import type { AnyFC } from '@/types' + +interface SetupDraggableOptions { + scheduler?: AnyFC +} /** * @@ -15,7 +20,10 @@ import type { ModalProps } from 'naive-ui' export const setupDraggable = ( bindModal: HTMLElement, preset: ModalProps['preset'], + options?: SetupDraggableOptions, ): Promise> => { + const { scheduler } = options ?? {} + return new Promise((resolve) => { setTimeout(() => { const allowFromStr = @@ -35,16 +43,7 @@ export const setupDraggable = ( ], listeners: { move: (event) => { - const target = event.target - const x = - (parseFloat(target.getAttribute('data-x')) || 0) + event.dx - const y = - (parseFloat(target.getAttribute('data-y')) || 0) + event.dy - - target.style.transform = 'translate(' + x + 'px, ' + y + 'px)' - - target.setAttribute('data-x', x) - target.setAttribute('data-y', y) + scheduler?.(event) }, }, }) diff --git a/src/components/RQRCode/src/index.scss b/src/components/RQRCode/src/index.scss index e447cce8..4c97667a 100644 --- a/src/components/RQRCode/src/index.scss +++ b/src/components/RQRCode/src/index.scss @@ -23,4 +23,8 @@ color: #ffffff; } } + + & .n-spin-content--spinning img { + filter: blur(6px); + } } diff --git a/src/components/RQRCode/src/index.tsx b/src/components/RQRCode/src/index.tsx index fcc7fcd8..fce8c31e 100644 --- a/src/components/RQRCode/src/index.tsx +++ b/src/components/RQRCode/src/index.tsx @@ -59,9 +59,6 @@ export default defineComponent({ const { expose } = ctx const qrcodeURL = ref() - const spinOverrides = { - opacitySpinning: '0.1', - } let gifBuffer: GIFBuffer let watchCallback!: WatchStopHandle @@ -119,10 +116,12 @@ export default defineComponent({ const downloadQRCode = (fileName?: DownloadFilenameType) => { if (qrcodeURL.value && isValueType(qrcodeURL.value, 'String')) { - downloadAnyFile( + return downloadAnyFile( qrcodeURL.value, fileName || new Date().getTime() + '.png', ) + } else { + return Promise.reject() } } @@ -151,7 +150,6 @@ export default defineComponent({ return { qrcodeURL, - spinOverrides, errorActionClick, } }, @@ -160,7 +158,6 @@ export default defineComponent({
@@ -180,7 +177,7 @@ export default defineComponent({ this.$slots.errorAction() ) : ( <> - + {{ default: () => this.errorActionDescription, icon: () => ( diff --git a/src/components/RQRCode/src/props.ts b/src/components/RQRCode/src/props.ts index 2bf05073..b07e3a21 100644 --- a/src/components/RQRCode/src/props.ts +++ b/src/components/RQRCode/src/props.ts @@ -11,7 +11,7 @@ import type { QRCodeStatus, QRCodeLevel } from './type' import type { PropType, VNode } from 'vue' -import type { MaybeArray } from '@/types/modules/utils' +import type { MaybeArray } from '@/types' import type { Options } from 'awesome-qr' const props = { diff --git a/src/components/RTable/src/Table.tsx b/src/components/RTable/src/Table.tsx index 7b241be9..9ab3366a 100644 --- a/src/components/RTable/src/Table.tsx +++ b/src/components/RTable/src/Table.tsx @@ -22,7 +22,7 @@ import { call, renderNode, uuid } from '@/utils' import config from './config' import type { DropdownOption, DataTableInst } from 'naive-ui' -import type { ComponentSize } from '@/types/modules/component' +import type { ComponentSize } from '@/types' import type { C as CType } from './type' export default defineComponent({ diff --git a/src/components/RTable/src/components/C.tsx b/src/components/RTable/src/components/C.tsx index 411f56e4..c5be73f2 100644 --- a/src/components/RTable/src/components/C.tsx +++ b/src/components/RTable/src/components/C.tsx @@ -27,8 +27,8 @@ import { call } from '@/utils' import type { TreeOption, TreeDropInfo } from 'naive-ui' import type { C } from '../type' -import type { AnyFC } from '@/types/modules/utils' -import type { MaybeArray } from '@/types/modules/utils' +import type { AnyFC } from '@/types' +import type { MaybeArray } from '@/types' type FixedClick = (type: 'left' | 'right', option: C, index: number) => void diff --git a/src/components/RTable/src/components/Size.tsx b/src/components/RTable/src/components/Size.tsx index e5eb820f..96e929ca 100644 --- a/src/components/RTable/src/components/Size.tsx +++ b/src/components/RTable/src/components/Size.tsx @@ -16,8 +16,8 @@ import { call } from '@/utils' import props from '../props' import config from '../config' -import type { ComponentSize } from '@/types/modules/component' -import type { MaybeArray } from '@/types/modules/utils' +import type { ComponentSize } from '@/types' +import type { MaybeArray } from '@/types' export default defineComponent({ name: 'TableSizeSelect', diff --git a/src/components/RTable/src/props.ts b/src/components/RTable/src/props.ts index 246efbcb..01c670f7 100644 --- a/src/components/RTable/src/props.ts +++ b/src/components/RTable/src/props.ts @@ -12,10 +12,10 @@ import { dataTableProps } from 'naive-ui' import type { PropType, VNode, VNodeChild } from 'vue' -import type { MaybeArray } from '@/types/modules/utils' +import type { MaybeArray } from '@/types' import type { DropdownOption, DataTableColumn } from 'naive-ui' import type { DownloadTableOptions, PrintTableOptions } from './type' -import type { Recordable } from '@/types/modules/helper' +import type { Recordable } from '@/types' const props = { ...dataTableProps, diff --git a/src/components/RTable/src/type.ts b/src/components/RTable/src/type.ts index 6c290f93..aad5a7de 100644 --- a/src/components/RTable/src/type.ts +++ b/src/components/RTable/src/type.ts @@ -8,7 +8,7 @@ import type { DataTableBaseColumn, } from 'naive-ui' import type { VNode } from 'vue' -import type { Recordable } from '@/types/modules/helper' +import type { Recordable } from '@/types' import type { PrintDomOptions } from '@/utils' export type TableActionIcon = string | (() => VNode) diff --git a/src/directives/modules/debounce/index.ts b/src/directives/modules/debounce/index.ts index 0ed01513..537dbf10 100644 --- a/src/directives/modules/debounce/index.ts +++ b/src/directives/modules/debounce/index.ts @@ -18,7 +18,7 @@ import { debounce } from 'lodash-es' import { useEventListener } from '@vueuse/core' import type { DebounceBindingOptions } from './type' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' import type { DebouncedFunc } from 'lodash-es' import type { CustomDirectiveFC } from '@/directives/type' diff --git a/src/directives/modules/debounce/type.ts b/src/directives/modules/debounce/type.ts index 40a214c6..204b8234 100644 --- a/src/directives/modules/debounce/type.ts +++ b/src/directives/modules/debounce/type.ts @@ -1,5 +1,5 @@ import type { DebounceSettings } from 'lodash-es' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' export interface DebounceBindingOptions { func: AnyFC diff --git a/src/directives/modules/throttle/index.ts b/src/directives/modules/throttle/index.ts index 86479a36..d10599ca 100644 --- a/src/directives/modules/throttle/index.ts +++ b/src/directives/modules/throttle/index.ts @@ -18,7 +18,7 @@ import { throttle } from 'lodash-es' import { useEventListener } from '@vueuse/core' import type { ThrottleBindingOptions } from './type' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' import type { DebouncedFunc } from 'lodash-es' import type { CustomDirectiveFC } from '@/directives/type' diff --git a/src/directives/modules/throttle/type.ts b/src/directives/modules/throttle/type.ts index 77487d0d..134595b9 100644 --- a/src/directives/modules/throttle/type.ts +++ b/src/directives/modules/throttle/type.ts @@ -1,5 +1,5 @@ import type { ThrottleSettings } from 'lodash-es' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' export interface ThrottleBindingOptions { func: AnyFC diff --git a/src/global-variable/variable.ts b/src/global-variable/variable.ts index a29d5908..d3d1b756 100644 --- a/src/global-variable/variable.ts +++ b/src/global-variable/variable.ts @@ -27,11 +27,7 @@ * createVariableState({ your state }) */ -import { ROOT_ROUTE, APP_WATERMARK_CONFIG } from '@/app-config/appConfig' -import { cloneDeep } from 'lodash-es' - -import type { AnyFC } from '@/types/modules/utils' -import type { Mutable } from '@/types/modules/helper' +import type { AnyFC } from '@/types' /** * @@ -47,7 +43,6 @@ const variableState = reactive({ globalDrawerValue: false, // 全局抽屉控制器(小尺寸设备可用) globalMainLayoutLoad: true, // LayoutContent 区域加载控制器,会触发强制刷新 layoutContentMaximize: false, // LayoutContent 区域全屏控制器 - globalRootRoute: cloneDeep(ROOT_ROUTE), // 全局根路由配置,同步至 ROOT_ROUTE layoutContentSpinning: false, // LayoutContent 区域加载控制器,不会触发强制刷新 }) diff --git a/src/hooks/components/useContextmenuCoordinate.ts b/src/hooks/components/useContextmenuCoordinate.ts index d9ceba21..2713dfcc 100644 --- a/src/hooks/components/useContextmenuCoordinate.ts +++ b/src/hooks/components/useContextmenuCoordinate.ts @@ -11,11 +11,10 @@ import { useEventListener, onClickOutside } from '@vueuse/core' -import type { BasicTarget } from '@/types/modules/vue' +import type { BasicTarget } from '@/types' import type { MaybeElementRef, MaybeElement, - UseEventSourceOptions, MaybeRefOrGetter, } from '@vueuse/core' diff --git a/src/hooks/template/useAppNavigation.ts b/src/hooks/template/useAppNavigation.ts index 413762cc..afbc318f 100644 --- a/src/hooks/template/useAppNavigation.ts +++ b/src/hooks/template/useAppNavigation.ts @@ -11,7 +11,7 @@ import { useMenuGetters, useMenuActions } from '@/store' -import type { AppMenuOption } from '@/types/modules/app' +import type { AppMenuOption } from '@/types' export type Target = number | AppMenuOption diff --git a/src/hooks/template/useAppRoot.ts b/src/hooks/template/useAppRoot.ts index 538e87e3..cdccca40 100644 --- a/src/hooks/template/useAppRoot.ts +++ b/src/hooks/template/useAppRoot.ts @@ -9,29 +9,29 @@ * @remark 今天也是元气满满撸代码的一天 */ -import { setVariable, getVariableToRefs } from '@/global-variable' -import { cloneDeep } from 'lodash-es' +import { useSettingGetters, useSettingActions } from '@/store' -import type { DeepMutable } from '@/types/modules/helper' +import type { AppRootRoute } from '@/store/modules/setting/type' export function useAppRoot() { - const globalRootRoute = getVariableToRefs('globalRootRoute') + const { getAppRootRoute } = useSettingGetters() + const { updateSettingState } = useSettingActions() /** * * @remark 获取根路由 */ - const getRootRoute = computed(() => globalRootRoute.value) + const getRootRoute = getAppRootRoute /** * * @remark 获取根路由 path */ - const getRootPath = computed(() => globalRootRoute.value.path) + const getRootPath = computed(() => getAppRootRoute.value.path) /** * * @remark 获取根路由 name */ - const getRootName = computed(() => globalRootRoute.value.name) + const getRootName = computed(() => getAppRootRoute.value.name) /** * @@ -42,11 +42,11 @@ export function useAppRoot() { * @example * setRootRoute({ path: '/your root path', name: 'your root name' }) */ - const setRootRoute = (route: DeepMutable) => { - const routeRef = getVariableToRefs('globalRootRoute') - const assignRoute = Object.assign(cloneDeep(routeRef.value), route) - - setVariable('globalRootRoute', assignRoute) + const setRootRoute = (route: AppRootRoute) => { + updateSettingState( + 'appRootRoute', + Object.assign({}, getAppRootRoute.value, route), + ) } return { diff --git a/src/hooks/template/useSiderBar.ts b/src/hooks/template/useSiderBar.ts index 37e2e3b1..111916da 100644 --- a/src/hooks/template/useSiderBar.ts +++ b/src/hooks/template/useSiderBar.ts @@ -12,7 +12,7 @@ import { useMenuGetters, useMenuActions } from '@/store' import { redirectRouterToDashboard } from '@/router/helper/routerCopilot' -import type { MenuTagOptions, Key } from '@/types/modules/app' +import type { MenuTagOptions, Key } from '@/types' export type CloseMenuTag = Key | MenuTagOptions diff --git a/src/hooks/web/useDevice.ts b/src/hooks/web/useDevice.ts index 905c8bbd..965c1c2f 100644 --- a/src/hooks/web/useDevice.ts +++ b/src/hooks/web/useDevice.ts @@ -17,6 +17,10 @@ import { useWindowSize } from '@vueuse/core' import { watchEffectWithTarget } from '@/utils' +import type { UseWindowSizeOptions } from '@vueuse/core' + +export interface UseDeviceOptions extends UseWindowSizeOptions {} + /** * * 检测当前尺寸是否为平板或者更小 @@ -28,8 +32,8 @@ import { watchEffectWithTarget } from '@/utils' * isTabletOrSmaller.value => true // 当前尺寸为平板或者更小 * isTabletOrSmaller.value => false // 当前尺寸为桌面或者更大 */ -export function useDevice() { - const { width, height } = useWindowSize() +export function useDevice(options?: UseDeviceOptions) { + const { width, height } = useWindowSize(options) const isTabletOrSmaller = ref(false) const update = () => { diff --git a/src/hooks/web/useDomToImage.ts b/src/hooks/web/useDomToImage.ts index f7dc076c..dcfa7d6e 100644 --- a/src/hooks/web/useDomToImage.ts +++ b/src/hooks/web/useDomToImage.ts @@ -13,7 +13,7 @@ import domToImage from 'dom-to-image' import { unrefElement } from '@/utils' import type { Options as ReDomToImageOptions } from 'dom-to-image' -import type { BasicTarget, TargetType } from '@/types/modules/vue' +import type { BasicTarget, TargetType } from '@/types' export type ImageType = keyof typeof domToImageMethods @@ -90,7 +90,8 @@ const domToImageMethods = { * const { create, stop } = useDomToImage(refDom, { * beforeCreate: (element) => { ... }, * created: (element, result) => { ... }, - * createdError: (element, error) => { ... }, + * createdError: (error) => { ... }, + * finally: () => { ... }, * }) */ export const useDomToImage = ( @@ -102,10 +103,11 @@ export const useDomToImage = ( created, createdError, finally: _finally, + imageType: _imageType, } = options ?? {} const run = ( - imageType: UseDomToImageOptions['imageType'] = 'jpeg', + imageType?: UseDomToImageOptions['imageType'], ): Promise => { return new Promise((resolve, reject) => { const element = unrefElement(target) @@ -118,10 +120,7 @@ export const useDomToImage = ( return reject('useDomToImage: element is undefined.') } - const type = imageType ?? options?.imageType - const matchFc = domToImageMethods[type] || domToImageMethods['jpeg'] - - matchFc(element, options) + domToImageMethods[imageType ?? _imageType ?? 'jpeg']?.(element, options) .then((res) => { created?.(res, element) diff --git a/src/hooks/web/useElementFullscreen.ts b/src/hooks/web/useElementFullscreen.ts index 03b54b81..207fe441 100644 --- a/src/hooks/web/useElementFullscreen.ts +++ b/src/hooks/web/useElementFullscreen.ts @@ -12,7 +12,7 @@ import { unrefElement, effectDispose, isValueType } from '@/utils' import { useWindowSize } from '@vueuse/core' -import type { BasicTarget } from '@/types/modules/vue' +import type { BasicTarget } from '@/types' export interface UseElementFullscreenOptions { beforeEnter?: () => void @@ -159,3 +159,7 @@ export const useElementFullscreen = ( toggleFullscreen, } } + +export type UseElementFullscreenReturnTypes = ReturnType< + typeof useElementFullscreen +> diff --git a/src/hooks/web/useI18n.ts b/src/hooks/web/useI18n.ts index 31adab74..98193a17 100644 --- a/src/hooks/web/useI18n.ts +++ b/src/hooks/web/useI18n.ts @@ -18,7 +18,7 @@ const getI18nKey = (namespace: string | undefined, key: string) => { return key } - if (key.startsWith(namespace)) { + if (key[0] === namespace) { return key } diff --git a/src/hooks/web/usePrint.ts b/src/hooks/web/usePrint.ts index 0949c670..342af3be 100644 --- a/src/hooks/web/usePrint.ts +++ b/src/hooks/web/usePrint.ts @@ -2,7 +2,7 @@ import print from 'print-js' import { unrefElement } from '@/utils' -import type { BasicTarget } from '@/types/modules/vue' +import type { BasicTarget } from '@/types' export interface UsePrintOptions extends Omit {} diff --git a/src/layout/components/Menu/index.tsx b/src/layout/components/Menu/index.tsx index 71449cda..b363aca1 100644 --- a/src/layout/components/Menu/index.tsx +++ b/src/layout/components/Menu/index.tsx @@ -20,8 +20,8 @@ import { getVariableToRefs, setVariable } from '@/global-variable' import { useMenuGetters, useMenuActions } from '@/store' import type { MenuInst } from 'naive-ui' -import type { NaiveMenuOptions } from '@/types/modules/component' -import type { AppMenuOption } from '@/types/modules/app' +import type { NaiveMenuOptions } from '@/types' +import type { AppMenuOption } from '@/types' export default defineComponent({ name: 'AppMenu', diff --git a/src/layout/components/MenuTag/index.tsx b/src/layout/components/MenuTag/index.tsx index 81050eed..c62fbaaf 100644 --- a/src/layout/components/MenuTag/index.tsx +++ b/src/layout/components/MenuTag/index.tsx @@ -52,7 +52,7 @@ import { throttle } from 'lodash-es' import { useAppRoot } from '@/hooks/template' import type { ScrollbarInst } from 'naive-ui' -import type { MenuTagOptions, AppMenuOption } from '@/types/modules/app' +import type { MenuTagOptions, AppMenuOption } from '@/types' export default defineComponent({ name: 'AppMenuTag', @@ -423,7 +423,7 @@ export default defineComponent({ } }, render() { - const { iconConfig, getRootPath, uuidScrollBar } = this + const { iconConfig, getRootPath, uuidScrollBar, getMenuTagOptions } = this const { maximize, closeCurrentMenuTag, scrollX, $t } = this return ( @@ -472,7 +472,7 @@ export default defineComponent({ align="center" justify="start" > - {this.getMenuTagOptions.map((curr, idx) => ( + {getMenuTagOptions.map((curr, idx) => ( - {(curr.closeable || - this.getMenuTagOptions.length === 1) && + {(curr.closeable || getMenuTagOptions.length === 1) && curr.key !== getRootPath ? ( path.startsWith('/') +// 是否为根路由 +const isRootPath = (path: string) => path[0] === '/' /** * @@ -41,31 +42,25 @@ const routePromotion = ( return [] } - const sourceArr = arr + for (const curr of arr) { + const newPath = path + (isRootPath(curr.path) ? curr.path : '/' + curr.path) - sourceArr.forEach((curr) => { if (curr.children?.length) { - routePromotion( - curr.children, - result, - path + (isRootPath(curr.path) ? curr.path : '/' + curr.path), - ) - } else { - const newPath = - path + (isRootPath(curr.path) ? curr.path : '/' + curr.path) + routePromotion(curr.children, result, newPath) - const newCurr: AppRouteRecordRaw = { + continue + } else { + result.push({ ...curr, path: newPath, - } - - result.push(newCurr) + }) } - }) + } return result } +// 获取所有已展开的路由 export const expandRoutes = (arr: AppRouteRecordRaw[]) => { if (!Array.isArray(arr)) { return [] diff --git a/src/router/helper/routerCopilot.ts b/src/router/helper/routerCopilot.ts index f7fccdea..3d707669 100644 --- a/src/router/helper/routerCopilot.ts +++ b/src/router/helper/routerCopilot.ts @@ -18,7 +18,7 @@ import { useAppRoot } from '@/hooks/template' import type { Router } from 'vue-router' import type { AppRouteMeta } from '@/router/type' -import type { AppMenuOption } from '@/types/modules/app' +import type { AppMenuOption } from '@/types' /** * diff --git a/src/router/type.ts b/src/router/type.ts index 1d51ddb3..a716a8a3 100644 --- a/src/router/type.ts +++ b/src/router/type.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { RouteRecordRaw } from 'vue-router' -import type { Recordable } from '@/types/modules/helper' +import type { Recordable } from '@/types' import type { DefineComponent, VNode } from 'vue' export type Component = diff --git a/src/store/hooks/useMenuStore.ts b/src/store/hooks/useMenuStore.ts index d782431c..ac90049e 100644 --- a/src/store/hooks/useMenuStore.ts +++ b/src/store/hooks/useMenuStore.ts @@ -79,7 +79,6 @@ export const useMenuGetters = () => { export const useMenuActions = () => { const { changeMenuModelValue, - setupAppMenu, collapsedMenu, spliceMenTagOptions, emptyMenuTagOptions, @@ -88,7 +87,6 @@ export const useMenuActions = () => { return { changeMenuModelValue, - setupAppMenu, collapsedMenu, spliceMenTagOptions, emptyMenuTagOptions, diff --git a/src/store/hooks/useSettingStore.ts b/src/store/hooks/useSettingStore.ts index cfe2c8f9..458d9317 100644 --- a/src/store/hooks/useSettingStore.ts +++ b/src/store/hooks/useSettingStore.ts @@ -71,6 +71,12 @@ export const useSettingGetters = () => { */ const getWatermarkConfig = computed(() => variable.watermarkConfig) + /** + * + * @remark 获取 app 根路由 + */ + const getAppRootRoute = computed(() => variable.appRootRoute) + return { getDrawerPlacement, getPrimaryColorOverride, @@ -83,6 +89,7 @@ export const useSettingGetters = () => { getContentTransition, getWatermarkSwitch, getWatermarkConfig, + getAppRootRoute, } } diff --git a/src/store/modules/keep-alive/index.ts b/src/store/modules/keep-alive/index.ts index 35cbe4ee..604129a3 100644 --- a/src/store/modules/keep-alive/index.ts +++ b/src/store/modules/keep-alive/index.ts @@ -21,7 +21,7 @@ import { APP_KEEP_ALIVE } from '@/app-config/appConfig' import type { KeepAliveStoreState } from './type' -import type { AppMenuOption } from '@/types/modules/app' +import type { AppMenuOption } from '@/types' export const piniaKeepAliveStore = defineStore( 'keepAlive', diff --git a/src/store/modules/menu/helper.ts b/src/store/modules/menu/helper.ts index b8bb3969..e48322b0 100644 --- a/src/store/modules/menu/helper.ts +++ b/src/store/modules/menu/helper.ts @@ -39,11 +39,7 @@ const isMatch = ( return false } - if (node[key] === value) { - return true - } - - return false + return node[key] === value } /** @@ -95,7 +91,7 @@ export const parseAndFindMatchingNodes = ( key: string | number, value: string | number, ) => { - const temp = [] + const temp: AppMenuOption[] = [] for (const it of options) { const innerTemp = findMatchingNodes(it, key, value) diff --git a/src/store/modules/menu/index.ts b/src/store/modules/menu/index.ts index 5f6d2b71..0e2ebdad 100644 --- a/src/store/modules/menu/index.ts +++ b/src/store/modules/menu/index.ts @@ -25,7 +25,7 @@ import { NEllipsis } from 'naive-ui' -import { setStorage } from '@/utils' +import { setStorage, pick } from '@/utils' import { validRole, validMenuItemShow } from '@/router/helper/routerCopilot' import { parseAndFindMatchingNodes, @@ -35,18 +35,16 @@ import { } from './helper' import { useI18n } from '@/hooks/web' import { getAppRawRoutes } from '@/router/appRouteModules' -import { throttle } from 'lodash-es' import { useKeepAliveActions } from '@/store' -import type { AppRouteRecordRaw } from '@/router/type' -import type { AppMenuOption, MenuTagOptions } from '@/types/modules/app' +import type { AppMenuOption, MenuTagOptions } from '@/types' import type { MenuState } from '@/store/modules/menu/type' import type { LocationQuery } from 'vue-router' export const piniaMenuStore = defineStore( 'menu', () => { - const router = useRouter() + const { push, getRoutes } = useRouter() const route = useRoute() const { t } = useI18n() const { setKeepAliveInclude } = useKeepAliveActions() @@ -86,8 +84,7 @@ export const piniaMenuStore = defineStore( }) if (option.path === getCatchMenuKey()) { - /** 设置标签页(初始化时执行设置一次, 避免含有平级路由模式情况时出现不能正确设置标签页的情况) */ - setMenuTagOptionsWhenMenuValueChange(option.path, attr) + menuState.currentMenuOption = attr } attr.show = validMenuItemShow(attr) @@ -121,21 +118,7 @@ export const piniaMenuStore = defineStore( key: string | number, option: AppMenuOption, ) => { - const { meta } = option as unknown as AppRouteRecordRaw - menuState.breadcrumbOptions = getCompleteRoutePath(menuState.options, key) - - if (meta.sameLevel) { - nextTick().then(() => { - const fd = menuState.breadcrumbOptions.find((curr) => { - return curr.path === option.path - }) - - if (!fd) { - menuState.breadcrumbOptions.push(option as unknown as AppMenuOption) - } - }) - } } /** @@ -204,46 +187,68 @@ export const piniaMenuStore = defineStore( * * 但是, 缓存 key 都以当前点击 key 为准 */ - if (!String(key).startsWith('/')) { + if (String(key)[0] === '/') { + /** 根路由直接跳转 */ + push({ + path, + query, + }) + } else { /** 如果不是根路由, 则拼接完整路由并跳转 */ const _path = getCompleteRoutePath(menuState.options, key) .map((curr) => curr.key) .join('/') - router.push({ + push({ path: _path, query, }) - } else { - /** 根路由直接跳转 */ - router.push({ - path, - query, - }) } /** 检查是否为根路由 */ const count = (path.match(isRootPathReg) || []).length + const { sameLevel } = meta /** 更新缓存队列 */ - setKeepAliveInclude(option as unknown as AppMenuOption) + setKeepAliveInclude(option) /** 更新浏览器标题 */ - updateDocumentTitle(option as unknown as AppMenuOption) + updateDocumentTitle(option) - if (!meta.sameLevel || (meta.sameLevel && count === 1)) { + // 如果不为 sameLevel,则会执行更新:覆盖更新面包屑、添加标签菜单、更新缓存 + if (!sameLevel || (sameLevel && count === 1)) { /** 更新标签菜单 */ setMenuTagOptionsWhenMenuValueChange(key, option) /** 更新面包屑 */ setBreadcrumbOptions(key, option) menuState.menuKey = key + menuState.currentMenuOption = option + /** 缓存菜单 key(sessionStorage) */ setStorage('menuKey', key) } else { - setBreadcrumbOptions(menuState.menuKey || '', option) - } + // 使用 pick 提取仅需要的字段,避免 vue 抛错空引用,导致性能损耗 + const breadcrumbOption = pick(resolveOption(option), [ + 'breadcrumbLabel', + 'children', + 'key', + 'meta', + 'name', + 'path', + 'show', + ]) + // 查看是否重复 + const find = menuState.breadcrumbOptions.find( + (curr) => curr.key === breadcrumbOption.key, + ) - menuState.currentMenuOption = option + // 如果未重复追加 + if (!find) { + menuState.breadcrumbOptions.push( + breadcrumbOption as unknown as AppMenuOption, + ) + } + } } } @@ -270,21 +275,22 @@ export const piniaMenuStore = defineStore( combinePath = splitPath[splitPath.length - 1] } - // 如果当前菜单 key 与路由地址相同,说明不是手动更新 url, 则不会触发更新 - if (combinePath === menuState.menuKey) { - return - } - - const findMenuOption = router - .getRoutes() - .find((curr) => - count > 1 ? path === curr.path : combinePath === curr.path, - ) + // 直接使用完整 url,检查是否在 routes 中 + const findMenuOption = getRoutes().find((curr) => curr.path === routePath) if (findMenuOption) { + // 使用 pick 提取仅需要的字段,避免 vue 抛错空引用,导致性能损耗 + const pickOption = pick(findMenuOption, [ + 'children', + 'meta', + 'path', + 'name', + 'redirect', + ]) as unknown as AppMenuOption + changeMenuModelValue( count > 1 ? combinePath : path, - resolveOption(findMenuOption as unknown as AppMenuOption), + resolveOption(pickOption), query, ) } @@ -320,6 +326,17 @@ export const piniaMenuStore = defineStore( 0, ) + // 初始化后更新面包屑、标签菜单 + if (menuState.currentMenuOption) { + const { currentMenuOption } = menuState + + setBreadcrumbOptions(currentMenuOption.key, currentMenuOption) + setMenuTagOptionsWhenMenuValueChange( + currentMenuOption.key, + currentMenuOption, + ) + } + resolve() }) } @@ -384,8 +401,7 @@ export const piniaMenuStore = defineStore( return { ...toRefs(menuState), - changeMenuModelValue: throttle(changeMenuModelValue, 500), - setupAppMenu, + changeMenuModelValue, collapsedMenu, spliceMenTagOptions, emptyMenuTagOptions, diff --git a/src/store/modules/menu/type.ts b/src/store/modules/menu/type.ts index 0a5247ce..7d574c3b 100644 --- a/src/store/modules/menu/type.ts +++ b/src/store/modules/menu/type.ts @@ -1,8 +1,4 @@ -import type { - AppMenuOption, - MenuTagOptions, - AppMenuKey, -} from '@/types/modules/app' +import type { AppMenuOption, MenuTagOptions, AppMenuKey } from '@/types' export interface MenuState { menuKey: AppMenuKey diff --git a/src/store/modules/setting/index.ts b/src/store/modules/setting/index.ts index 797378cb..d510e8ed 100644 --- a/src/store/modules/setting/index.ts +++ b/src/store/modules/setting/index.ts @@ -4,12 +4,10 @@ import { colorToRgba, setStorage } from '@/utils' import { useI18n } from '@/hooks/web' import { APP_THEME } from '@/app-config/designConfig' import { useDayjs } from '@/hooks/web' -import { APP_WATERMARK_CONFIG } from '@/app-config/appConfig' -import { cloneDeep } from 'lodash-es' import type { SettingState } from '@/store/modules/setting/type' import type { LocalKey } from '@/hooks/web' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' export const piniaSettingStore = defineStore( 'setting', @@ -37,7 +35,20 @@ export const piniaSettingStore = defineStore( copyrightSwitch: true, // 底部区域开关 contentTransition: 'scale', // 切换过渡效果 watermarkSwitch: false, // 水印开关, - watermarkConfig: cloneDeep(APP_WATERMARK_CONFIG), + watermarkConfig: { + content: 'Trying be better~', + fontSize: 16, + lineHeight: 16, + width: 384, + height: 384, + xOffset: 12, + yOffset: 60, + rotate: -15, + }, + appRootRoute: { + name: 'Dashboard', + path: '/dashboard', + }, }) /** 修改当前语言 */ diff --git a/src/store/modules/setting/type.ts b/src/store/modules/setting/type.ts index f1279540..a2186ef4 100644 --- a/src/store/modules/setting/type.ts +++ b/src/store/modules/setting/type.ts @@ -1,6 +1,21 @@ import type { GlobalThemeOverrides } from 'naive-ui' -import type { Placement } from '@/types/modules/component' -import type { APP_WATERMARK_CONFIG } from '@/app-config/appConfig' +import type { Placement } from '@/types' + +export interface WatermarkConfig { + content: string + fontSize: number + lineHeight: number + width: number + height: number + xOffset: number + yOffset: number + rotate: number +} + +export interface AppRootRoute { + name: string + path: string +} export interface SettingState { drawerPlacement: Placement @@ -13,5 +28,6 @@ export interface SettingState { watermarkSwitch: boolean copyrightSwitch: boolean contentTransition: string - watermarkConfig: typeof APP_WATERMARK_CONFIG + watermarkConfig: WatermarkConfig + appRootRoute: AppRootRoute } diff --git a/src/types/global.d.ts b/src/types/global.d.ts index 9b2b490f..c49a18eb 100644 --- a/src/types/global.d.ts +++ b/src/types/global.d.ts @@ -8,12 +8,28 @@ import type { LoadingBarApi, NotificationApi, } from 'naive-ui' +import type { NativeElements, ReservedProps, VNode } from 'vue' export declare global { declare interface UnknownObjectKey { [propName: string]: any } + namespace JSX { + export interface Element extends VNode {} + export interface ElementClass { + $props: {} + } + export interface ElementAttributesProperty { + $props: {} + } + export interface IntrinsicElements extends NativeElements { + // allow arbitrary elements + [name: string]: any + } + export interface IntrinsicAttributes extends ReservedProps {} + } + declare const __DEV__: boolean declare const __APP_CFG__: AppConfig diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 00000000..8b32d110 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,8 @@ +export type * from './modules/app' +export type * from './modules/appConfig' +export type * from './modules/axios' +export type * from './modules/cfg' +export type * from './modules/component' +export type * from './modules/helper' +export type * from './modules/utils' +export type * from './modules/vue' diff --git a/src/types/modules/cfg.ts b/src/types/modules/cfg.ts index b81c79c3..db040056 100644 --- a/src/types/modules/cfg.ts +++ b/src/types/modules/cfg.ts @@ -5,7 +5,7 @@ import type { AliasOptions, UserConfigExport, } from 'vite' -import type { Recordable } from '@/types/modules/helper' +import type { Recordable } from '@/types' import type { GlobalThemeOverrides } from 'naive-ui' export interface LayoutSideBarLogo { diff --git a/src/types/modules/helper.ts b/src/types/modules/helper.ts index 74ad5452..ae72e630 100644 --- a/src/types/modules/helper.ts +++ b/src/types/modules/helper.ts @@ -13,6 +13,18 @@ export type ConditionalKeys = NonNullable< }[keyof Base] > +/** + * + * 从目标类型中排除符合条件的属性 + * + * @example + * ConditionalExclude<{ a: string, b: number }, string> // { b: number } + */ +export type ConditionalExclude = Omit< + Base, + ConditionalKeys +> + /** * * 从目标类型中挑选出符合条件的属性 @@ -68,3 +80,17 @@ export type DeepMutable = { ? DeepMutable : T[P] } + +/** + * + * 获取 Promise 返回值类型 + * + * @example + * ReturnPromiseType> // string + * ReturnPromiseType | Promise> // string | number + */ +export type ReturnPromiseType> = T extends Promise< + infer U +> + ? U + : never diff --git a/src/utils/basic.ts b/src/utils/basic.ts index df31126b..3661cfa7 100644 --- a/src/utils/basic.ts +++ b/src/utils/basic.ts @@ -3,8 +3,8 @@ import type { DownloadAnyFileDataType, BasicTypes, AnyFC, -} from '@/types/modules/utils' -import type { Recordable } from '@/types/modules/helper' +} from '@/types' +import type { Recordable } from '@/types' /** * @@ -150,9 +150,7 @@ export const downloadAnyFile = ( try { if (typeof data === 'string') { downloadBase64File(data, fileName) - resolve() - - return + return resolve() } if (data instanceof ArrayBuffer) { @@ -162,9 +160,7 @@ export const downloadAnyFile = ( } else if (data instanceof File || data instanceof Blob) { blobData = data } else { - reject(new Error('downloadAnyFile: Unsupported data type.')) - - return + return reject(new Error('downloadAnyFile: Unsupported data type.')) } const url = URL.createObjectURL(blobData) @@ -181,18 +177,18 @@ export const downloadAnyFile = ( link.addEventListener('load', () => { remove() - resolve() + return resolve() }) link.addEventListener('error', (error) => { remove() - reject(error) + return reject(error) }) document.body.appendChild(link) link.click() } catch (error) { - reject(error) + return reject(error) } }) } diff --git a/src/utils/cache.ts b/src/utils/cache.ts index ae09dddf..6e3920e3 100644 --- a/src/utils/cache.ts +++ b/src/utils/cache.ts @@ -9,7 +9,7 @@ * @remark 今天也是元气满满撸代码的一天 */ -import type { StorageLike, RemoveStorageKey } from '@/types/modules/utils' +import type { StorageLike, RemoveStorageKey } from '@/types' /** * diff --git a/src/utils/crypto.ts b/src/utils/crypto.ts index 3e1aa7e6..96a09237 100644 --- a/src/utils/crypto.ts +++ b/src/utils/crypto.ts @@ -4,7 +4,7 @@ // import MD5 from 'crypto-js/md5' // import BASE64 from 'crypto-js/enc-base64' -// import type { WordArray, CipherParams } from '@/types/modules/utils' +// import type { WordArray, CipherParams } from '@/types' /** * diff --git a/src/utils/dom.ts b/src/utils/dom.ts index 624fc6d5..a9584353 100644 --- a/src/utils/dom.ts +++ b/src/utils/dom.ts @@ -13,7 +13,7 @@ import { omit } from './basic' import { useDomToImage, usePrint } from '@/hooks/web' import type { UsePrintOptions, UseDomToImageOptions } from '@/hooks/web' -import type { BasicTarget } from '@/types/modules/vue' +import type { BasicTarget } from '@/types' export interface PrintDomOptions { printOptions?: Omit diff --git a/src/utils/element.ts b/src/utils/element.ts index 08cb7702..cbecf21a 100644 --- a/src/utils/element.ts +++ b/src/utils/element.ts @@ -1,11 +1,8 @@ import { APP_REGEX } from '@/app-config/regexConfig' import { effectDispose, unrefElement, isValueType } from '@/utils' -import type { - PartialCSSStyleDeclaration, - ElementSelector, -} from '@/types/modules/utils' -import type { BasicTarget } from '@/types/modules/vue' +import type { PartialCSSStyleDeclaration, ElementSelector } from '@/types' +import type { BasicTarget } from '@/types' /** * diff --git a/src/utils/precision.ts b/src/utils/precision.ts index b4381478..b540af98 100644 --- a/src/utils/precision.ts +++ b/src/utils/precision.ts @@ -32,7 +32,7 @@ import { cloneDeep } from 'lodash-es' import { isValueType } from '@/utils' import type { Options } from 'currency.js' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' export type CurrencyArguments = string | number | currency diff --git a/src/utils/vue/call.ts b/src/utils/vue/call.ts index 4d530381..bc084e5f 100644 --- a/src/utils/vue/call.ts +++ b/src/utils/vue/call.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { AnyFC, MaybeArray } from '@/types/modules/utils' +import type { AnyFC, MaybeArray } from '@/types' function call(funcs: MaybeArray<() => void>): void diff --git a/src/utils/vue/effectDispose.ts b/src/utils/vue/effectDispose.ts index ab88a6d4..ac44b1cd 100644 --- a/src/utils/vue/effectDispose.ts +++ b/src/utils/vue/effectDispose.ts @@ -11,7 +11,7 @@ import { getCurrentScope, onScopeDispose } from 'vue' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' /** * diff --git a/src/utils/vue/unrefElement.ts b/src/utils/vue/unrefElement.ts index 66ce95fb..7e17ee43 100644 --- a/src/utils/vue/unrefElement.ts +++ b/src/utils/vue/unrefElement.ts @@ -9,7 +9,7 @@ * @remark 今天也是元气满满撸代码的一天 */ -import type { BasicTarget, TargetType, TargetValue } from '@/types/modules/vue' +import type { BasicTarget, TargetType, TargetValue } from '@/types' import type { ComponentPublicInstance } from 'vue' /** diff --git a/src/utils/vue/watchEffectWithTarget.ts b/src/utils/vue/watchEffectWithTarget.ts index e85f48b2..6427d389 100644 --- a/src/utils/vue/watchEffectWithTarget.ts +++ b/src/utils/vue/watchEffectWithTarget.ts @@ -12,7 +12,7 @@ import { effectDispose } from './effectDispose' import type { WatchOptionsBase } from 'vue' -import type { AnyFC } from '@/types/modules/utils' +import type { AnyFC } from '@/types' /** * diff --git a/src/views/demo/directive/index.tsx b/src/views/demo/directive/index.tsx index 6ac7460a..7943dd92 100644 --- a/src/views/demo/directive/index.tsx +++ b/src/views/demo/directive/index.tsx @@ -20,7 +20,7 @@ import { NFormItem, } from 'naive-ui' -import type { ConditionalPick } from '@/types/modules/helper' +import type { ConditionalPick } from '@/types' import type { DebounceBindingOptions, ThrottleBindingOptions, diff --git a/src/views/demo/modal-demo/index.tsx b/src/views/demo/modal-demo/index.tsx index 7a34a9cb..4aa0a6aa 100644 --- a/src/views/demo/modal-demo/index.tsx +++ b/src/views/demo/modal-demo/index.tsx @@ -28,6 +28,16 @@ export default defineComponent({ render() { return ( + + +

+ memoryPosition: 是否记住上一次被拖拽的位置,如果设置为 + true,那么下一次打开的时候会自动定位到上一次的位置。 +

+

fullscreen: 全屏模态框。

+

dad: 启用拖拽,当配置为 false 时,会禁用拖拽效果。

+
+
{ - window.$message.error('relod props') + window.$message.info('reload event') }} /> { +export default defineConfig(({ mode }) => { const { dependencies, devDependencies, name, version } = pkg const { server,