feat: add animate components

This commit is contained in:
bqy_fe 2021-06-12 22:19:59 +08:00
parent 9f77b496ac
commit 43b6361515
30 changed files with 1203 additions and 353 deletions

View File

@ -1,10 +1,10 @@
# 基于 Vite2.x + Vue3.x + TypeScript H5 低代码平台 # base on Vite2.x + Vue3.x + TypeScript H5 Low code platform
[![license](https://img.shields.io/github/license/buqiyuan/vite-vue3-lowcode.svg)](LICENSE) [![license](https://img.shields.io/github/license/buqiyuan/vite-vue3-lowcode.svg)](LICENSE)
**中文** | [English](./README.md) **English** | [中文](./README.md)
## 克隆主分支,忽略 git-pages 等无关分支 ## Clone the main branch and ignore irrelevant branches such as git-pages
```shell ```shell
git clone --single-branch https://github.com/buqiyuan/vite-vue3-lowcode.git git clone --single-branch https://github.com/buqiyuan/vite-vue3-lowcode.git
@ -12,39 +12,34 @@ git clone --single-branch https://github.com/buqiyuan/vite-vue3-lowcode.git
git clone --single-branch https://gitee.com/buqiyuan/vite-vue3-lowcode.git git clone --single-branch https://gitee.com/buqiyuan/vite-vue3-lowcode.git
``` ```
## 技术栈 ## technology stack
- 编程语言[TypeScript 4.x](https://www.typescriptlang.org/zh/) + [JavaScript](https://www.javascript.com/) - Programming Language[TypeScript 4.x](https://www.typescriptlang.org/zh/) + [JavaScript](https://www.javascript.com/)
- 构建工具[Vite 2.x](https://cn.vitejs.dev/) - Build Tools[Vite 2.x](https://cn.vitejs.dev/)
- 前端框架[Vue 3.x](https://v3.cn.vuejs.org/) - Front End Frame[Vue 3.x](https://v3.cn.vuejs.org/)
- 路由工具[Vue Router 4.x](https://next.router.vuejs.org/zh/index.html) - Subnet Calculator[Vue Router 4.x](https://next.router.vuejs.org/zh/index.html)
- 状态管理[Vuex 4.x](https://next.vuex.vuejs.org/) - State Management[Vuex 4.x](https://next.vuex.vuejs.org/)
- PC 端 UI 框架[Element Plus](https://element-plus.org/#/zh-CN) - PC UI Frame[Element Plus](https://element-plus.org/#/zh-CN)
- H5 端 UI 框架[vant](https://vant-contrib.gitee.io/vant/v3/#/zh-CN/) - H5 UI Frame[vant](https://vant-contrib.gitee.io/vant/v3/#/zh-CN/)
- CSS 预编译[Stylus](https://stylus-lang.com/) / [Sass](https://sass.bootcss.com/documentation) / [Less](http://lesscss.cn/) - CSS Pre[Stylus](https://stylus-lang.com/) / [Sass](https://sass.bootcss.com/documentation) / [Less](http://lesscss.cn/)
- HTTP 工具[Axios](https://axios-http.com/) - HTTP Tool[Axios](https://axios-http.com/)
- Git Hook 工具:[husky](https://typicode.github.io/husky/#/) + [lint-staged](https://github.com/okonet/lint-staged) - Git Hook 工具:[husky](https://typicode.github.io/husky/#/) + [lint-staged](https://github.com/okonet/lint-staged)
- 代码规范[EditorConfig](http://editorconfig.org) + [Prettier](https://prettier.io/) + [ESLint](https://eslint.org/) + [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript#translation) - Coding Standards[EditorConfig](http://editorconfig.org) + [Prettier](https://prettier.io/) + [ESLint](https://eslint.org/) + [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript#translation)
- 提交规范[Commitizen](http://commitizen.github.io/cz-cli/) + [Commitlint](https://commitlint.js.org/#/) - Submit Specifications[Commitizen](http://commitizen.github.io/cz-cli/) + [Commitlint](https://commitlint.js.org/#/)
- 单元测试[vue-test-utils](https://next.vue-test-utils.vuejs.org/) + [jest](https://jestjs.io/) + [vue-jest](https://github.com/vuejs/vue-jest) + [ts-jest](https://kulshekhar.github.io/ts-jest/) - Unit Testing[vue-test-utils](https://next.vue-test-utils.vuejs.org/) + [jest](https://jestjs.io/) + [vue-jest](https://github.com/vuejs/vue-jest) + [ts-jest](https://kulshekhar.github.io/ts-jest/)
- 自动部署[GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions) - Auto Deploy[GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions)
### 功能清单 ### Function List
- [x] 动态添加页面 - [x] Add pages dynamically
- [x] 拖拽式生成组件 - [x] Drag and drop components
- [ ] service worker + indexeddb 实现无服务端的前端交互 - [ ] service worker + indexeddb Implement server-free front-end interaction
- [ ] 数据源管理 - [ ] DataSource Admin Console
- [ ] 提供预置函数 - [ ] Provide preset functions
- [ ] 更多组件的封装 - [ ] More component encapsulation
- [ ] 其他... - [ ] Others...
### 简易说明 ### Generate component properties quickly
目前在使用表单时,需要把相关的`表单控件`放到`表单容器`内部,并且需要将`按钮`放到`表单容器`内,
然后再讲`按钮的type`设置为`表单提交按钮`这时候点击提交按钮才会自动收集表单容器内部的所有字段和值
### 快速生成组件属性
```javascript ```javascript
// 在vant文档中 chrome控制台输入以下代码快速生成组件属性 // 在vant文档中 chrome控制台输入以下代码快速生成组件属性
@ -65,36 +60,35 @@ $$('#props + table tr').reduce((prev, curr) => {
}, {}) }, {})
``` ```
## 浏览器支持 ## Browser support
本地开发推荐使用`Chrome 80+` 浏览器 The `Chrome 80+` browser is recommended for local development
支持现代浏览器, 不支持 IE Support modern browsers, not IE
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari | | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | | not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
### 提交规范 ### Git Contribution submission specification
- `feat` 增加新功能 - `feat` Add new features
- `fix` 修复问题/BUG - `fix` Fix the problem/BUG
- `style` 代码风格相关无影响运行结果的 - `style` The code style is related and does not affect the running result
- `perf` 优化/性能提升 - `perf` Optimization/performance improvement
- `refactor` 重构 - `refactor` Refactor
- `revert` 撤销修改 - `revert` Undo edit
- `test` 测试相关 - `test` Test related
- `docs` 文档/注释 - `docs` Documentation/notes
- `build` 对构建系统或者外部依赖项进行了修改 - `chore` Dependency update/scaffolding configuration modification etc.
- `chore` 依赖更新/脚手架配置修改等 - `workflow` Workflow improvements
- `workflow` 工作流改进 - `ci` Continuous integration
- `ci` 持续集成 - `types` Type definition file changes
- `types` 类型定义文件更改 - `wip` In development
- `wip` 开发中
## 快速开始 ## QUICK START
### 安装依赖 ### Install and use
```sh ```sh
npm install npm install
@ -102,13 +96,13 @@ npm install
yarn add yarn add
``` ```
### 启动项目 ### run
```sh ```sh
npm run dev npm run dev
``` ```
### 项目打包 ### build
```sh ```sh
npm run build npm run build

100
README.md
View File

@ -1,10 +1,10 @@
# base on Vite2.x + Vue3.x + TypeScript H5 Low code platform # 基于 Vite2.x + Vue3.x + TypeScript H5 低代码平台
[![license](https://img.shields.io/github/license/buqiyuan/vite-vue3-lowcode.svg)](LICENSE) [![license](https://img.shields.io/github/license/buqiyuan/vite-vue3-lowcode.svg)](LICENSE)
**English** | [中文](./README.zh-CN.md) **中文** | [English](./README.EN.md)
## Clone the main branch and ignore irrelevant branches such as git-pages ## 克隆主分支,忽略 git-pages 等无关分支
```shell ```shell
git clone --single-branch https://github.com/buqiyuan/vite-vue3-lowcode.git git clone --single-branch https://github.com/buqiyuan/vite-vue3-lowcode.git
@ -12,34 +12,39 @@ git clone --single-branch https://github.com/buqiyuan/vite-vue3-lowcode.git
git clone --single-branch https://gitee.com/buqiyuan/vite-vue3-lowcode.git git clone --single-branch https://gitee.com/buqiyuan/vite-vue3-lowcode.git
``` ```
## technology stack ## 技术栈
- Programming Language[TypeScript 4.x](https://www.typescriptlang.org/zh/) + [JavaScript](https://www.javascript.com/) - 编程语言[TypeScript 4.x](https://www.typescriptlang.org/zh/) + [JavaScript](https://www.javascript.com/)
- Build Tools[Vite 2.x](https://cn.vitejs.dev/) - 构建工具[Vite 2.x](https://cn.vitejs.dev/)
- Front End Frame[Vue 3.x](https://v3.cn.vuejs.org/) - 前端框架[Vue 3.x](https://v3.cn.vuejs.org/)
- Subnet Calculator[Vue Router 4.x](https://next.router.vuejs.org/zh/index.html) - 路由工具[Vue Router 4.x](https://next.router.vuejs.org/zh/index.html)
- State Management[Vuex 4.x](https://next.vuex.vuejs.org/) - 状态管理[Vuex 4.x](https://next.vuex.vuejs.org/)
- PC UI Frame[Element Plus](https://element-plus.org/#/zh-CN) - PC 端 UI 框架[Element Plus](https://element-plus.org/#/zh-CN)
- H5 UI Frame[vant](https://vant-contrib.gitee.io/vant/v3/#/zh-CN/) - H5 端 UI 框架[vant](https://vant-contrib.gitee.io/vant/v3/#/zh-CN/)
- CSS Pre[Stylus](https://stylus-lang.com/) / [Sass](https://sass.bootcss.com/documentation) / [Less](http://lesscss.cn/) - CSS 预编译[Stylus](https://stylus-lang.com/) / [Sass](https://sass.bootcss.com/documentation) / [Less](http://lesscss.cn/)
- HTTP Tool[Axios](https://axios-http.com/) - HTTP 工具[Axios](https://axios-http.com/)
- Git Hook 工具:[husky](https://typicode.github.io/husky/#/) + [lint-staged](https://github.com/okonet/lint-staged) - Git Hook 工具:[husky](https://typicode.github.io/husky/#/) + [lint-staged](https://github.com/okonet/lint-staged)
- Coding Standards[EditorConfig](http://editorconfig.org) + [Prettier](https://prettier.io/) + [ESLint](https://eslint.org/) + [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript#translation) - 代码规范[EditorConfig](http://editorconfig.org) + [Prettier](https://prettier.io/) + [ESLint](https://eslint.org/) + [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript#translation)
- Submit Specifications[Commitizen](http://commitizen.github.io/cz-cli/) + [Commitlint](https://commitlint.js.org/#/) - 提交规范[Commitizen](http://commitizen.github.io/cz-cli/) + [Commitlint](https://commitlint.js.org/#/)
- Unit Testing[vue-test-utils](https://next.vue-test-utils.vuejs.org/) + [jest](https://jestjs.io/) + [vue-jest](https://github.com/vuejs/vue-jest) + [ts-jest](https://kulshekhar.github.io/ts-jest/) - 单元测试[vue-test-utils](https://next.vue-test-utils.vuejs.org/) + [jest](https://jestjs.io/) + [vue-jest](https://github.com/vuejs/vue-jest) + [ts-jest](https://kulshekhar.github.io/ts-jest/)
- Auto Deploy[GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions) - 自动部署[GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions)
### Function List ### 功能清单
- [x] Add pages dynamically - [x] 动态添加页面
- [x] Drag and drop components - [x] 拖拽式生成组件
- [ ] service worker + indexeddb Implement server-free front-end interaction - [ ] service worker + indexeddb 实现无服务端的前端交互
- [ ] DataSource Admin Console - [ ] 数据源管理
- [ ] Provide preset functions - [ ] 提供预置函数
- [ ] More component encapsulation - [ ] 更多组件的封装
- [ ] Others... - [ ] 其他...
### Generate component properties quickly ### 简易说明
目前在使用表单时,需要把相关的`表单控件`放到`表单容器`内部,并且需要将`按钮`放到`表单容器`内,
然后再讲`按钮的type`设置为`表单提交按钮`这时候点击提交按钮才会自动收集表单容器内部的所有字段和值
### 快速生成组件属性
```javascript ```javascript
// 在vant文档中 chrome控制台输入以下代码快速生成组件属性 // 在vant文档中 chrome控制台输入以下代码快速生成组件属性
@ -60,35 +65,36 @@ $$('#props + table tr').reduce((prev, curr) => {
}, {}) }, {})
``` ```
## Browser support ## 浏览器支持
The `Chrome 80+` browser is recommended for local development 本地开发推荐使用`Chrome 80+` 浏览器
Support modern browsers, not IE 支持现代浏览器, 不支持 IE
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari | | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt=" Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | | not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
### Git Contribution submission specification ### 提交规范
- `feat` Add new features - `feat` 增加新功能
- `fix` Fix the problem/BUG - `fix` 修复问题/BUG
- `style` The code style is related and does not affect the running result - `style` 代码风格相关无影响运行结果的
- `perf` Optimization/performance improvement - `perf` 优化/性能提升
- `refactor` Refactor - `refactor` 重构
- `revert` Undo edit - `revert` 撤销修改
- `test` Test related - `test` 测试相关
- `docs` Documentation/notes - `docs` 文档/注释
- `chore` Dependency update/scaffolding configuration modification etc. - `build` 对构建系统或者外部依赖项进行了修改
- `workflow` Workflow improvements - `chore` 依赖更新/脚手架配置修改等
- `ci` Continuous integration - `workflow` 工作流改进
- `types` Type definition file changes - `ci` 持续集成
- `wip` In development - `types` 类型定义文件更改
- `wip` 开发中
## QUICK START ## 快速开始
### Install and use ### 安装依赖
```sh ```sh
npm install npm install
@ -96,13 +102,13 @@ npm install
yarn add yarn add
``` ```
### run ### 启动项目
```sh ```sh
npm run dev npm run dev
``` ```
### build ### 项目打包
```sh ```sh
npm run build npm run build

View File

@ -23,19 +23,20 @@
"@vant/touch-emulator": "^1.3.0", "@vant/touch-emulator": "^1.3.0",
"@vueuse/core": "^5.0.2", "@vueuse/core": "^5.0.2",
"@vueuse/integrations": "^5.0.2", "@vueuse/integrations": "^5.0.2",
"animate.css": "^4.1.1",
"axios": "^0.21.1", "axios": "^0.21.1",
"dayjs": "^1.10.5", "dayjs": "^1.10.5",
"dexie": "^3.0.3", "dexie": "^3.0.3",
"element-plus": "^1.0.2-beta.46", "element-plus": "^1.0.2-beta.48",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"monaco-editor": "^0.24.0", "monaco-editor": "^0.25.0",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"nprogress": "^1.0.0-1", "nprogress": "^1.0.0-1",
"qrcode": "^1.4.4", "qrcode": "^1.4.4",
"vant": "^3.0.18", "vant": "^3.0.18",
"vue": "3.0.11", "vue": "3.1.1",
"vue-router": "^4.0.8", "vue-router": "^4.0.8",
"vuedraggable": "^4.0.1", "vuedraggable": "^4.0.3",
"vuex": "^4.0.1" "vuex": "^4.0.1"
}, },
"devDependencies": { "devDependencies": {
@ -47,7 +48,7 @@
"@vitejs/plugin-legacy": "^1.4.1", "@vitejs/plugin-legacy": "^1.4.1",
"@vitejs/plugin-vue": "^1.2.3", "@vitejs/plugin-vue": "^1.2.3",
"@vitejs/plugin-vue-jsx": "^1.1.5", "@vitejs/plugin-vue-jsx": "^1.1.5",
"@vue/compiler-sfc": "3.0.11", "@vue/compiler-sfc": "3.1.1",
"commitizen": "^4.2.4", "commitizen": "^4.2.4",
"cz-conventional-changelog": "^3.3.0", "cz-conventional-changelog": "^3.3.0",
"cz-customizable": "^6.3.0", "cz-customizable": "^6.3.0",
@ -55,7 +56,7 @@
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
"eslint-plugin-prettier": "^3.4.0", "eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-vue": "^7.10.0", "eslint-plugin-vue": "^7.11.0",
"gh-pages": "^3.2.0", "gh-pages": "^3.2.0",
"husky": "^6.0.0", "husky": "^6.0.0",
"lint-staged": "^11.0.0", "lint-staged": "^11.0.0",
@ -68,7 +69,7 @@
"stylelint-order": "^4.1.0", "stylelint-order": "^4.1.0",
"typescript": "^4.3.2", "typescript": "^4.3.2",
"vite": "2.3.7", "vite": "2.3.7",
"vite-plugin-components": "^0.10.4", "vite-plugin-components": "^0.11.1",
"vite-plugin-style-import": "^0.10.1", "vite-plugin-style-import": "^0.10.1",
"vite-plugin-windicss": "^1.0.3", "vite-plugin-windicss": "^1.0.3",
"vue-eslint-parser": "^7.6.0", "vue-eslint-parser": "^7.6.0",

View File

@ -5,6 +5,8 @@ import router from './router'
import { setupVant } from '@/plugins/vant' import { setupVant } from '@/plugins/vant'
import 'animate.css'
const app = createApp(App) const app = createApp(App)
// 安装vant插件 // 安装vant插件

View File

@ -1,5 +1,5 @@
<template> <template>
<div> <div class="__slot-item">
<comp-render :element="element" :config="config"> <comp-render :element="element" :config="config">
<template v-for="(value, key) in element.props?.slots" :key="key" #[key]> <template v-for="(value, key) in element.props?.slots" :key="key" #[key]>
<template v-for="item in value?.children" :key="item._vid"> <template v-for="item in value?.children" :key="item._vid">
@ -14,27 +14,47 @@
/** /**
* @name: slot-item * @name: slot-item
* @author:卜启缘 * @author:卜启缘
* @date: 2021/5/3 4:18 * @date: 2021/5/3 13:18
* @descriptionslot-item * @descriptionslot-item
* @update: 2021/5/3 14:18 * @update: 2021/5/3 14:18
*/ */
import { defineComponent, onMounted, PropType } from 'vue'
import CompRender from './comp-render' import CompRender from './comp-render'
import { useAnimate } from '@/hooks/useAnimate'
import { VisualEditorBlockData } from '@/visual-editor/visual-editor.utils'
export default { export default defineComponent({
name: 'SlotItem', name: 'SlotItem',
components: { CompRender }, components: { CompRender },
props: { props: {
element: { element: {
type: [Object, Array], type: [Object] as PropType<VisualEditorBlockData>,
default: () => ({}) default: () => ({})
}, },
config: { config: {
type: Object, type: Object,
default: () => ({}) default: () => ({})
} }
},
setup(props) {
onMounted(() => {
const animations = props.element.animations
if (animations?.length) {
let animateEl =
(window.$$refs[props.element._vid]?.$el as HTMLElement) ??
(window.$$refs[props.element._vid] as HTMLElement)
animateEl = animateEl?.closest('.__slot-item')?.firstChild as HTMLElement
if (animateEl) {
useAnimate(animateEl, animations)
}
}
})
return {}
} }
} })
</script> </script>
<style scoped></style> <style scoped></style>

44
src/hooks/useAnimate.ts Normal file
View File

@ -0,0 +1,44 @@
/*
* @Author:
* @Date: 2021-06-12 21:29:32
* @LastEditTime: 2021-06-12 22:03:43
* @LastEditors:
* @Description:
* @FilePath: \vite-vue3-lowcode\src\hooks\useAnimate.ts
*/
import { Animation } from '@/visual-editor/visual-editor.utils'
export const useAnimate = async (animateEl: HTMLElement, animations: Animation | Animation[]) => {
animations = Array.isArray(animations) ? animations : [animations]
const play = (animate: Animation) =>
new Promise((resolve) => {
if (animateEl) {
const animationName = `animate__${animate.value}`
animateEl.style.setProperty('--animate-duration', `${animate.duration}s`)
animateEl.style.setProperty('--animate-delay', `${animate.delay}s`)
animateEl.style.setProperty(
'animation-iteration-count',
`${animate.infinite ? 'infinite' : animate.count}`
)
// 动画结束时,删除类名
const handleAnimationEnd = (event?: AnimationEvent) => {
event?.stopPropagation()
animateEl.classList.remove(`animate__animated`, animationName)
animateEl.removeEventListener('animationend', handleAnimationEnd)
resolve('animation end')
}
animateEl?.classList.add(`animate__animated`, animationName)
animateEl?.addEventListener('animationend', handleAnimationEnd, { once: true })
} else {
resolve('动画执行失败!执行动画元素不存在!')
}
})
for (const item of animations) {
await play(item)
}
}

View File

@ -7,6 +7,7 @@ import { setupVant } from './plugins/vant'
import 'normalize.css' import 'normalize.css'
import 'virtual:windi.css' import 'virtual:windi.css'
import 'virtual:windi-devtools' import 'virtual:windi-devtools'
import 'animate.css'
import router from './router/' import router from './router/'
import store from './store/' import store from './store/'

View File

@ -1,3 +1,11 @@
/*
* @Author:
* @Date: 2021-06-01 09:45:21
* @LastEditTime: 2021-06-12 09:55:10
* @LastEditors:
* @Description:
* @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\image\index.tsx
*/
import { Image } from 'vant' import { Image } from 'vant'
import { import {
createEditorInputProp, createEditorInputProp,
@ -5,6 +13,7 @@ import {
createEditorSwitchProp createEditorSwitchProp
} from '@/visual-editor/visual-editor.props' } from '@/visual-editor/visual-editor.props'
import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils' import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
import { useGlobalProperties } from '@/hooks/useGlobalProperties'
export default { export default {
key: 'image', key: 'image',
@ -21,8 +30,10 @@ export default {
</div> </div>
</div> </div>
), ),
render: ({ props }) => { render: ({ props, block }) => {
return <Image {...props} /> const { registerRef } = useGlobalProperties()
const ImageComp = () => <Image ref={(el) => registerRef(el, block._vid)} {...props} />
return <ImageComp></ImageComp>
}, },
props: { props: {
src: createEditorInputProp({ src: createEditorInputProp({

View File

@ -8,7 +8,7 @@ import {
import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils' import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
export default { export default {
key: 'divider', key: 'process',
moduleName: 'baseWidgets', moduleName: 'baseWidgets',
label: '进度条', label: '进度条',
preview: () => <Progress style="width:190px" percentage={0} />, preview: () => <Progress style="width:190px" percentage={0} />,

View File

@ -1,3 +1,12 @@
/*
* @Author:
* @Date: 2021-06-01 09:45:21
* @LastEditTime: 2021-06-12 10:06:33
* @LastEditors:
* @Description:
* @FilePath: \vite-vue3-lowcode\src\packages\base-widgets\text\index.tsx
*/
import { useGlobalProperties } from '@/hooks/useGlobalProperties'
import { import {
createEditorColorProp, createEditorColorProp,
createEditorInputProp, createEditorInputProp,
@ -10,9 +19,18 @@ export default {
moduleName: 'baseWidgets', moduleName: 'baseWidgets',
label: '文本', label: '文本',
preview: () => <span></span>, preview: () => <span></span>,
render: ({ props }) => ( render: ({ props, block }) => {
<span style={{ color: props.color, fontSize: props.size }}>{props.text || '默认文本'}</span> const { registerRef } = useGlobalProperties()
), const Text = () => (
<div
ref={(el) => registerRef(el, block._vid)}
style={{ color: props.color, fontSize: props.size }}
>
{props.text || '默认文本'}
</div>
)
return <Text></Text>
},
props: { props: {
text: createEditorInputProp({ label: '显示文本' }), text: createEditorInputProp({ label: '显示文本' }),
color: createEditorColorProp('字体颜色'), color: createEditorColorProp('字体颜色'),

View File

@ -1,14 +1,21 @@
body { body {
overflow: hidden; overflow: hidden;
} }
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 8px; width: 8px;
height: 8px; height: 8px;
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
background: #bfbfbf; background: #bfbfbf;
border-radius: 10px; border-radius: 10px;
} }
.placeholder { .placeholder {
color: #c8c9cc; color: #c8c9cc;
} }
img {
image-rendering: pixelated;
}

View File

@ -128,7 +128,7 @@ export default defineComponent({
} }
} }
watch(() => props.vid, refreshEditor) watch(() => props.vid, refreshEditor, { immediate: true })
return () => { return () => {
return ( return (

View File

@ -1,7 +1,17 @@
<!--
* @Author: 卜启缘
* @Date: 2021-06-01 13:30:22
* @LastEditTime: 2021-06-12 18:29:28
* @LastEditors: 卜启缘
* @Description: 手机模拟器
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\common\simulator.vue
-->
<template> <template>
<div class="simulator-container"> <div class="simulator-container">
<div class="simulator-editor"> <div class="simulator-editor">
<slot></slot> <div class="simulator-editor-content">
<slot></slot>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -28,17 +38,25 @@ export default defineComponent({
} }
.simulator-editor { .simulator-editor {
width: 360px; width: 560px;
height: 640px; height: 640px;
min-width: 360px; min-width: 560px;
padding: 10px 100px;
overflow: hidden auto;
background: #fafafa; background: #fafafa;
border-radius: 5px; border-radius: 5px;
transform: translate(0); transform: translate(0);
box-shadow: 0 8px 12px #ebedf0;
box-sizing: border-box; box-sizing: border-box;
background-clip: content-box;
contain: layout;
&::-webkit-scrollbar { &::-webkit-scrollbar {
width: 0; width: 0;
} }
&-content {
min-height: 100%;
box-shadow: 0 8px 12px #ebedf0;
}
} }
</style> </style>

View File

@ -1,8 +1,15 @@
/*
* @Author:
* @Date: 2021-06-01 13:22:14
* @LastEditTime: 2021-06-12 14:39:38
* @LastEditors:
* @Description:
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\left-aside\components\base-widgets\index.tsx
*/
import { defineComponent } from 'vue' import { defineComponent } from 'vue'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { visualConfig } from '@/visual.config' import { visualConfig } from '@/visual.config'
// @ts-ignore 暂时方案 待官方修复 import Draggable from 'vuedraggable'
import Draggable from 'vuedraggable/src/vuedraggable'
import styles from './index.module.scss' import styles from './index.module.scss'
import { createNewBlock } from '@/visual-editor/visual-editor.utils' import { createNewBlock } from '@/visual-editor/visual-editor.utils'
@ -29,7 +36,7 @@ export default defineComponent({
list={visualConfig.componentModules.baseWidgets} list={visualConfig.componentModules.baseWidgets}
group={{ name: 'components', pull: 'clone', put: false }} group={{ name: 'components', pull: 'clone', put: false }}
clone={cloneDog} clone={cloneDog}
item-key="key" item-key="_vid"
onChange={log} onChange={log}
> >
{{ {{

View File

@ -1,8 +1,15 @@
/*
* @Author:
* @Date: 2021-06-01 13:22:14
* @LastEditTime: 2021-06-12 14:38:09
* @LastEditors:
* @Description:
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\left-aside\components\container-component\index.tsx
*/
import { defineComponent } from 'vue' import { defineComponent } from 'vue'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { visualConfig } from '@/visual.config' import { visualConfig } from '@/visual.config'
// @ts-ignore 暂时方案 待官方修复 import Draggable from 'vuedraggable'
import Draggable from 'vuedraggable/src/vuedraggable'
import styles from './index.module.scss' import styles from './index.module.scss'
import { createNewBlock } from '@/visual-editor/visual-editor.utils' import { createNewBlock } from '@/visual-editor/visual-editor.utils'
@ -29,7 +36,7 @@ export default defineComponent({
list={visualConfig.componentModules.containerComponents} list={visualConfig.componentModules.containerComponents}
group={{ name: 'components', pull: 'clone', put: false }} group={{ name: 'components', pull: 'clone', put: false }}
clone={cloneDog} clone={cloneDog}
item-key="key" item-key="_vid"
onChange={log} onChange={log}
> >
{{ {{

View File

@ -0,0 +1,188 @@
/*
* @Author:
* @Date: 2021-06-11 18:08:01
* @LastEditTime: 2021-06-12 22:07:05
* @LastEditors:
* @Description:
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\components\animate\Animate.tsx
*/
import { defineComponent, reactive, ref, watchEffect } from 'vue'
import { ElTabs, ElTabPane, ElRow, ElCol, ElButton, ElSwitch, ElAlert } from 'element-plus'
import { animationTabs } from './animateConfig'
import styles from './animate.module.scss'
import { onClickOutside } from '@vueuse/core'
import { useVisualData } from '@/visual-editor/hooks/useVisualData'
import { Animation } from '@/visual-editor/visual-editor.utils'
import { useAnimate } from '@/hooks/useAnimate'
export const Animate = defineComponent({
setup() {
const { currentBlock } = useVisualData()
const target = ref(null)
const state = reactive({
activeName: '',
isAddAnimates: false, // 是否显示添加动画集
changeTargetIndex: -1 // 要修改的动画的索引
})
onClickOutside(target, () => (state.isAddAnimates = false))
watchEffect((onInvalidate) => {
if (state.isAddAnimates) {
state.activeName = 'in'
} else {
state.changeTargetIndex = -1
}
onInvalidate(() => {
console.log('onInvalidate')
})
})
/**
* @description
*/
const runAnimation = (animation: Animation | Animation[] = []) => {
let animateEl =
(window.$$refs[currentBlock.value._vid]?.$el as HTMLElement) ??
(window.$$refs[currentBlock.value._vid] as HTMLElement)
animateEl = animateEl?.closest('.list-group-item')?.firstChild as HTMLElement
if (animateEl) {
useAnimate(animateEl, animation)
}
}
/**
* @description
*/
const clickAnimateName = (index) => {
state.changeTargetIndex = index
state.isAddAnimates = true
}
/**
* @description
* @param index
* @returns
*/
const delAnimate = (index: number) => currentBlock.value.animations?.splice(index, 1)
/**
* @description /
*/
const addOrChangeAnimate = (animateItem: Animation) => {
const animation: Animation = {
...animateItem
}
if (state.changeTargetIndex == -1) {
currentBlock.value.animations?.push(animation)
} else {
// 修改动画
currentBlock.value.animations![state.changeTargetIndex] = animation
state.changeTargetIndex = -1
}
state.isAddAnimates = false
console.log(currentBlock.value.animations, '当前组件的动画')
}
// 已添加的动画列表组件
const AddedAnimateList = () => (
<>
{currentBlock.value.animations?.map((item, index) => (
<ElAlert
onClose={() => delAnimate(index)}
type={'info'}
style={{ marginTop: '12px' }}
key={item.value}
>
{{
title: () => (
<div>
<span class={'title'}>{`动画${index + 1}`}</span>
<span onClick={() => clickAnimateName(index)} class={'label'}>
{item.label}
</span>
<span
onClick={() => runAnimation(item)}
class={'el-icon-caret-right play'}
title={'播放'}
></span>
</div>
),
default: () => (
<>
<ElRow gutter={6}>
<ElCol span={8}>
<input v-model={item.duration} type="number" step={0.1} min={0} />
</ElCol>
<ElCol span={8}>
<input v-model={item.delay} type="number" step={0.1} min={0} />
</ElCol>
<ElCol span={8}>
<input v-model={item.count} type="number" min={0} />
</ElCol>
</ElRow>
<ElSwitch v-model={item.infinite}></ElSwitch>
</>
)
}}
</ElAlert>
))}
</>
)
// 可添加的动画列表组件
const AnimateList = () => (
<ElTabs v-model={state.activeName} stretch>
{Object.keys(animationTabs).map((tabKey) => (
<ElTabPane label={animationTabs[tabKey].label} name={tabKey} key={tabKey}>
<ElRow gutter={10}>
{animationTabs[tabKey].value.map((animateItem: Animation) => (
<ElCol span={8} key={animateItem.value}>
<div
class={'animate-item'}
onClick={() => addOrChangeAnimate(animateItem)}
onMouseenter={() => runAnimation(animateItem)}
>
{animateItem.label}
</div>
</ElCol>
))}
</ElRow>
</ElTabPane>
))}
</ElTabs>
)
return () => (
<div ref={target} class={styles.animate}>
<div v-show={!state.isAddAnimates}>
<ElButton
type={'primary'}
onClick={() => (state.isAddAnimates = true)}
plain
icon={'el-icon-plus'}
>
</ElButton>
<ElButton
type={'primary'}
disabled={!currentBlock.value.animations?.length}
plain
icon={'el-icon-caret-right'}
onClick={() => runAnimation(currentBlock.value.animations)}
>
</ElButton>
<AddedAnimateList />
</div>
<AnimateList v-show={state.isAddAnimates} />
</div>
)
}
})

View File

@ -0,0 +1,67 @@
.animate {
:global {
.el-col {
margin: 10px 0;
}
.animate-item {
@apply flex items-center justify-center;
height: 50px;
padding: 6px;
font-size: 12px;
background-color: #eee;
border-radius: 3px;
transition: background-color 0.2s, color 0.2s;
&:hover {
color: white;
cursor: pointer;
background-color: #1593ff;
}
}
.el-alert {
padding: 10px 8px;
font-size: 14px;
.title {
font-family: PingFangSC-Semibold, PingFang SC;
font-size: 14px;
font-weight: 600;
color: #333;
}
.label {
padding: 4px 10px;
cursor: pointer;
background-color: #e6e9ec;
border-radius: 12px;
}
.play {
font-size: 16px;
cursor: pointer;
}
span {
margin-right: 10px;
}
.el-alert__description {
font-size: inherit;
input[type='number'] {
display: inline-block;
height: 36px;
max-width: 48px;
padding: 6px;
color: #333;
background: #fff;
border: 1px solid #ccd5db;
border-radius: 3px;
}
}
}
}
}

View File

@ -0,0 +1,469 @@
import { Animation } from '@/visual-editor/visual-editor.utils'
export interface animationBoxTs {
label: string
value: Animation[]
}
// 动画类型
export interface animationTabsTs {
in: animationBoxTs
out: animationBoxTs
other: animationBoxTs
}
export const animationTabs: animationTabsTs = {
in: {
label: '进入',
value: []
},
out: {
label: '退出',
value: []
},
other: {
label: '其他',
value: []
}
}
const opt = [
{
label: '强调',
value: 'Attention Seekers',
children: [
{
label: '弹跳',
value: 'bounce'
},
{
label: '闪烁',
value: 'flash'
},
{
label: '跳动',
value: 'pulse'
},
{
label: '抖动',
value: 'headShake'
},
{
label: '摇摆',
value: 'swing'
},
{
label: '橡皮圈',
value: 'rubberBand'
},
{
label: '果冻',
value: 'jello'
},
{
label: '晃动',
value: 'tada'
},
{
label: '抖动',
value: 'wobble'
}
]
},
{
label: '弹跳进入',
value: 'Bouncing Entrances',
children: [
{
label: '弹跳进入',
value: 'bounceIn'
},
{
label: '向下弹跳进入',
value: 'bounceInDown'
},
{
label: '向右弹跳进入',
value: 'bounceInLeft'
},
{
label: '向左弹跳进入',
value: 'bounceInRight'
},
{
label: '向上弹跳进入',
value: 'bounceInUp'
}
]
},
{
label: '弹跳退出',
value: 'Bouncing Exits',
children: [
{
label: '弹跳退出',
value: 'bounceOut'
},
{
label: '向下弹跳退出',
value: 'bounceOutDown'
},
{
label: '向左弹跳退出',
value: 'bounceOutLeft'
},
{
label: '向右弹跳退出',
value: 'bounceOutRight'
},
{
label: '向上弹跳退出',
value: 'bounceOutUp'
}
]
},
{
label: '渐显进入',
value: 'Fading Entrances',
children: [
{
label: '渐显进入',
value: 'fadeIn'
},
{
label: '向下渐显进入',
value: 'fadeInDown'
},
{
label: '由屏幕外向下渐显进入',
value: 'fadeInDownBig'
},
{
label: '向右显进入',
value: 'fadeInLeft'
},
{
label: '由屏幕外向右渐显进入',
value: 'fadeInLeftBig'
},
{
label: '向左渐显进入',
value: 'fadeInRight'
},
{
label: '由屏幕外向左渐显进入',
value: 'fadeInRightBig'
},
{
label: '向上渐显进入',
value: 'fadeInUp'
},
{
label: '由屏幕外向上渐显进入',
value: 'fadeInUpBig'
}
]
},
{
label: '渐隐退出',
value: 'Fading Exits',
children: [
{
label: '渐隐退出',
value: 'fadeOut'
},
{
label: '向下渐隐退出',
value: 'fadeOutDown'
},
{
label: '向下渐隐退出屏幕外',
value: 'fadeOutDownBig'
},
{
label: '向左渐隐退出',
value: 'fadeOutLeft'
},
{
label: '向左渐隐退出屏幕外',
value: 'fadeOutLeftBig'
},
{
label: '向右渐隐退出',
value: 'fadeOutRight'
},
{
label: '向右渐隐退出屏幕外',
value: 'fadeOutRightBig'
},
{
label: '向上渐隐退出',
value: 'fadeOutUp'
},
{
label: '向上渐隐退出屏幕外',
value: 'fadeOutUpBig'
}
]
},
{
label: '翻动',
value: 'Flippers',
children: [
{
label: '翻动',
value: 'flip'
},
{
label: '纵向翻动',
value: 'flipInX'
},
{
label: '横向翻动',
value: 'flipInY'
},
{
label: '立体纵向翻动',
value: 'flipOutX'
},
{
label: '立体横向翻动',
value: 'flipOutY'
}
]
},
{
label: '加速进出',
value: 'Lightspeed',
children: [
{
label: '向左加速进入',
value: 'lightSpeedInRight'
},
{
label: '向右加速进入',
value: 'lightSpeedInLeft'
},
{
label: '向右加速退出',
value: 'lightSpeedOutRight'
},
{
label: '向左加速退出',
value: 'lightSpeedOutLeft'
}
]
},
{
label: '旋转渐显',
value: 'Rotating Entrances',
children: [
{
label: '旋转渐显',
value: 'rotateIn'
},
{
label: '左下角旋转渐显',
value: 'rotateInDownLeft'
},
{
label: '右下角旋转渐显',
value: 'rotateInDownRight'
},
{
label: '左上角旋转渐显',
value: 'rotateInUpLeft'
},
{
label: '右上角旋转渐显',
value: 'rotateInUpRight'
}
]
},
{
label: '旋转渐隐',
value: 'Rotating Exits',
children: [
{
label: '旋转渐隐',
value: 'rotateOut'
},
{
label: '左下角旋转渐隐',
value: 'rotateOutDownLeft'
},
{
label: '左下角旋转渐隐',
value: 'rotateOutDownRight'
},
{
label: '左上角旋转渐隐',
value: 'rotateOutUpLeft'
},
{
label: '右上角旋转渐隐',
value: 'rotateOutUpRight'
}
]
},
{
label: '平移进入',
value: 'Sliding Entrances',
children: [
{
label: '向上平移进入',
value: 'slideInUp'
},
{
label: '向下平移进入',
value: 'slideInDown'
},
{
label: '向右平移进入',
value: 'slideInLeft'
},
{
label: '向左平移进入',
value: 'slideInRight'
}
]
},
{
label: '平移退出',
value: 'Sliding Exits',
children: [
{
label: '向上平移退出',
value: 'slideOutUp'
},
{
label: '向下平移退出',
value: 'slideOutDown'
},
{
label: '向左平移退出',
value: 'slideOutLeft'
},
{
label: '向右平移退出',
value: 'slideOutRight'
}
]
},
{
label: '放大进入',
value: 'Zoom Entrances',
children: [
{
label: '放大进入',
value: 'zoomIn'
},
{
label: '向下放大进入',
value: 'zoomInDown'
},
{
label: '向右放大进入',
value: 'zoomInLeft'
},
{
label: '向左放大进入',
value: 'zoomInRight'
},
{
label: '向上放大进入',
value: 'zoomInUp'
}
]
},
{
label: '缩小退出',
value: 'Zoom Exits',
children: [
{
label: '缩小退出',
value: 'zoomOut'
},
{
label: '向下缩小退出',
value: 'zoomOutDown'
},
{
label: '向左缩小退出',
value: 'zoomOutLeft'
},
{
label: '向右缩小退出',
value: 'zoomOutRight'
},
{
label: '向上缩小退出',
value: 'zoomOutUp'
}
]
},
{
label: '特殊效果',
value: 'Specials',
children: [
{
label: '悬挂',
value: 'hinge'
},
{
label: '滚动进入',
value: 'rollIn'
},
{
label: '滚动退出',
value: 'rollOut'
}
]
}
]
/**
* @return {Object} { animationValue: animatonLabel }
*/
const inReg = /进|渐显/
const outReg = /退|渐隐/
const defaultOption = {
delay: 0,
count: 1,
duration: 1,
infinite: false
}
for (let index = 0; index < opt.length; index++) {
const items = opt[index].children
items.forEach((item) => {
if (inReg.test(item.label)) {
animationTabs.in.value.push({
...item,
...defaultOption
})
} else if (outReg.test(item.label)) {
animationTabs.out.value.push({
...item,
...defaultOption
})
} else {
animationTabs.other.value.push({
...item,
...defaultOption
})
}
})
}
export default animationTabs

View File

@ -19,7 +19,7 @@ import {
ElPopover ElPopover
} from 'element-plus' } from 'element-plus'
import { VisualEditorProps, VisualEditorPropsType } from '@/visual-editor/visual-editor.props' import { VisualEditorProps, VisualEditorPropsType } from '@/visual-editor/visual-editor.props'
import { TablePropEditor } from './' import { TablePropEditor } from '../'
import { useDotProp } from '@/visual-editor/hooks/useDotProp' import { useDotProp } from '@/visual-editor/hooks/useDotProp'
import { useVisualData } from '@/visual-editor/hooks/useVisualData' import { useVisualData } from '@/visual-editor/hooks/useVisualData'

View File

@ -6,4 +6,5 @@
* @update: 2021/5/30 10:57 * @update: 2021/5/30 10:57
*/ */
export { TablePropEditor } from './table-prop-editor/table-prop-editor' export { TablePropEditor } from './table-prop-editor/table-prop-editor'
export { AttrEditor } from './AttrEditor' export { AttrEditor } from './attr-editor/AttrEditor'
export { Animate } from './animate/Animate'

View File

@ -9,53 +9,64 @@ $boxShadow: -2px 0 4px 0 rgb(0 0 0 / 10%);
.drawer { .drawer {
position: absolute; position: absolute;
right: 0;
top: 0; top: 0;
right: 0;
bottom: 0; bottom: 0;
width: 320px; z-index: 20;
width: 350px;
background-color: white; background-color: white;
transform: translateX(100%); transform: translateX(100%);
transition: transform 0.5s ease-in-out;
box-shadow: $boxShadow; box-shadow: $boxShadow;
z-index: 20; transition: transform 0.5s ease-in-out;
contain: layout;
&.is-open { &.is-open {
transform: translateX(0); transform: translateX(0);
/*.floating-action-btn {
/* .floating-action-btn {
transform: translateX(0); transform: translateX(0);
}*/ } */
} }
/*&:hover {
/* &:hover {
.floating-action-btn { .floating-action-btn {
transform: translateX(-20px); transform: translateX(-20px);
} }
}*/ } */
}
.drawer.is-open {
transform: translateX(0);
} }
.floating-action-btn { .floating-action-btn {
position: absolute; position: absolute;
top: 50%;
left: 0;
display: flex;
width: 20px; width: 20px;
height: 80px; height: 80px;
cursor: pointer;
background: #fff; background: #fff;
transform: translateX(-20px);
box-shadow: $boxShadow; box-shadow: $boxShadow;
display: flex; transition: transform 0.5s ease-in-out;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
transform: translateX(-20px);
transition: transform 0.5s ease-in-out;
left: 0;
top: 50%;
cursor: pointer;
} }
.attrs { .attrs {
position: absolute; position: absolute;
padding: 12px;
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow-y: hidden;
background-color: white; background-color: white;
overflow: auto;
.tabs {
height: 100%;
:global {
.el-tabs__content {
height: 100%;
padding-bottom: 50px;
overflow-y: auto;
}
}
}
} }

View File

@ -1,7 +1,7 @@
/* /*
* @Author: * @Author:
* @Date: 2021-06-01 13:22:14 * @Date: 2021-06-01 13:22:14
* @LastEditTime: 2021-06-10 16:33:02 * @LastEditTime: 2021-06-12 19:25:26
* @LastEditors: * @LastEditors:
* @Description: * @Description:
* @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\index.tsx * @FilePath: \vite-vue3-lowcode\src\visual-editor\components\right-attribute-panel\index.tsx
@ -13,9 +13,11 @@ import styles from './index.module.scss'
import './index.common.scss' import './index.common.scss'
import { ElTabPane, ElTabs } from 'element-plus' import { ElTabPane, ElTabs } from 'element-plus'
console.log(styles, 'styles')
import MonacoEditor from '../common/monaco-editor/MonacoEditor' import MonacoEditor from '../common/monaco-editor/MonacoEditor'
import { useVisualData } from '@/visual-editor/hooks/useVisualData' import { useVisualData } from '@/visual-editor/hooks/useVisualData'
import { AttrEditor } from './components' import { AttrEditor, Animate } from './components'
export default defineComponent({ export default defineComponent({
name: 'RightAttributePanel', name: 'RightAttributePanel',
@ -43,14 +45,17 @@ export default defineComponent({
<i class={`el-icon-d-arrow-${state.isOpen ? 'right' : 'left'}`}></i> <i class={`el-icon-d-arrow-${state.isOpen ? 'right' : 'left'}`}></i>
</div> </div>
<div class={styles.attrs}> <div class={styles.attrs}>
<ElTabs v-model={state.activeName}> <ElTabs v-model={state.activeName} type="border-card" class={styles.tabs}>
<ElTabPane label="属性面板" name="attr"> <ElTabPane label="属性面板" name="attr">
<AttrEditor /> <AttrEditor />
</ElTabPane> </ElTabPane>
<ElTabPane label="动画" name="animate" lazy>
<Animate />
</ElTabPane>
<ElTabPane label="JSON" name="json" lazy> <ElTabPane label="JSON" name="json" lazy>
<MonacoEditor <MonacoEditor
code={JSON.stringify(currentBlock.value)} code={JSON.stringify(currentBlock.value)}
layout={{ width: 300, height: 800 }} layout={{ width: 320, height: 800 }}
vid={state.activeName == 'json' ? currentBlock.value._vid : -1} vid={state.activeName == 'json' ? currentBlock.value._vid : -1}
onChange={handleSchemaChange} onChange={handleSchemaChange}
title="" title=""

View File

@ -32,8 +32,7 @@
* @update: 2021/5/1 23:15 * @update: 2021/5/1 23:15
*/ */
import { computed, defineComponent, reactive, toRefs, SetupContext } from 'vue' import { computed, defineComponent, reactive, toRefs, SetupContext } from 'vue'
// @ts-ignore import draggable from 'vuedraggable'
import draggable from 'vuedraggable/src/vuedraggable'
import { useVModel } from '@vueuse/core' import { useVModel } from '@vueuse/core'
export default defineComponent({ export default defineComponent({
@ -76,6 +75,8 @@ export default defineComponent({
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './func.scss';
.flip-list-move { .flip-list-move {
transition: transform 0.5s; transition: transform 0.5s;
} }
@ -96,5 +97,9 @@ export default defineComponent({
&.isDrag div[data-draggable='true'] { &.isDrag div[data-draggable='true'] {
padding: 8px 0; padding: 8px 0;
} }
&.isDrag:not(.no-child) :deep(.list-group-item.has-slot) {
@include showContainerBorder;
}
} }
</style> </style>

View File

@ -0,0 +1,22 @@
/**
* 显示容器边界
*/
@mixin showContainerBorder {
outline: 2px dashed #b0c1d7;
outline-offset: -2px;
&::before {
position: absolute;
top: 0;
left: -3px;
padding: 3px;
font-size: 12px;
font-weight: 700;
color: white;
background-color: #006eff;
border-radius: 3px;
content: attr(data-label);
transform: translate(-100%, 0);
}
}

View File

@ -1,5 +1,5 @@
<template> <template>
<draggable-transition-group v-model:drag="drag" v-model="currentPage.blocks"> <DraggableTransitionGroup v-model:drag="drag" v-model="currentPage.blocks">
<template #item="{ element: outElement }"> <template #item="{ element: outElement }">
<div <div
class="list-group-item" class="list-group-item"
@ -8,7 +8,7 @@
focus: outElement.focus, focus: outElement.focus,
focusWithChild: outElement.focusWithChild, focusWithChild: outElement.focusWithChild,
drag, drag,
['no-child']: !Object.keys(outElement.props.slots || {}).length ['has-slot']: !!Object.keys(outElement.props.slots || {}).length
}" }"
@contextmenu.stop.prevent="onContextmenuBlock($event, outElement)" @contextmenu.stop.prevent="onContextmenuBlock($event, outElement)"
@mousedown="selectComp(outElement)" @mousedown="selectComp(outElement)"
@ -21,8 +21,9 @@
}" }"
> >
<template v-for="(value, slotKey) in outElement.props?.slots" :key="slotKey" #[slotKey]> <template v-for="(value, slotKey) in outElement.props?.slots" :key="slotKey" #[slotKey]>
<slot-item <SlotItem
v-model:children="value.children" v-model:children="value.children"
v-model:drag="drag"
:slot-key="slotKey" :slot-key="slotKey"
:config="visualConfig" :config="visualConfig"
:on-contextmenu-block="onContextmenuBlock" :on-contextmenu-block="onContextmenuBlock"
@ -32,7 +33,7 @@
</comp-render> </comp-render>
</div> </div>
</template> </template>
</draggable-transition-group> </DraggableTransitionGroup>
</template> </template>
<script lang="tsx"> <script lang="tsx">
@ -185,6 +186,8 @@ export default defineComponent({
}) })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './func.scss';
.list-group-item { .list-group-item {
position: relative; position: relative;
padding: 3px; padding: 3px;
@ -201,27 +204,12 @@ export default defineComponent({
display: none; display: none;
} }
&.no-child { &:not(.has-slot) {
content: ''; content: '';
} }
&.focusWithChild { &.focusWithChild {
outline: 2px dashed #b0c1d7; @include showContainerBorder;
outline-offset: -2px;
}
&.focusWithChild::before {
position: absolute;
top: 0;
left: -3px;
padding: 3px;
font-size: 12px;
font-weight: 700;
color: white;
background-color: #006eff;
border-radius: 3px;
content: attr(data-label);
transform: translate(-100%, 0);
} }
i { i {

View File

@ -1,10 +1,11 @@
<template> <template>
<draggable-transition-group <draggable-transition-group
:key="slotKey"
v-model="slotChildren" v-model="slotChildren"
v-model:drag="drag" v-model:drag="isDrag"
class="inner-draggable" class="inner-draggable"
:class="{ slot: !slotChildren?.length }" :class="{ slot: !slotChildren?.length }"
:data-slot="`插槽(${slotKey}\n 拖拽组件到此处`" :data-slot="`插槽(${slotKey}\n 拖拽组件到此处${drag}`"
> >
<template #item="{ element: innerElement }"> <template #item="{ element: innerElement }">
<div <div
@ -21,10 +22,11 @@
pointerEvents: Object.keys(innerElement.props?.slots || {}).length ? 'auto' : 'none' pointerEvents: Object.keys(innerElement.props?.slots || {}).length ? 'auto' : 'none'
}" }"
> >
<template v-for="(value, slotKey) in innerElement.props?.slots" :key="slotKey" #[slotKey]> <template v-for="(value, key) in innerElement.props?.slots" :key="key" #[key]>
<SlotItem <SlotItem
v-model:children="value.children" v-model:children="value.children"
:slot-key="slotKey" v-model:drag="isDrag"
:slot-key="key"
:config="config" :config="config"
:on-contextmenu-block="onContextmenuBlock" :on-contextmenu-block="onContextmenuBlock"
:select-comp="selectComp" :select-comp="selectComp"
@ -45,7 +47,7 @@
* @update: 2021/5/2 22:36 * @update: 2021/5/2 22:36
*/ */
import { defineComponent, ref } from 'vue' import { defineComponent } from 'vue'
import { useVModel } from '@vueuse/core' import { useVModel } from '@vueuse/core'
import DraggableTransitionGroup from './draggable-transition-group.vue' import DraggableTransitionGroup from './draggable-transition-group.vue'
import CompRender from './comp-render' import CompRender from './comp-render'
@ -59,6 +61,10 @@ export default defineComponent({
type: Object, type: Object,
default: () => ({}) default: () => ({})
}, },
drag: {
type: Boolean,
default: false
},
children: { children: {
type: Array, type: Array,
default: () => [] default: () => []
@ -72,12 +78,10 @@ export default defineComponent({
required: true required: true
} }
}, },
emits: ['update:children', 'on-selected'], emits: ['update:children', 'on-selected', 'update:drag'],
setup(props, { emit }) { setup(props, { emit }) {
const drag = ref(false)
return { return {
drag, isDrag: useVModel(props, 'drag', emit),
slotChildren: useVModel(props, 'children', emit) slotChildren: useVModel(props, 'children', emit)
} }
} }

View File

@ -18,6 +18,7 @@ export interface VisualEditorBlockData {
props: Record<string, any> // 组件的设计属性 props: Record<string, any> // 组件的设计属性
model: Record<string, string> // 绑定的字段 model: Record<string, string> // 绑定的字段
slotName?: string // 组件唯一标识 slotName?: string // 组件唯一标识
animations?: Animation[] // 动画集
[prop: string]: any [prop: string]: any
} }
@ -41,6 +42,14 @@ export interface VisualEditorModelValue {
pages: VisualEditorPages pages: VisualEditorPages
} }
export interface Animation {
label: string // 动画名称
value: string // 动画类名
duration: number // 动画持续时间
delay: number // 动画延迟多久执行
count: number // 动画执行次数
infinite: boolean // 是否无限循环动画
}
export interface VisualEditorComponent { export interface VisualEditorComponent {
key: string // 组件名称 key: string // 组件名称
moduleName: keyof ComponentModules // 模块名称 moduleName: keyof ComponentModules // 模块名称
@ -55,7 +64,7 @@ export interface VisualEditorComponent {
custom: Record<string, any> custom: Record<string, any>
}) => JSX.Element }) => JSX.Element
props?: Record<string, VisualEditorProps> props?: Record<string, VisualEditorProps>
model?: Record<string, string> animations?: Animation[] // 动画集
resize?: { width?: boolean; height?: boolean } resize?: { width?: boolean; height?: boolean }
} }
@ -95,6 +104,7 @@ export function createNewBlock({
} }
return prev return prev
}, {}), }, {}),
animations: [], // 动画集
model: {} model: {}
} }
} }

View File

@ -6,7 +6,7 @@ module.exports = {
'selector-pseudo-class-no-unknown': [ 'selector-pseudo-class-no-unknown': [
true, true,
{ {
ignorePseudoClasses: ['global'] ignorePseudoClasses: ['global', 'deep']
} }
], ],
'selector-pseudo-element-no-unknown': [ 'selector-pseudo-element-no-unknown': [

View File

@ -26,6 +26,6 @@
}, },
"lib": ["esnext", "dom", "dom.iterable", "scripthost"] "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
}, },
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "preview/**/*.vue"],
"exclude": ["dist", "node_modules"] "exclude": ["dist", "node_modules"]
} }

268
yarn.lock
View File

@ -821,13 +821,13 @@
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.3.tgz#2e8e008b1cc3a6ad1dfbec75743c7ffd9b4872a6" resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.3.tgz#2e8e008b1cc3a6ad1dfbec75743c7ffd9b4872a6"
integrity sha512-LlnLpObkGKZ+b7dcpL4T24l13nPSHLjo+6Oc7MbZiKz5PMAUzADfNJ3EKfYIQ0l0969nxf2jp/9vsfnuJ7h6fw== integrity sha512-LlnLpObkGKZ+b7dcpL4T24l13nPSHLjo+6Oc7MbZiKz5PMAUzADfNJ3EKfYIQ0l0969nxf2jp/9vsfnuJ7h6fw==
"@volar/code-gen@^0.25.21": "@volar/code-gen@^0.25.22":
version "0.25.21" version "0.25.22"
resolved "https://registry.yarnpkg.com/@volar/code-gen/-/code-gen-0.25.21.tgz#9bc5e6c1599d750f6eca26267278832038ac9ead" resolved "https://registry.yarnpkg.com/@volar/code-gen/-/code-gen-0.25.22.tgz#405035eb7e19573f630070677fa91553d79a47bc"
integrity sha512-PkBI6puXOjVnP88moD1IrZtpOqoTtqkmMlq9C4vqRVhrHBkTHnFRCvFSgBz52utciMMRAF/wOUP837AI6lt7dA== integrity sha512-CStz1TMxJtEQgXosaOLIVykxQBg5VFvxsvlcrCUum1ZCzpRsXPldS/3OdPOCgkdyE/i9kVzKOvt8DYChKTCPqw==
dependencies: dependencies:
"@volar/shared" "^0.25.21" "@volar/shared" "^0.25.22"
"@volar/source-map" "^0.25.21" "@volar/source-map" "^0.25.22"
"@volar/html2pug@^0.25.4": "@volar/html2pug@^0.25.4":
version "0.25.4" version "0.25.4"
@ -839,27 +839,27 @@
htmlparser2 "^6.1.0" htmlparser2 "^6.1.0"
pug "^3.0.2" pug "^3.0.2"
"@volar/shared@^0.25.21": "@volar/shared@^0.25.22":
version "0.25.21" version "0.25.22"
resolved "https://registry.yarnpkg.com/@volar/shared/-/shared-0.25.21.tgz#654dd817b9a07ef67065929e96f97bcee8dcf118" resolved "https://registry.yarnpkg.com/@volar/shared/-/shared-0.25.22.tgz#0dbf7fcf201b3a0beacc6fd82d407a748729a978"
integrity sha512-XiMLr5MQ443RmgQ9Hziaw2NYQpluGMfZehY9mFWy6CE0T49foPJ65VISIRufthG+yrtiOUc+5XLnw6v449nEcw== integrity sha512-hZQ4dDy0/MgjVONFhs7P2ECDamajwmpSErFYLaLwFClh7DNn6gXYEsawr5kS5zHYs/HaSfSwNQ4sx5Y2MInCZw==
dependencies: dependencies:
upath "^2.0.1" upath "^2.0.1"
vscode-languageserver "^7.1.0-next.4" vscode-languageserver "^7.1.0-next.4"
"@volar/source-map@^0.25.21": "@volar/source-map@^0.25.22":
version "0.25.21" version "0.25.22"
resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-0.25.21.tgz#ce10f21149cb39abcaff9fc822a2b9441be1bc8b" resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-0.25.22.tgz#5150401e1950dd35fb11720f79e59799d3885741"
integrity sha512-NVJMK/2YgN4T4wx02dPFVvn7zTvhiqLH6yIr9hAtFgBetF+gpJWFEVW1rIcbF7WiTnTvVt7PgtHUBat6AXvOUw== integrity sha512-J6xntLQ8I6BMqPBaQZN3JROJPfcFexo/5KecMxGqHkdLC/M/DtVOAp9zkwAXu7XuXA/nF6iGxmL3TYELFRryzw==
dependencies: dependencies:
"@volar/shared" "^0.25.21" "@volar/shared" "^0.25.22"
"@volar/transforms@^0.25.21": "@volar/transforms@^0.25.22":
version "0.25.21" version "0.25.22"
resolved "https://registry.yarnpkg.com/@volar/transforms/-/transforms-0.25.21.tgz#6051b61b630c2c512f81fc06d7311017d8c2f313" resolved "https://registry.yarnpkg.com/@volar/transforms/-/transforms-0.25.22.tgz#7f4c10d63f221f3892e951c857bf828de139a29a"
integrity sha512-hBq/fDLVsD8bkauFM2vBEbZY1W4yOidd2n6c6Y2uQ4VLfTLjb5DlBTVkNXJppsGsXqA1evXnEZbzIaF/Ad6DXQ== integrity sha512-WcQU2MzAsVILITxbt3urNPUbPlOvsdGuChwCNc9OXV1OgBOTJtJ9sQV63pYr+tb7Yl3Ie2S8Q7lNMy8gS1jvLQ==
dependencies: dependencies:
"@volar/shared" "^0.25.21" "@volar/shared" "^0.25.22"
"@vue/babel-helper-vue-transform-on@^1.0.2": "@vue/babel-helper-vue-transform-on@^1.0.2":
version "1.0.2" version "1.0.2"
@ -881,17 +881,6 @@
html-tags "^3.1.0" html-tags "^3.1.0"
svg-tags "^1.0.0" svg-tags "^1.0.0"
"@vue/compiler-core@3.0.11":
version "3.0.11"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.11.tgz#5ef579e46d7b336b8735228758d1c2c505aae69a"
integrity sha512-6sFj6TBac1y2cWCvYCA8YzHJEbsVkX7zdRs/3yK/n1ilvRqcn983XvpBbnN3v4mZ1UiQycTvOiajJmOgN9EVgw==
dependencies:
"@babel/parser" "^7.12.0"
"@babel/types" "^7.12.0"
"@vue/shared" "3.0.11"
estree-walker "^2.0.1"
source-map "^0.6.1"
"@vue/compiler-core@3.1.1": "@vue/compiler-core@3.1.1":
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.1.1.tgz#4f2c5d70eabd454675714cc8bd2b97f6a8efb196" resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.1.1.tgz#4f2c5d70eabd454675714cc8bd2b97f6a8efb196"
@ -903,14 +892,6 @@
estree-walker "^2.0.1" estree-walker "^2.0.1"
source-map "^0.6.1" source-map "^0.6.1"
"@vue/compiler-dom@3.0.11":
version "3.0.11"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.11.tgz#b15fc1c909371fd671746020ba55b5dab4a730ee"
integrity sha512-+3xB50uGeY5Fv9eMKVJs2WSRULfgwaTJsy23OIltKgMrynnIj8hTYY2UL97HCoz78aDw1VDXdrBQ4qepWjnQcw==
dependencies:
"@vue/compiler-core" "3.0.11"
"@vue/shared" "3.0.11"
"@vue/compiler-dom@3.1.1", "@vue/compiler-dom@^3.0.11": "@vue/compiler-dom@3.1.1", "@vue/compiler-dom@^3.0.11":
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.1.1.tgz#ef60d856ac2ede5b2ad5c72a7a68122895e3d652" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.1.1.tgz#ef60d856ac2ede5b2ad5c72a7a68122895e3d652"
@ -919,29 +900,7 @@
"@vue/compiler-core" "3.1.1" "@vue/compiler-core" "3.1.1"
"@vue/shared" "3.1.1" "@vue/shared" "3.1.1"
"@vue/compiler-sfc@3.0.11": "@vue/compiler-sfc@3.1.1", "@vue/compiler-sfc@^3.0.11":
version "3.0.11"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.0.11.tgz#cd8ca2154b88967b521f5ad3b10f5f8b6b665679"
integrity sha512-7fNiZuCecRleiyVGUWNa6pn8fB2fnuJU+3AGjbjl7r1P5wBivfl02H4pG+2aJP5gh2u+0wXov1W38tfWOphsXw==
dependencies:
"@babel/parser" "^7.13.9"
"@babel/types" "^7.13.0"
"@vue/compiler-core" "3.0.11"
"@vue/compiler-dom" "3.0.11"
"@vue/compiler-ssr" "3.0.11"
"@vue/shared" "3.0.11"
consolidate "^0.16.0"
estree-walker "^2.0.1"
hash-sum "^2.0.0"
lru-cache "^5.1.1"
magic-string "^0.25.7"
merge-source-map "^1.1.0"
postcss "^8.1.10"
postcss-modules "^4.0.0"
postcss-selector-parser "^6.0.4"
source-map "^0.6.1"
"@vue/compiler-sfc@^3.0.11":
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.1.1.tgz#d4e4507c013d0b219f0b106b317ec5bb1cde3398" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.1.1.tgz#d4e4507c013d0b219f0b106b317ec5bb1cde3398"
integrity sha512-lSgMsZaYHF+bAgryq5aUqpvyfhu52GJI2/4LoiJCE5uaxc6FCZfxfgqgw/d9ltiZghv+HiISFtmQVAVvlsk+/w== integrity sha512-lSgMsZaYHF+bAgryq5aUqpvyfhu52GJI2/4LoiJCE5uaxc6FCZfxfgqgw/d9ltiZghv+HiISFtmQVAVvlsk+/w==
@ -963,14 +922,6 @@
postcss-selector-parser "^6.0.4" postcss-selector-parser "^6.0.4"
source-map "^0.6.1" source-map "^0.6.1"
"@vue/compiler-ssr@3.0.11":
version "3.0.11"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.0.11.tgz#ac5a05fd1257412fa66079c823d8203b6a889a13"
integrity sha512-66yUGI8SGOpNvOcrQybRIhl2M03PJ+OrDPm78i7tvVln86MHTKhM3ERbALK26F7tXl0RkjX4sZpucCpiKs3MnA==
dependencies:
"@vue/compiler-dom" "3.0.11"
"@vue/shared" "3.0.11"
"@vue/compiler-ssr@3.1.1": "@vue/compiler-ssr@3.1.1":
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.1.1.tgz#1d08b98601397258ed059b75966e0e94a385d770" resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.1.1.tgz#1d08b98601397258ed059b75966e0e94a385d770"
@ -984,42 +935,30 @@
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.14.tgz#6ed2d6f8d66a9256c9ad04bfff08309ba87b9723" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.14.tgz#6ed2d6f8d66a9256c9ad04bfff08309ba87b9723"
integrity sha512-44fPrrN1cqcs6bFkT0C+yxTM6PZXLbR+ESh1U1j8UD22yO04gXvxH62HApMjLbS3WqJO/iCNC+CYT+evPQh2EQ== integrity sha512-44fPrrN1cqcs6bFkT0C+yxTM6PZXLbR+ESh1U1j8UD22yO04gXvxH62HApMjLbS3WqJO/iCNC+CYT+evPQh2EQ==
"@vue/reactivity@3.0.11": "@vue/reactivity@3.1.1", "@vue/reactivity@^3.0.11":
version "3.0.11"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.0.11.tgz#07b588349fd05626b17f3500cbef7d4bdb4dbd0b"
integrity sha512-SKM3YKxtXHBPMf7yufXeBhCZ4XZDKP9/iXeQSC8bBO3ivBuzAi4aZi0bNoeE2IF2iGfP/AHEt1OU4ARj4ao/Xw==
dependencies:
"@vue/shared" "3.0.11"
"@vue/reactivity@^3.0.11":
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.1.1.tgz#9c02fd146a6c3b03e7d658b7cf76f4b69b0f98c8" resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.1.1.tgz#9c02fd146a6c3b03e7d658b7cf76f4b69b0f98c8"
integrity sha512-DsH5woNVCcPK1M0RRYVgJEU1GJDU2ASOKpAqW3ppHk+XjoFLCbqc/26RTCgTpJYd9z8VN+79Q1u7/QqgQPbuLQ== integrity sha512-DsH5woNVCcPK1M0RRYVgJEU1GJDU2ASOKpAqW3ppHk+XjoFLCbqc/26RTCgTpJYd9z8VN+79Q1u7/QqgQPbuLQ==
dependencies: dependencies:
"@vue/shared" "3.1.1" "@vue/shared" "3.1.1"
"@vue/runtime-core@3.0.11": "@vue/runtime-core@3.1.1":
version "3.0.11" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.11.tgz#c52dfc6acf3215493623552c1c2919080c562e44" resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.1.1.tgz#542110c09a643d7d80646a2f071aff6b324c4158"
integrity sha512-87XPNwHfz9JkmOlayBeCCfMh9PT2NBnv795DSbi//C/RaAnc/bGZgECjmkD7oXJ526BZbgk9QZBPdFT8KMxkAg== integrity sha512-GboqR02txOtkd9F3Ysd8ltPL68vTCqIx2p/J52/gFtpgb5FG9hvOAPEwFUqxeEJRu7ResvQnmdOHiEycGPCLhQ==
dependencies: dependencies:
"@vue/reactivity" "3.0.11" "@vue/reactivity" "3.1.1"
"@vue/shared" "3.0.11" "@vue/shared" "3.1.1"
"@vue/runtime-dom@3.0.11": "@vue/runtime-dom@3.1.1":
version "3.0.11" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.0.11.tgz#7a552df21907942721feb6961c418e222a699337" resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.1.1.tgz#5539bbce132d29f6445b4964cb7b4164a89a5ce6"
integrity sha512-jm3FVQESY3y2hKZ2wlkcmFDDyqaPyU3p1IdAX92zTNeCH7I8zZ37PtlE1b9NlCtzV53WjB4TZAYh9yDCMIEumA== integrity sha512-o57n/199e/BBAmLRMSXmD2r12Old/h/gf6BgL0RON1NT2pwm6MWaMY4Ul55eyq+FsDILz4jR/UgoPQ9vYB8xcw==
dependencies: dependencies:
"@vue/runtime-core" "3.0.11" "@vue/runtime-core" "3.1.1"
"@vue/shared" "3.0.11" "@vue/shared" "3.1.1"
csstype "^2.6.8" csstype "^2.6.8"
"@vue/shared@3.0.11":
version "3.0.11"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77"
integrity sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA==
"@vue/shared@3.1.1", "@vue/shared@^3.0.11": "@vue/shared@3.1.1", "@vue/shared@^3.0.11":
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.1.1.tgz#2287cfc3dc20e5b20aeb65c2c3a56533bdca801c" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.1.1.tgz#2287cfc3dc20e5b20aeb65c2c3a56533bdca801c"
@ -1121,6 +1060,11 @@ ajv@^8.0.1:
require-from-string "^2.0.2" require-from-string "^2.0.2"
uri-js "^4.2.2" uri-js "^4.2.2"
animate.css@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075"
integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
ansi-align@^3.0.0: ansi-align@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
@ -1494,9 +1438,9 @@ camelcase@^6.0.0:
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219:
version "1.0.30001236" version "1.0.30001237"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz#4b7783661515b8e7151fc6376cfd97f0e427b9e5"
integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ== integrity sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==
capital-case@^1.0.4: capital-case@^1.0.4:
version "1.0.4" version "1.0.4"
@ -2190,10 +2134,10 @@ electron-to-chromium@^1.3.723:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"
integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==
element-plus@^1.0.2-beta.46: element-plus@^1.0.2-beta.48:
version "1.0.2-beta.46" version "1.0.2-beta.48"
resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-1.0.2-beta.46.tgz#2423dcc56ce4285d7f2365ebd5622b8b3c7d053b" resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-1.0.2-beta.48.tgz#8da99decd397b9975cd894d389096d2ed58c699e"
integrity sha512-GevU3xNiIp+p9ZGnGRtFaJPnofsMXKwqV+cTXC266vUWw08Hbt1ronTsss/eJJ1OIHLoaFq4febv1MMTBSSjlQ== integrity sha512-BKLjkZqZCJIYxUgwEj4ojaU0iEXHf6LPma100rMQPXZ/AUEVx3yjuo3fmTV54CTsIG+V2W1VCEnD7jF2iw+qrQ==
dependencies: dependencies:
"@popperjs/core" "^2.4.4" "@popperjs/core" "^2.4.4"
"@types/lodash" "^4.14.161" "@types/lodash" "^4.14.161"
@ -2380,10 +2324,10 @@ eslint-plugin-prettier@^3.4.0:
dependencies: dependencies:
prettier-linter-helpers "^1.0.0" prettier-linter-helpers "^1.0.0"
eslint-plugin-vue@^7.10.0: eslint-plugin-vue@^7.11.0:
version "7.10.0" version "7.11.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.10.0.tgz#251749aa99e089e085275f011042c6e74189f89a" resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.11.0.tgz#c19b098899b7e3cd692beffbbe73611064ef1ea6"
integrity sha512-xdr6e4t/L2moRAeEQ9HKgge/hFq+w9v5Dj+BA54nTAzSFdUyKLiSOdZaRQjCHMY0Pk2WaQBFH9QiWG60xiC+6A== integrity sha512-Qwo8wilqnOXnG9B5auEiTstyaHefyhHd5lEhhxemwXoWsAxIW2yppzuVudowC5n+qn1nMLNV9TANkTthBK7Waw==
dependencies: dependencies:
eslint-utils "^2.1.0" eslint-utils "^2.1.0"
natural-compare "^1.4.0" natural-compare "^1.4.0"
@ -4196,10 +4140,10 @@ mkdirp@^0.5.1:
dependencies: dependencies:
minimist "^1.2.5" minimist "^1.2.5"
monaco-editor@^0.24.0: monaco-editor@^0.25.0:
version "0.24.0" version "0.25.0"
resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.24.0.tgz#990b55096bcc95d08d8d28e55264c6eb17707269" resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.25.0.tgz#4cbbe25adb4661a1673e4893cdc13dfa406b665e"
integrity sha512-o1f0Lz6ABFNTtnEqqqvlY9qzNx24rQZx1RgYNQ8SkWkE+Ka63keHH/RqxQ4QhN4fs/UYOnvAtEUZsPrzccH++A== integrity sha512-Lzk9CGIvFXly1J0s5t8SXk1+UleahGqcoHnSoPe2OBSrKhWLbR7Nvk2QQwaEzJQi4Wtbu5gou2qat1CAbvB82A==
mri@^1.1.5: mri@^1.1.5:
version "1.1.6" version "1.1.6"
@ -4809,18 +4753,18 @@ postcss-value-parser@^4.1.0:
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6: postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6:
version "7.0.35" version "7.0.36"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
dependencies: dependencies:
chalk "^2.4.2" chalk "^2.4.2"
source-map "^0.6.1" source-map "^0.6.1"
supports-color "^6.1.0" supports-color "^6.1.0"
postcss@^8.1.10, postcss@^8.3.0: postcss@^8.1.10, postcss@^8.3.0:
version "8.3.1" version "8.3.2"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.1.tgz#71f380151c227f83b898294a46481f689f86b70a" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.2.tgz#ed3ec489f5428af5740cd6effcc216b4d455ee64"
integrity sha512-9qH0MGjsSm+fjxOi3GnwViL1otfi7qkj+l/WX5gcRGmZNGsIcqc+A5fBkE6PUobEQK4APqYVaES+B3Uti98TCw== integrity sha512-y1FK/AWdZlBF5lusS5j5l4/vF67+vQZt1SXPVJ32y1kRGDQyrs1zk32hG1cInRTu14P0V+orPz+ifwW/7rR4bg==
dependencies: dependencies:
colorette "^1.2.2" colorette "^1.2.2"
nanoid "^3.1.23" nanoid "^3.1.23"
@ -5323,9 +5267,9 @@ rimraf@~2.6.2:
glob "^7.1.3" glob "^7.1.3"
rollup@^2.38.5: rollup@^2.38.5:
version "2.51.1" version "2.51.2"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.51.1.tgz#87bcd4095fe79b14c9bec0edc7ffa44e4827f793" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.51.2.tgz#6de71e28c833089a0bd745a09671a3e2b92af6b7"
integrity sha512-8xfDbAtBleXotb6qKEHWuo/jkn94a9dVqGc7Rwl3sqspCVlnCfbRek7ldhCARSi7h32H0xR4QThm1t9zHN+3uw== integrity sha512-ReV2eGEadA7hmXSzjxdDKs10neqH2QURf2RxJ6ayAlq93ugy6qIvXMmbc5cWMGCDh1h5T4thuWO1e2VNbMq8FA==
optionalDependencies: optionalDependencies:
fsevents "~2.3.1" fsevents "~2.3.1"
@ -5994,9 +5938,9 @@ tslib@^1.8.1, tslib@^1.9.0:
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.0.3: tslib@^2.0.3:
version "2.2.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
tsutils@^3.21.0: tsutils@^3.21.0:
version "3.21.0" version "3.21.0"
@ -6397,10 +6341,10 @@ vfile@^4.0.0, vfile@^4.0.1:
unist-util-stringify-position "^2.0.0" unist-util-stringify-position "^2.0.0"
vfile-message "^2.0.0" vfile-message "^2.0.0"
vite-plugin-components@^0.10.4: vite-plugin-components@^0.11.1:
version "0.10.4" version "0.11.1"
resolved "https://registry.yarnpkg.com/vite-plugin-components/-/vite-plugin-components-0.10.4.tgz#55a2757433833a9481765319d76d69653ba9ba57" resolved "https://registry.yarnpkg.com/vite-plugin-components/-/vite-plugin-components-0.11.1.tgz#fc1f38c4087ef8551767a1fa92cbff3edd191f3b"
integrity sha512-QOGd+7IE4EonPGMlxmudj0HadVxKzCdvaZmZcRgap4gE8F55sAIztuAQN4IHACEKuappWsB6XpMAY1iVrJUqog== integrity sha512-rApT5gc8hLgIgO4+8xtlt81UD76mUvsTtx44UZViJJGYFr8ofEALlgRn5Fwai1MHbOlWWdOfPMvMa3ooC52COQ==
dependencies: dependencies:
chokidar "^3.5.1" chokidar "^3.5.1"
debug "^4.3.2" debug "^4.3.2"
@ -6469,9 +6413,9 @@ vscode-emmet-helper@^2.6.4:
vscode-uri "^2.1.2" vscode-uri "^2.1.2"
vscode-html-languageservice@^4.0.4: vscode-html-languageservice@^4.0.4:
version "4.0.4" version "4.0.5"
resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-4.0.4.tgz#f171f663e83037c8a5c5f4552a6b4771c1a9f017" resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-4.0.5.tgz#4f3657200a0613f2b83d47542c80ca0328868885"
integrity sha512-WHXpLfj5NlCAgppDa6n5gQjW1YTTt72MVs0lkkuGQwTb5Sfdq8UhMjLDT82MuzqwV0QvmSBWlUbreGodzXleLg== integrity sha512-9ZKp7nfR6ObUA+K65GfgDPdOmXaPH8MOWxE2RwWF3tVnVMq2w+COKjDNHMvv+uNxtmaRT7/skls7CD/HzrW99w==
dependencies: dependencies:
vscode-languageserver-textdocument "^1.0.1" vscode-languageserver-textdocument "^1.0.1"
vscode-languageserver-types "^3.16.0" vscode-languageserver-types "^3.16.0"
@ -6535,26 +6479,26 @@ vscode-nls@^5.0.0:
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
vscode-pug-languageservice@^0.25.21: vscode-pug-languageservice@^0.25.22:
version "0.25.21" version "0.25.22"
resolved "https://registry.yarnpkg.com/vscode-pug-languageservice/-/vscode-pug-languageservice-0.25.21.tgz#ee2e6b63351e73065f6126fb9dee94ac4f80c2d3" resolved "https://registry.yarnpkg.com/vscode-pug-languageservice/-/vscode-pug-languageservice-0.25.22.tgz#4920f26a395e835e10e99861dd3b9481161e8194"
integrity sha512-ssO/PM/oCUOwFQ2cjP3YerzuyimTO4VSaSHlOPjlMoneZWwjI4kjA/s59Pg4vrngnsBJjopbzkgfnUsxnVf5mg== integrity sha512-1v1ljcqMuyaITCbby3eMsMiAVJXtVxGu+oMwJ8STOeDsMgkOTv3IrfoZjwsps96Qj3pf0d8XJPzSZkGoTrBiOA==
dependencies: dependencies:
"@volar/code-gen" "^0.25.21" "@volar/code-gen" "^0.25.22"
"@volar/shared" "^0.25.21" "@volar/shared" "^0.25.22"
"@volar/source-map" "^0.25.21" "@volar/source-map" "^0.25.22"
"@volar/transforms" "^0.25.21" "@volar/transforms" "^0.25.22"
pug-beautify "^0.1.1" pug-beautify "^0.1.1"
pug-lexer "^5.0.1" pug-lexer "^5.0.1"
pug-parser "^6.0.0" pug-parser "^6.0.0"
vscode-languageserver "^7.1.0-next.4" vscode-languageserver "^7.1.0-next.4"
vscode-typescript-languageservice@^0.25.21: vscode-typescript-languageservice@^0.25.22:
version "0.25.21" version "0.25.22"
resolved "https://registry.yarnpkg.com/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.25.21.tgz#6b3d8c7cee16f57da4cb8846124d60bbf1e6cd4b" resolved "https://registry.yarnpkg.com/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.25.22.tgz#ac642a96e71fbbe8ddef27965b56fc15dd8eac14"
integrity sha512-MxgTLgpYwfXPjSZuNt1YzhkWOdJMSSoHndWLc5J8JntDoKmHME2Y1Dx+9HT4PxcquQ3KySwxxHLOll+U4UqbpA== integrity sha512-Fb6i9RsAOTZUqtkQiOv6THkBofWedPtxXiXGGkoIEkkgEoP16wQtw9ctYGsazOO127kjgYLRN8TdsudvqcFtEw==
dependencies: dependencies:
"@volar/shared" "^0.25.21" "@volar/shared" "^0.25.22"
typescript-vscode-sh-plugin "^0.6.14" typescript-vscode-sh-plugin "^0.6.14"
upath "^2.0.1" upath "^2.0.1"
vscode-languageserver "^7.1.0-next.4" vscode-languageserver "^7.1.0-next.4"
@ -6571,16 +6515,16 @@ vscode-uri@^3.0.2:
integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==
vscode-vue-languageservice@^0.25.17: vscode-vue-languageservice@^0.25.17:
version "0.25.21" version "0.25.22"
resolved "https://registry.yarnpkg.com/vscode-vue-languageservice/-/vscode-vue-languageservice-0.25.21.tgz#3c29fd46edcf2bb5d5ed063f1b3e6b824dfcebfa" resolved "https://registry.yarnpkg.com/vscode-vue-languageservice/-/vscode-vue-languageservice-0.25.22.tgz#e7ac55bbf8dc2d4529c0603e833a59afaa1ad49b"
integrity sha512-guemXbGMdZwje8yGJZ9mKn2WNhTDtvx52L82mPLDK3Cy4LvG7Bg89fVQlSlHvTSI2srZmFImAYEoudmX5u6qyQ== integrity sha512-g9AipU1T7AON/rAJ5+pyYmWZD/V+0CTSqRSPMaK/eRaYxLNfrXXLgankoNhqP5XyHFQsYbxMJ6mAg3d0Vy3WZw==
dependencies: dependencies:
"@starptech/prettyhtml" "^0.10.0" "@starptech/prettyhtml" "^0.10.0"
"@volar/code-gen" "^0.25.21" "@volar/code-gen" "^0.25.22"
"@volar/html2pug" "^0.25.4" "@volar/html2pug" "^0.25.4"
"@volar/shared" "^0.25.21" "@volar/shared" "^0.25.22"
"@volar/source-map" "^0.25.21" "@volar/source-map" "^0.25.22"
"@volar/transforms" "^0.25.21" "@volar/transforms" "^0.25.22"
"@vue/compiler-dom" "^3.0.11" "@vue/compiler-dom" "^3.0.11"
"@vue/compiler-sfc" "^3.0.11" "@vue/compiler-sfc" "^3.0.11"
"@vue/reactivity" "^3.0.11" "@vue/reactivity" "^3.0.11"
@ -6595,8 +6539,8 @@ vscode-vue-languageservice@^0.25.17:
vscode-json-languageservice "^4.1.4" vscode-json-languageservice "^4.1.4"
vscode-languageserver "^7.1.0-next.4" vscode-languageserver "^7.1.0-next.4"
vscode-languageserver-textdocument "^1.0.1" vscode-languageserver-textdocument "^1.0.1"
vscode-pug-languageservice "^0.25.21" vscode-pug-languageservice "^0.25.22"
vscode-typescript-languageservice "^0.25.21" vscode-typescript-languageservice "^0.25.22"
vue-demi@*: vue-demi@*:
version "0.9.1" version "0.9.1"
@ -6629,19 +6573,19 @@ vue-tsc@^0.1.7:
dependencies: dependencies:
vscode-vue-languageservice "^0.25.17" vscode-vue-languageservice "^0.25.17"
vue@3.0.11: vue@3.1.1:
version "3.0.11" version "3.1.1"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.0.11.tgz#c82f9594cbf4dcc869241d4c8dd3e08d9a8f4b5f" resolved "https://registry.yarnpkg.com/vue/-/vue-3.1.1.tgz#9ad655758a0fa6c0dee5b3d2431d3912a9b381aa"
integrity sha512-3/eUi4InQz8MPzruHYSTQPxtM3LdZ1/S/BvaU021zBnZi0laRUyH6pfuE4wtUeLvI8wmUNwj5wrZFvbHUXL9dw== integrity sha512-j9fj3PNPMxo2eqOKYjMuss9XBS8ZtmczLY3kPvjcp9d3DbhyNqLYbaMQH18+1pDIzzVvQCQBvIf774LsjjqSKA==
dependencies: dependencies:
"@vue/compiler-dom" "3.0.11" "@vue/compiler-dom" "3.1.1"
"@vue/runtime-dom" "3.0.11" "@vue/runtime-dom" "3.1.1"
"@vue/shared" "3.0.11" "@vue/shared" "3.1.1"
vuedraggable@^4.0.1: vuedraggable@^4.0.3:
version "4.0.1" version "4.0.3"
resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-4.0.1.tgz#3bcaab0808b7944030b7d9a29f9a63d59dfa12c5" resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-4.0.3.tgz#98832a3562d44c73bbe4e205cc2dafce07b6ca14"
integrity sha512-7qN5jhB1SLfx5P+HCm3JUW+pvgA1bSLgYLSVOeLWBDH9z+zbaEH0OlyZBVMLOxFR+JUHJjwDD0oy7T4r9TEgDA== integrity sha512-NkJYk+UyxgEoSQcgvVZtqY6dYpdXkBHS8aq6CqoJAfXVM9ZRYT0WPdlBbTttG4nCwllU2M5JGGgo9Drt/L0a7w==
dependencies: dependencies:
sortablejs "1.10.2" sortablejs "1.10.2"