commit d2946b256016255562beefdc9487a6ff104ae295
Author: bqy_fe <1743369777@qq.com>
Date: Tue May 4 21:54:05 2021 +0800
first commit
diff --git a/.cz-config.js b/.cz-config.js
new file mode 100644
index 0000000..e11895c
--- /dev/null
+++ b/.cz-config.js
@@ -0,0 +1,92 @@
+module.exports = {
+ // type 类型(定义之后,可通过上下键选择)
+ types: [
+ { value: 'feat', name: 'feat: 新增功能' },
+ { value: 'fix', name: 'fix: 修复 bug' },
+ { value: 'docs', name: 'docs: 文档变更' },
+ {
+ value: 'style',
+ name: 'style: 代码格式(不影响功能,例如空格、分号等格式修正)'
+ },
+ {
+ value: 'refactor',
+ name: 'refactor: 代码重构(不包括 bug 修复、功能新增)'
+ },
+ { value: 'perf', name: 'perf: 性能优化' },
+ { value: 'test', name: 'test: 添加、修改测试用例' },
+ {
+ value: 'build',
+ name:
+ 'build: 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)'
+ },
+ { value: 'ci', name: 'ci: 修改 CI 配置、脚本' },
+ {
+ value: 'chore',
+ name: 'chore: 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)'
+ },
+ { value: 'revert', name: 'revert: 回滚 commit' }
+ ],
+
+ // scope 类型(定义之后,可通过上下键选择)
+ scopes: [
+ ['components', '组件相关'],
+ ['hooks', 'hook 相关'],
+ ['utils', 'utils 相关'],
+ ['element-ui', '对 element-ui 的调整'],
+ ['styles', '样式相关'],
+ ['deps', '项目依赖'],
+ ['auth', '对 auth 修改'],
+ ['other', '其他修改'],
+ // 如果选择 custom,后面会让你再输入一个自定义的 scope。也可以不设置此项,把后面的 allowCustomScopes 设置为 true
+ ['custom', '以上都不是?我要自定义']
+ ].map(([value, description]) => {
+ return {
+ value,
+ name: `${value.padEnd(30)} (${description})`
+ }
+ }),
+
+ // 是否允许自定义填写 scope,在 scope 选择的时候,会有 empty 和 custom 可以选择。
+ // allowCustomScopes: true,
+
+ // allowTicketNumber: false,
+ // isTicketNumberRequired: false,
+ // ticketNumberPrefix: 'TICKET-',
+ // ticketNumberRegExp: '\\d{1,5}',
+
+ // 针对每一个 type 去定义对应的 scopes,例如 fix
+ /*
+ scopeOverrides: {
+ fix: [
+ { name: 'merge' },
+ { name: 'style' },
+ { name: 'e2eTest' },
+ { name: 'unitTest' }
+ ]
+ },
+ */
+
+ // 交互提示信息
+ messages: {
+ type: '确保本次提交遵循 Angular 规范!\n选择你要提交的类型:',
+ scope: '\n选择一个 scope(可选):',
+ // 选择 scope: custom 时会出下面的提示
+ customScope: '请输入自定义的 scope:',
+ subject: '填写简短精炼的变更描述:\n',
+ body: '填写更加详细的变更描述(可选)。使用 "|" 换行:\n',
+ breaking: '列举非兼容性重大的变更(可选):\n',
+ footer: '列举出所有变更的 ISSUES CLOSED(可选)。 例如: #31, #34:\n',
+ confirmCommit: '确认提交?'
+ },
+
+ // 设置只有 type 选择了 feat 或 fix,才询问 breaking message
+ allowBreakingChanges: ['feat', 'fix'],
+
+ // 跳过要询问的步骤
+ // skipQuestions: ['body', 'footer'],
+
+ subjectLimit: 100, // subject 限制长度
+ breaklineChar: '|' // 换行符,支持 body 和 footer
+ // footerPrefix : 'ISSUES CLOSED:'
+ // askForBreakingChangeFirst : true,
+}
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..6741efc
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,16 @@
+# Editor configuration, see http://editorconfig.org
+
+# 表示最顶层的 EditorConfig 配置文件
+root = true
+
+[*] # 表示所有文件适用
+charset = utf-8 # 设置文件字符集为 utf-8
+indent_style = space # 缩进风格(tab | space)
+indent_size = 2 # 缩进大小
+end_of_line = lf # 控制换行类型(lf | cr | crlf)
+trim_trailing_whitespace = true # 去除行首的任意空白字符
+insert_final_newline = true # 始终在文件末尾插入一个新行
+
+[*.md] # 表示仅 md 文件适用以下规则
+max_line_length = off
+trim_trailing_whitespace = false
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..cfe99b3
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,10 @@
+# 只在开发模式中被载入
+
+# 网站前缀
+VITE_BASE_URL = /
+
+# 是否删除console
+VITE_DROP_CONSOLE = true
+
+# API
+VITE_APP_API_URL = http://29135jo738.zicp.vip/api/v1
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000..823d5d5
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,10 @@
+# 只在生产模式中被载入
+
+# 网站前缀
+VITE_BASE_URL = /test
+
+# 是否删除console
+VITE_DROP_CONSOLE = true
+
+# API
+VITE_APP_API_URL = http://29135jo738.zicp.vip/api/v1
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..348631b
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,15 @@
+
+*.sh
+node_modules
+*.md
+*.woff
+*.ttf
+.vscode
+.idea
+dist
+/public
+/docs
+.husky
+.local
+/bin
+Dockerfile
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..999fffb
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,60 @@
+module.exports = {
+ root: true,
+ env: {
+ browser: true,
+ node: true,
+ es6: true
+ },
+ parser: 'vue-eslint-parser',
+ parserOptions: {
+ parser: '@typescript-eslint/parser',
+ ecmaVersion: 2020,
+ sourceType: 'module',
+ jsxPragma: 'React',
+ ecmaFeatures: {
+ jsx: true
+ }
+ },
+ extends: [
+ 'plugin:vue/vue3-recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'prettier',
+ 'plugin:prettier/recommended'
+ ],
+ rules: {
+ 'vue/require-default-prop': 'off',
+
+ '@typescript-eslint/ban-ts-comment': 'off',
+ '@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/ban-types': 'off',
+ '@typescript-eslint/no-non-null-assertion': 'off',
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
+ '@typescript-eslint/no-unused-vars': [
+ 'error',
+ {
+ argsIgnorePattern: '^_',
+ varsIgnorePattern: '^_'
+ }
+ ],
+ 'no-unused-vars': [
+ 'error',
+ {
+ argsIgnorePattern: '^_',
+ varsIgnorePattern: '^_'
+ }
+ ],
+ 'vue/html-self-closing': [
+ 'error',
+ {
+ html: {
+ void: 'always',
+ normal: 'never',
+ component: 'always'
+ },
+ svg: 'always',
+ math: 'always'
+ }
+ ]
+ },
+ settings: {}
+}
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..f964a33
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,29 @@
+name: deploy
+
+on:
+ push:
+ branches: [main]
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Setup Node.js v14.x
+ uses: actions/setup-node@v1
+ with:
+ node-version: "14.x"
+
+ - name: Install
+ run: npm install
+
+ - name: Build
+ run: npm run build
+
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ publish_dir: ./dist
+ personal_token: ${{ secrets.PERSONAL_TOKEN }}
+ commit_message: Update ghPages
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..205ec07
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,47 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/dist
+/dist-ssr
+/tmp
+/out-tsc
+
+# dependencies
+/node_modules
+*.local
+# yarn.lock
+# package-lock.json
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+# !.vscode/settings.json
+# !.vscode/tasks.json
+# !.vscode/launch.json
+# !.vscode/extensions.json
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage
+/libpeerconnection.log
+npm-debug.log
+testem.log
+/typings
+
+# e2e
+/e2e/src/*.js
+/e2e/src/*.map
+/cypress/screenshots
+
+# System Files
+.DS_Store
+Thumbs.db
diff --git a/.husky/.gitignore b/.husky/.gitignore
new file mode 100644
index 0000000..31354ec
--- /dev/null
+++ b/.husky/.gitignore
@@ -0,0 +1 @@
+_
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100644
index 0000000..617efbd
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1,4 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+npx --no-install commitlint --edit
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 0000000..36af219
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,4 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+npx lint-staged
diff --git a/.husky/pre-push b/.husky/pre-push
new file mode 100644
index 0000000..3aa50b6
--- /dev/null
+++ b/.husky/pre-push
@@ -0,0 +1,9 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+npm run test
+
+
+
+
+
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..f7e39e6
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,9 @@
+/dist/*
+.local
+.output.js
+/node_modules/**
+
+**/*.svg
+**/*.sh
+
+/public/*
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..c505514
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 buqiyuan
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..189e65a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,41 @@
+# Vite2.x + Vue3.x + TypeScript H5低代码平台
+
+## 技术栈
+
+- 编程语言:[TypeScript 4.x](https://www.typescriptlang.org/zh/) + [JavaScript](https://www.javascript.com/)
+- 构建工具:[Vite 2.x](https://cn.vitejs.dev/)
+- 前端框架:[Vue 3.x](https://v3.cn.vuejs.org/)
+- 路由工具:[Vue Router 4.x](https://next.router.vuejs.org/zh/index.html)
+- 状态管理:[Vuex 4.x](https://next.vuex.vuejs.org/)
+- PC端UI 框架:[Element Plus](https://element-plus.org/#/zh-CN)
+- H5端UI 框架:[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/)
+- HTTP 工具:[Axios](https://axios-http.com/)
+- 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)
+- 提交规范:[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/)
+- 自动部署:[GitHub Actions](https://docs.github.com/cn/actions/learn-github-actions)
+
+## 快速开始
+
+### 安装依赖
+
+```sh
+npm install
+# or
+yarn add
+```
+
+### 启动项目
+
+```sh
+npm run dev
+```
+
+### 项目打包
+
+```sh
+npm run build
+```
+
diff --git a/commitlint.config.js b/commitlint.config.js
new file mode 100644
index 0000000..4fedde6
--- /dev/null
+++ b/commitlint.config.js
@@ -0,0 +1 @@
+module.exports = { extends: ['@commitlint/config-conventional'] }
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..11603f8
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..5e694f7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "vite-vue3-lowcode",
+ "version": "0.0.1",
+ "private": false,
+ "description": "A Vite2.x + Vue3 + TypeScript LowCode",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "build-tsc": "vue-tsc --noEmit && vite build",
+ "serve": "vite preview",
+ "format": "prettier --write ./src",
+ "lint": "eslint ./src --ext .vue,.js,.ts,.tsx",
+ "lint-fix": "eslint --fix ./src --ext .vue,.js,.ts,.tsx",
+ "prepare": "husky install"
+ },
+ "dependencies": {
+ "@vant/touch-emulator": "^1.2.0",
+ "@vueuse/core": "^4.9.1",
+ "axios": "^0.21.1",
+ "dexie": "^3.0.3",
+ "element-plus": "^1.0.2-beta.41",
+ "lodash": "^4.17.21",
+ "monaco-editor": "^0.23.0",
+ "normalize.css": "^8.0.1",
+ "vant": "^3.0.16",
+ "vue": "^3.0.11",
+ "vue-router": "^4.0.6",
+ "vuedraggable": "^4.0.1",
+ "vuex": "^4.0.0"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^12.1.1",
+ "@commitlint/config-conventional": "^12.1.1",
+ "@types/node": "^14.14.41",
+ "@typescript-eslint/eslint-plugin": "^4.21.0",
+ "@typescript-eslint/parser": "^4.21.0",
+ "@vitejs/plugin-vue": "^1.2.1",
+ "@vitejs/plugin-vue-jsx": "^1.1.3",
+ "@vue/compiler-sfc": "^3.0.11",
+ "commitizen": "^4.2.3",
+ "cz-conventional-changelog": "^3.3.0",
+ "cz-customizable": "^6.3.0",
+ "eslint": "^7.24.0",
+ "eslint-config-prettier": "^8.1.0",
+ "eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-prettier": "^3.3.1",
+ "eslint-plugin-vue": "^7.8.0",
+ "husky": "^6.0.0",
+ "lint-staged": "^10.5.4",
+ "prettier": "^2.2.1",
+ "sass": "^1.32.10",
+ "typescript": "^4.2.4",
+ "vite": "^2.2.3",
+ "vite-plugin-components": "^0.8.4",
+ "vite-plugin-style-import": "^0.10.0",
+ "vite-plugin-windicss": "^0.14.6",
+ "vue-eslint-parser": "^7.6.0",
+ "vue-tsc": "^0.0.25",
+ "windicss": "^2.5.14"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/buqiyuan/vite-vue3-lowcode.git"
+ },
+ "keywords": [
+ "Vite",
+ "Vue3",
+ "TypeScript",
+ "LowCode"
+ ],
+ "author": "buqiyuan",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/buqiyuan/vite-vue3-lowcode/issues"
+ },
+ "homepage": "https://github.com/buqiyuan/vite-vue3-lowcode#readme",
+ "lint-staged": {
+ "*.{vue,js,ts,tsx}": "eslint --fix"
+ },
+ "config": {
+ "commitizen": {
+ "path": "./node_modules/cz-customizable"
+ }
+ }
+}
diff --git a/prettier.config.js b/prettier.config.js
new file mode 100644
index 0000000..41b7177
--- /dev/null
+++ b/prettier.config.js
@@ -0,0 +1,9 @@
+module.exports = {
+ useTabs: false,
+ tabWidth: 2,
+ printWidth: 100,
+ singleQuote: true,
+ trailingComma: 'none',
+ bracketSpacing: true,
+ semi: false
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..df36fcf
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..717394a
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000..3ac3627
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/common/types/index.ts b/src/common/types/index.ts
new file mode 100644
index 0000000..2ce7c25
--- /dev/null
+++ b/src/common/types/index.ts
@@ -0,0 +1,5 @@
+export interface NavItem {
+ path: string
+ name: string
+ isActive: boolean
+}
diff --git a/src/hooks/useGlobalProperties.ts b/src/hooks/useGlobalProperties.ts
new file mode 100644
index 0000000..4c5e3bb
--- /dev/null
+++ b/src/hooks/useGlobalProperties.ts
@@ -0,0 +1,27 @@
+/**
+ * @name: useGlobalProperties
+ * @author: 卜启缘
+ * @date: 2021/5/3 21:13
+ * @description:useGlobalProperties
+ * @update: 2021/5/3 21:13
+ */
+import { getCurrentInstance } from 'vue'
+import { RouteLocationNormalizedLoaded, Router } from 'vue-router'
+
+interface GlobalProperties {
+ $$refs: any
+ $route: RouteLocationNormalizedLoaded
+ $router: Router
+}
+
+export const useGlobalProperties = () => {
+ const globalProperties = getCurrentInstance()!.appContext.config
+ .globalProperties as GlobalProperties
+
+ const registerRef = (el, _vid: string) => el && (globalProperties.$$refs[_vid] = el)
+
+ return {
+ globalProperties,
+ registerRef
+ }
+}
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..38a2c35
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,22 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+
+import './plugins/element-plus'
+import './plugins/vant'
+
+import 'normalize.css'
+import 'virtual:windi.css'
+import 'virtual:windi-devtools'
+
+import router from './router/'
+import store from './store/'
+
+const app = createApp(App)
+
+app.config.globalProperties.$$refs = {}
+
+// if (import.meta.env.DEV) {
+window.$$refs = app.config.globalProperties.$$refs
+// }
+
+app.use(router).use(store).mount('#app')
diff --git a/src/packages/base-widgets/button/index.tsx b/src/packages/base-widgets/button/index.tsx
new file mode 100644
index 0000000..9bcfece
--- /dev/null
+++ b/src/packages/base-widgets/button/index.tsx
@@ -0,0 +1,137 @@
+import { Button } from 'vant'
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+
+export default {
+ key: 'button',
+ moduleName: 'baseWidgets',
+ label: '按钮',
+ preview: () => ,
+ render: ({ props, block, size }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+
+ )
+ },
+ resize: {
+ height: true,
+ width: true
+ },
+ props: {
+ text: createEditorInputProp({ label: '按钮文字', defaultValue: '按钮' }),
+ type: createEditorSelectProp({
+ label: '按钮类型',
+ options: [
+ {
+ label: '主要按钮',
+ val: 'primary'
+ },
+ {
+ label: '成功按钮',
+ val: 'success'
+ },
+ {
+ label: '默认按钮',
+ val: 'default'
+ },
+ {
+ label: '警告按钮',
+ val: 'warning'
+ },
+ {
+ label: '危险按钮',
+ val: 'danger'
+ }
+ ],
+ defaultValue: 'default'
+ }),
+ size: createEditorSelectProp({
+ label: '按钮尺寸',
+ options: [
+ {
+ label: '大型',
+ val: 'large'
+ },
+ {
+ label: '普通',
+ val: 'normal'
+ },
+ {
+ label: '小型',
+ val: 'small'
+ },
+ {
+ label: '迷你',
+ val: 'mini'
+ }
+ ],
+ defaultValue: 'normal'
+ }),
+ 'native-type': createEditorSelectProp({
+ label: '原生button的type属性',
+ options: [
+ { label: '普通button', val: 'button' },
+ {
+ label: '表单提交按钮',
+ val: 'submit'
+ }
+ ],
+ defaultValue: 'button'
+ }),
+ square: createEditorSwitchProp({ label: '是否为方形按钮' }),
+ block: createEditorSwitchProp({ label: '是否为块级元素', defaultValue: false }),
+ color: createEditorInputProp({
+ label: '按钮颜色',
+ tips: '按钮颜色,支持传入 linear-gradient 渐变色'
+ }),
+ disabled: createEditorSwitchProp({ label: '是否禁用按钮' }),
+ hairline: createEditorSwitchProp({ label: '是否使用 0.5px 边框' }),
+ icon: createEditorInputProp({ label: '左侧图标名称或图片链接' }),
+ 'icon-position': createEditorSelectProp({
+ label: '图标展示位置',
+ options: [
+ {
+ label: '左侧',
+ val: 'left'
+ },
+ {
+ label: '右侧',
+ val: 'right'
+ }
+ ]
+ }),
+ 'icon-prefix': createEditorInputProp({
+ label: '图标类名前缀',
+ tips: '图标类名前缀,同 Icon 组件的 class-prefix 属性'
+ }),
+ loading: createEditorSwitchProp({ label: '是否显示为加载状态' }),
+ 'loading-size': createEditorInputProp({ label: '加载图标大小' }),
+ 'loading-text': createEditorInputProp({ label: '加载状态提示文字' }),
+ 'loading-type': createEditorSelectProp({
+ label: '加载图标类型',
+ options: [
+ { label: 'circular', val: 'circular' },
+ { label: 'spinner', val: 'spinner' }
+ ],
+ defaultValue: 'circular'
+ }),
+ plain: createEditorSwitchProp({ label: '是否为朴素按钮' }),
+ replace: createEditorSwitchProp({ label: '是否在跳转时替换当前页面历史' }),
+ round: createEditorSwitchProp({ label: '是否为圆形按钮' }),
+ to: createEditorInputProp({ label: '路由跳转' }),
+ url: createEditorInputProp({ label: '跳转链接' })
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/checkbox/createFieldProps.ts b/src/packages/base-widgets/checkbox/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/checkbox/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/checkbox/index.tsx b/src/packages/base-widgets/checkbox/index.tsx
new file mode 100644
index 0000000..1c31f89
--- /dev/null
+++ b/src/packages/base-widgets/checkbox/index.tsx
@@ -0,0 +1,94 @@
+import { Field, Checkbox, CheckboxGroup } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorTableProp
+} from '@/visual-editor/visual-editor.props'
+
+export default {
+ key: 'checkbox',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 复选框',
+ preview: () => (
+
+
+ one
+
+
+ two
+
+
+ ),
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ (
+ registerRef(el, block._vid)}
+ {...props}
+ v-model={props.modelValue}
+ >
+ {props.options?.map((item) => (
+
+ {item.label}
+
+ ))}
+
+ )
+ }}
+ />
+ )
+ },
+ props: {
+ modelValue: createEditorInputProp({ label: '默认值', defaultValue: [] }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'checkbox' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '复选框' }),
+ options: createEditorTableProp({
+ label: '默认选项',
+ option: {
+ options: [
+ { label: '显示值', field: 'label' },
+ { label: '绑定值', field: 'value' },
+ { label: '备注', field: 'comments' }
+ ],
+ showKey: 'label'
+ },
+ defaultValue: [
+ { label: '萝卜', value: 'radish' },
+ { label: '青菜', value: 'greens' }
+ ]
+ }),
+ direction: createEditorSelectProp({
+ label: '排列方向',
+ options: [
+ {
+ label: '水平',
+ val: 'horizontal'
+ },
+ {
+ label: '垂直',
+ val: 'vertical'
+ }
+ ],
+ defaultValue: 'horizontal'
+ }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/datetimePicker/createFieldProps.ts b/src/packages/base-widgets/datetimePicker/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/datetimePicker/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/datetimePicker/index.tsx b/src/packages/base-widgets/datetimePicker/index.tsx
new file mode 100644
index 0000000..5fe0063
--- /dev/null
+++ b/src/packages/base-widgets/datetimePicker/index.tsx
@@ -0,0 +1,116 @@
+import { Field, Popup, DatetimePicker } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import { createEditorInputProp, createEditorTableProp } from '@/visual-editor/visual-editor.props'
+import { reactive } from 'vue'
+
+export default {
+ key: 'datetimePicker',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 选择器',
+ preview: () => ,
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+ const state = reactive({
+ showPicker: false,
+ text: ''
+ })
+ const customFieldName = {
+ text: 'label',
+ value: 'value'
+ }
+
+ const onConfirm = (value) => {
+ props.modelValue = value.value
+ state.text = value[props.valueKey || 'text']
+ state.showPicker = false
+ console.log(props)
+ }
+
+ const PopupPicker = () => (
+ <>
+ (state.showPicker = true)}
+ style={{
+ width: size.width ? `${size.width}px` : null
+ }}
+ v-slots={{
+ input: () =>
+ state.text?.trim() == '' ? (
+ {props.placeholder}
+ ) : (
+ state.text
+ )
+ }}
+ />
+
+ registerRef(el, block._vid)}
+ {...props}
+ columnsFieldNames={customFieldName}
+ onConfirm={onConfirm}
+ onCancel={() => (state.showPicker = false)}
+ />
+
+ >
+ )
+
+ return (
+ <>
+
+ >
+ )
+ },
+ props: {
+ modelValue: createEditorInputProp({ label: '默认值' }),
+ name: createEditorInputProp({
+ label: '名称,提交表单的标识符',
+ defaultValue: 'datetimePicker'
+ }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '时间选择器' }),
+ columns: createEditorTableProp({
+ label: '数据项',
+ option: {
+ options: [
+ {
+ label: '显示值',
+ field: 'label'
+ },
+ {
+ label: '绑定值',
+ field: 'value'
+ },
+ {
+ label: '备注',
+ field: 'comments'
+ }
+ ],
+ showKey: 'label'
+ },
+ defaultValue: [
+ {
+ label: '杭州',
+ value: 'hangzhou'
+ },
+ {
+ label: '上海',
+ value: 'shanghai'
+ }
+ ]
+ }),
+ valueKey: createEditorInputProp({ label: '选项对象的键名', defaultValue: 'label' }),
+ placeholder: createEditorInputProp({ label: '占位符', defaultValue: '请选择' }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/image/index.tsx b/src/packages/base-widgets/image/index.tsx
new file mode 100644
index 0000000..1d893f9
--- /dev/null
+++ b/src/packages/base-widgets/image/index.tsx
@@ -0,0 +1,32 @@
+import { createEditorInputProp } from '@/visual-editor/visual-editor.props'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+
+export default {
+ key: 'image',
+ moduleName: 'baseWidgets',
+ label: '图片',
+ resize: {
+ width: true,
+ height: true
+ },
+ render: ({ props, size }) => {
+ return (
+
+

+
+ )
+ },
+ preview: () => (
+
+ ),
+ props: {
+ url: createEditorInputProp({ label: '地址' })
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/index.ts b/src/packages/base-widgets/index.ts
new file mode 100644
index 0000000..5b84961
--- /dev/null
+++ b/src/packages/base-widgets/index.ts
@@ -0,0 +1,11 @@
+const modules = import.meta.globEager('./*/index.tsx')
+
+const components = {}
+
+Object.keys(modules).forEach((key: string) => {
+ const name = key.replace(/\.\/(.*)\/index\.(tsx|vue)/, '$1')
+ components[name] = modules[key]?.default || modules[key]
+})
+
+console.log(components, 'base-widgets')
+export default components
diff --git a/src/packages/base-widgets/input/createFieldProps.ts b/src/packages/base-widgets/input/createFieldProps.ts
new file mode 100644
index 0000000..0a6b687
--- /dev/null
+++ b/src/packages/base-widgets/input/createFieldProps.ts
@@ -0,0 +1,141 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ modelValue: createEditorInputProp({
+ label: '默认值',
+ defaultValue: ''
+ }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'input' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '输入框' }),
+ type: createEditorSelectProp({
+ label: '输入框类型',
+ options: [
+ { label: '文本', val: 'text' },
+ { label: '数字', val: 'number' },
+ { label: '文本域', val: 'textarea' },
+ { label: '密码', val: 'password' },
+ { label: '电话', val: 'tel' },
+ { label: '小数点', val: 'digit' }
+ ],
+ defaultValue: 'text'
+ }),
+ placeholder: createEditorInputProp({ label: '占位提示文字', defaultValue: '请输入' }),
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ disabled: createEditorSwitchProp({ label: '是否禁用输入框' }),
+ error: createEditorSwitchProp({ label: '是否将输入内容标红' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ 'right-icon': createEditorInputProp({ label: '右侧图标名称或图片链接' }),
+ rules: createEditorInputProp({ label: '表单校验规则' }),
+ 'left-icon': createEditorInputProp({ label: '左侧图标名称或图片链接' }),
+ 'arrow-direction': createEditorInputProp({
+ label: '箭头方向',
+ defaultValue: '',
+ tips: '箭头方向,可选值为 left up down'
+ }),
+ autosize: createEditorSwitchProp({
+ label: '自适应内容高度',
+ defaultValue: false,
+ tips:
+ '是否自适应内容高度,只对 textarea 有效,可传入对象,如 { maxHeight: 100, minHeight: 50 },单位为px'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ center: createEditorSwitchProp({ label: '内容垂直居中' }),
+ 'clear-icon': createEditorInputProp({
+ label: '清除图标',
+ tips: '清除图标名称或图片链接'
+ }),
+ 'clear-trigger': createEditorSelectProp({
+ label: '清除图标显示时机',
+ options: [
+ { label: '输入框不为空时展示', val: 'always' },
+ { label: '输入框聚焦且不为空时展示', val: 'focus' }
+ ],
+ defaultValue: 'always',
+ tips: '显示清除图标的时机,always 表示输入框不为空时展示,focus 表示输入框聚焦且不为空时展示'
+ }),
+ clearable: createEditorSwitchProp({
+ label: '是否启用清除图标',
+ defaultValue: false,
+ tips: '是否启用清除图标,点击清除图标后会清空输入框'
+ }),
+ clickable: createEditorSwitchProp({ label: '是否开启点击反馈' }),
+ 'format-trigger': createEditorInputProp({ label: '格式化函数触发的时机' }),
+ formatter: createEditorInputProp({ label: '输入内容格式化函数' }),
+ 'icon-prefix': createEditorInputProp({
+ label: '图标类名前缀',
+ tips: '图标类名前缀,同 Icon 组件的 class-prefix 属性'
+ }),
+ 'input-align': createEditorSelectProp({
+ label: '输入框对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ 'label-align': createEditorSelectProp({
+ label: '左侧文本对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ 'label-width': createEditorInputProp({ label: '左侧文本宽度' }),
+ maxlength: createEditorInputProp({ label: '输入的最大字符数' }),
+ 'show-word-limit': createEditorSwitchProp({
+ label: '是否显示字数统计',
+ tips: '需要设置 maxlength 属性'
+ })
+})
diff --git a/src/packages/base-widgets/input/index.tsx b/src/packages/base-widgets/input/index.tsx
new file mode 100644
index 0000000..1b2cb18
--- /dev/null
+++ b/src/packages/base-widgets/input/index.tsx
@@ -0,0 +1,36 @@
+import { Field } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+
+export default {
+ key: 'input',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 输入框',
+ preview: () => (
+
+ ),
+ render: ({ model, size, block, props, custom }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ registerRef(el, block._vid)}
+ {...custom}
+ {...props}
+ {...model.default}
+ v-model={props.modelValue}
+ style={{
+ width: size.width ? `${size.width}px` : null
+ }}
+ />
+ )
+ },
+ props: createFieldProps(),
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/nav-bar/index.tsx b/src/packages/base-widgets/nav-bar/index.tsx
new file mode 100644
index 0000000..723be79
--- /dev/null
+++ b/src/packages/base-widgets/nav-bar/index.tsx
@@ -0,0 +1,46 @@
+import { NavBar } from 'vant'
+import 'vant/lib/nav-bar/index.css'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createEditorInputProp, createEditorSwitchProp } from '@/visual-editor/visual-editor.props'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+
+export default {
+ key: 'nav-bar',
+ moduleName: 'baseWidgets',
+ label: '导航栏',
+ preview: () => (
+
+ ),
+ render: ({ props, size, block, custom }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ registerRef(el, block._vid)}
+ placeholder
+ {...custom}
+ {...props}
+ style={{
+ width: size.width ? `${size.width}px` : null
+ }}
+ />
+ )
+ },
+ props: {
+ title: createEditorInputProp({ label: '标题', defaultValue: '标题' }),
+ fixed: createEditorSwitchProp({ label: '是否固定', defaultValue: true }),
+ placeholder: createEditorSwitchProp({
+ label: '是否生成占位元素',
+ defaultValue: true,
+ tips: '固定在顶部时,是否在标签位置生成一个等高的占位元素'
+ }),
+ zIndex: createEditorInputProp({ label: 'z-index' }),
+ border: createEditorSwitchProp({ label: '是否显示下边框', defaultValue: false }),
+ leftText: createEditorInputProp({ label: '左侧文案', defaultValue: '返回' }),
+ rightText: createEditorInputProp({ label: '右侧文案', defaultValue: '按钮' }),
+ leftArrow: createEditorSwitchProp({ label: '是否显示左侧箭头', defaultValue: true })
+ },
+ resize: {
+ width: true
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/number-range/index.tsx b/src/packages/base-widgets/number-range/index.tsx
new file mode 100644
index 0000000..16923c9
--- /dev/null
+++ b/src/packages/base-widgets/number-range/index.tsx
@@ -0,0 +1,31 @@
+import { NumberRange } from './number-range'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+
+export default {
+ key: 'number-range',
+ moduleName: 'baseWidgets',
+ label: '数字范围输入框',
+ resize: {
+ width: true
+ },
+ preview: () => ,
+ render: ({ model, size }) => {
+ return (
+
+ )
+ },
+ model: {
+ start: '起始绑定字段',
+ end: '截止绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/number-range/number-range.scss b/src/packages/base-widgets/number-range/number-range.scss
new file mode 100644
index 0000000..93eaf6a
--- /dev/null
+++ b/src/packages/base-widgets/number-range/number-range.scss
@@ -0,0 +1,24 @@
+.number-range {
+ display: inline-flex;
+ width: 225px;
+ min-height: 40px;
+ align-items: stretch;
+
+ & > div {
+ flex: 1;
+
+ input {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ }
+ }
+
+ span {
+ margin: 0 8px;
+ display: inline-flex;
+ align-items: center;
+ }
+}
\ No newline at end of file
diff --git a/src/packages/base-widgets/number-range/number-range.tsx b/src/packages/base-widgets/number-range/number-range.tsx
new file mode 100644
index 0000000..3e4548c
--- /dev/null
+++ b/src/packages/base-widgets/number-range/number-range.tsx
@@ -0,0 +1,30 @@
+import { defineComponent } from 'vue'
+import { useVModel } from '@vueuse/core'
+import './number-range.scss'
+
+export const NumberRange = defineComponent({
+ props: {
+ start: { type: String },
+ end: { type: String }
+ },
+ emits: {
+ 'update:start': (_?: string) => true,
+ 'update:end': (_?: string) => true
+ },
+ setup(props) {
+ const startModel = useVModel(props, 'start')
+ const endModel = useVModel(props, 'end')
+
+ return () => (
+
+ )
+ }
+})
diff --git a/src/packages/base-widgets/picker/createFieldProps.ts b/src/packages/base-widgets/picker/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/picker/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/picker/index.tsx b/src/packages/base-widgets/picker/index.tsx
new file mode 100644
index 0000000..e189862
--- /dev/null
+++ b/src/packages/base-widgets/picker/index.tsx
@@ -0,0 +1,113 @@
+import { Field, Popup, Picker } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import { createEditorInputProp, createEditorTableProp } from '@/visual-editor/visual-editor.props'
+import { reactive } from 'vue'
+
+export default {
+ key: 'picker',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 选择器',
+ preview: () => ,
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+ const state = reactive({
+ showPicker: false,
+ text: ''
+ })
+ const customFieldName = {
+ text: 'label',
+ value: 'value'
+ }
+
+ const onConfirm = (value) => {
+ props.modelValue = value.value
+ state.text = value[props.valueKey || 'text']
+ state.showPicker = false
+ console.log(props)
+ }
+
+ const PopupPicker = () => (
+ <>
+ (state.showPicker = true)}
+ style={{
+ width: size.width ? `${size.width}px` : null
+ }}
+ v-slots={{
+ input: () =>
+ state.text?.trim() == '' ? (
+ {props.placeholder}
+ ) : (
+ state.text
+ )
+ }}
+ />
+
+ registerRef(el, block._vid)}
+ {...props}
+ columnsFieldNames={customFieldName}
+ onConfirm={onConfirm}
+ onCancel={() => (state.showPicker = false)}
+ />
+
+ >
+ )
+
+ return (
+ <>
+
+ >
+ )
+ },
+ props: {
+ modelValue: createEditorInputProp({ label: '默认值' }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'picker' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '选择器' }),
+ columns: createEditorTableProp({
+ label: '数据项',
+ option: {
+ options: [
+ {
+ label: '显示值',
+ field: 'label'
+ },
+ {
+ label: '绑定值',
+ field: 'value'
+ },
+ {
+ label: '备注',
+ field: 'comments'
+ }
+ ],
+ showKey: 'label'
+ },
+ defaultValue: [
+ {
+ label: '杭州',
+ value: 'hangzhou'
+ },
+ {
+ label: '上海',
+ value: 'shanghai'
+ }
+ ]
+ }),
+ valueKey: createEditorInputProp({ label: '选项对象的键名', defaultValue: 'label' }),
+ placeholder: createEditorInputProp({ label: '占位符', defaultValue: '请选择' }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/radio/createFieldProps.ts b/src/packages/base-widgets/radio/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/radio/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/radio/index.tsx b/src/packages/base-widgets/radio/index.tsx
new file mode 100644
index 0000000..ade6f0b
--- /dev/null
+++ b/src/packages/base-widgets/radio/index.tsx
@@ -0,0 +1,90 @@
+import { Field, Radio, RadioGroup } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorTableProp
+} from '@/visual-editor/visual-editor.props'
+
+export default {
+ key: 'radio',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 单选框',
+ preview: () => (
+
+ one
+ two
+
+ ),
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ (
+ registerRef(el, block._vid)}
+ {...props}
+ v-model={props.modelValue}
+ >
+ {props.options?.map((item) => (
+
+ {item.label}
+
+ ))}
+
+ )
+ }}
+ />
+ )
+ },
+ props: {
+ modelValue: createEditorInputProp({ label: '默认值', defaultValue: '' }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'radio' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '单选框' }),
+ options: createEditorTableProp({
+ label: '默认选项',
+ option: {
+ options: [
+ { label: '显示值', field: 'label' },
+ { label: '绑定值', field: 'value' },
+ { label: '备注', field: 'comments' }
+ ],
+ showKey: 'label'
+ },
+ defaultValue: [
+ { label: '萝卜', value: 'radish' },
+ { label: '青菜', value: 'greens' }
+ ]
+ }),
+ direction: createEditorSelectProp({
+ label: '排列方向',
+ options: [
+ {
+ label: '水平',
+ val: 'horizontal'
+ },
+ {
+ label: '垂直',
+ val: 'vertical'
+ }
+ ],
+ defaultValue: 'horizontal'
+ }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/rate/createFieldProps.ts b/src/packages/base-widgets/rate/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/rate/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/rate/index.tsx b/src/packages/base-widgets/rate/index.tsx
new file mode 100644
index 0000000..70c551f
--- /dev/null
+++ b/src/packages/base-widgets/rate/index.tsx
@@ -0,0 +1,60 @@
+import { Field, Rate } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import {
+ createEditorInputNumberProp,
+ createEditorInputProp,
+ createEditorSwitchProp
+} from "@/visual-editor/visual-editor.props";
+
+export default {
+ key: 'rate',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 单选框',
+ preview: () => (
+ }}
+ >
+ ),
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ (
+ registerRef(el, block._vid)}
+ {...props}
+ v-model={props.modelValue}
+ >
+ )
+ }}
+ />
+ )
+ },
+ props: {
+ modelValue: createEditorInputNumberProp({ label: '默认值', defaultValue: 0 }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'rate' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '评分' }),
+ count: createEditorInputNumberProp({ label: '图标总数' }),
+ size: createEditorInputProp({ label: '图标大小' }),
+ 'allow-half': createEditorSwitchProp({ label: '是否允许半选' }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/select/index.tsx b/src/packages/base-widgets/select/index.tsx
new file mode 100644
index 0000000..8b9e8ee
--- /dev/null
+++ b/src/packages/base-widgets/select/index.tsx
@@ -0,0 +1,37 @@
+import { ElOption, ElSelect } from 'element-plus'
+import { createEditorTableProp } from '@/visual-editor/visual-editor.props'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+
+export default {
+ key: 'select',
+ moduleName: 'baseWidgets',
+ label: '下拉框',
+ preview: () => ,
+ render: ({ props, model, custom }) => (
+ opt.value).join(',')}
+ {...model.default}
+ >
+ {(props.options || []).map((opt: { label: string; value: string }, index: number) => (
+
+ ))}
+
+ ),
+ props: {
+ options: createEditorTableProp({
+ label: '下拉选项',
+ option: {
+ options: [
+ { label: '显示值', field: 'label' },
+ { label: '绑定值', field: 'value' },
+ { label: '备注', field: 'comments' }
+ ],
+ showKey: 'label'
+ }
+ })
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/slider/createFieldProps.ts b/src/packages/base-widgets/slider/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/slider/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/slider/index.tsx b/src/packages/base-widgets/slider/index.tsx
new file mode 100644
index 0000000..aee8016
--- /dev/null
+++ b/src/packages/base-widgets/slider/index.tsx
@@ -0,0 +1,61 @@
+import { Field, Slider } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import {
+ createEditorInputNumberProp,
+ createEditorInputProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+export default {
+ key: 'slider',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 滑块',
+ preview: () => (
+ }}
+ >
+ ),
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ (
+ registerRef(el, block._vid)}
+ {...props}
+ v-model={props.modelValue}
+ >
+ )
+ }}
+ />
+ )
+ },
+ props: {
+ modelValue: createEditorInputNumberProp({ label: '默认值', defaultValue: 0 }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'slider' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '滑块' }),
+ min: createEditorInputNumberProp({ label: '最小值' }),
+ max: createEditorInputNumberProp({ label: '最大值' }),
+ size: createEditorInputNumberProp({ label: '图标大小' }),
+ range: createEditorSwitchProp({ label: '是否开启双滑块模式' }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/stepper/createFieldProps.ts b/src/packages/base-widgets/stepper/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/stepper/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/stepper/index.tsx b/src/packages/base-widgets/stepper/index.tsx
new file mode 100644
index 0000000..f6829f2
--- /dev/null
+++ b/src/packages/base-widgets/stepper/index.tsx
@@ -0,0 +1,55 @@
+import { Field, Stepper } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import { createEditorInputNumberProp, createEditorInputProp } from "@/visual-editor/visual-editor.props";
+
+export default {
+ key: 'stepper',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 单选框',
+ preview: () => (
+ }}
+ >
+ ),
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ (
+ registerRef(el, block._vid)}
+ {...props}
+ v-model={props.modelValue}
+ >
+ )
+ }}
+ />
+ )
+ },
+ props: {
+ modelValue: createEditorInputNumberProp({ label: '默认值', defaultValue: 0 }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'stepper' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '步进器' }),
+ min: createEditorInputNumberProp({ label: '最小值' }),
+ max: createEditorInputNumberProp({ label: '最大值' }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/switch/createFieldProps.ts b/src/packages/base-widgets/switch/createFieldProps.ts
new file mode 100644
index 0000000..774c84c
--- /dev/null
+++ b/src/packages/base-widgets/switch/createFieldProps.ts
@@ -0,0 +1,39 @@
+import {
+ createEditorInputProp,
+ createEditorSelectProp,
+ createEditorSwitchProp
+} from '@/visual-editor/visual-editor.props'
+
+/**
+ * @name: createFieldProps
+ * @author: 卜启缘
+ * @date: 2021/5/4 13:57
+ * @description:createFieldProps
+ * @update: 2021/5/4 13:57
+ */
+export const createFieldProps = () => ({
+ colon: createEditorSwitchProp({ label: '是否在 label 后面添加冒号' }),
+ 'error-message': createEditorInputProp({ label: '底部错误提示文案' }),
+ 'error-message-align': createEditorSelectProp({
+ label: '错误提示文案对齐方式',
+ options: [
+ {
+ label: '左对齐',
+ val: 'left'
+ },
+ {
+ label: '居中',
+ val: 'center'
+ },
+ {
+ label: '右对齐',
+ val: 'right'
+ }
+ ],
+ defaultValue: 'left'
+ }),
+ border: createEditorSwitchProp({ label: '是否显示内边框', defaultValue: true }),
+ readonly: createEditorSwitchProp({ label: '是否为只读状态' }),
+ required: createEditorSwitchProp({ label: '是否显示表单必填星号' }),
+ rules: createEditorInputProp({ label: '表单校验规则' })
+})
diff --git a/src/packages/base-widgets/switch/index.tsx b/src/packages/base-widgets/switch/index.tsx
new file mode 100644
index 0000000..189f543
--- /dev/null
+++ b/src/packages/base-widgets/switch/index.tsx
@@ -0,0 +1,55 @@
+import { Field, Switch } from 'vant'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { createFieldProps } from './createFieldProps'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+import { createEditorInputProp, createEditorSwitchProp } from '@/visual-editor/visual-editor.props'
+
+export default {
+ key: 'switch',
+ moduleName: 'baseWidgets',
+ label: '表单项类型 - 开关',
+ preview: () => (
+ }} />
+ ),
+ render: ({ size, block, props }) => {
+ const { registerRef } = useGlobalProperties()
+
+ return (
+ (
+ registerRef(el, block._vid)}
+ {...props}
+ v-model={props.modelValue}
+ size={20}
+ />
+ )
+ }}
+ />
+ )
+ },
+ props: {
+ modelValue: createEditorInputProp({ label: '默认值', defaultValue: 'false' }),
+ name: createEditorInputProp({ label: '名称,提交表单的标识符', defaultValue: 'switch' }),
+ label: createEditorInputProp({ label: '输入框左侧文本', defaultValue: '开关' }),
+ 'active-color': createEditorInputProp({ label: '打开时的背景色' }),
+ 'active-value': createEditorInputProp({ label: '打开时对应的值' }),
+ disabled: createEditorSwitchProp({ label: '是否为禁用状态' }),
+ 'inactive-color': createEditorInputProp({ label: '关闭时的背景色' }),
+ 'inactive-value': createEditorInputProp({ label: '关闭时对应的值' }),
+ loading: createEditorSwitchProp({ label: '是否为加载状态' }),
+ size: createEditorInputProp({ label: '开关尺寸' }),
+ ...createFieldProps()
+ },
+ resize: {
+ width: true
+ },
+ model: {
+ default: '绑定字段'
+ }
+} as VisualEditorComponent
diff --git a/src/packages/base-widgets/text/index.tsx b/src/packages/base-widgets/text/index.tsx
new file mode 100644
index 0000000..e062c7c
--- /dev/null
+++ b/src/packages/base-widgets/text/index.tsx
@@ -0,0 +1,28 @@
+import {
+ createEditorColorProp,
+ createEditorInputProp,
+ createEditorSelectProp
+} from '@/visual-editor/visual-editor.props'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+
+export default {
+ key: 'text',
+ moduleName: 'baseWidgets',
+ label: '文本',
+ preview: () => 预览文本,
+ render: ({ props }) => (
+ {props.text || '默认文本'}
+ ),
+ props: {
+ text: createEditorInputProp({ label: '显示文本' }),
+ color: createEditorColorProp('字体颜色'),
+ size: createEditorSelectProp({
+ label: '字体大小',
+ options: [
+ { label: '14px', val: '14px' },
+ { label: '18px', val: '18px' },
+ { label: '24px', val: '24px' }
+ ]
+ })
+ }
+} as VisualEditorComponent
diff --git a/src/packages/container-component/form/index.module.scss b/src/packages/container-component/form/index.module.scss
new file mode 100644
index 0000000..d2b2ac6
--- /dev/null
+++ b/src/packages/container-component/form/index.module.scss
@@ -0,0 +1,10 @@
+/**
+* @name: index.module
+* @author: 卜启缘
+* @date: 2021/5/2 16:15
+* @description:index.module
+* @update: 2021/5/2 16:15
+*/
+.van-row {
+ padding: 2px;
+}
diff --git a/src/packages/container-component/form/index.tsx b/src/packages/container-component/form/index.tsx
new file mode 100644
index 0000000..f4ccdea
--- /dev/null
+++ b/src/packages/container-component/form/index.tsx
@@ -0,0 +1,54 @@
+import { Form, Field, Button } from 'vant'
+import { renderSlot, getCurrentInstance } from 'vue'
+import { createEditorTableProp } from '@/visual-editor/visual-editor.props'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+
+export default {
+ key: 'form',
+ moduleName: 'containerComponents',
+ label: '表单容器',
+ preview: () => (
+
+ ),
+ render: function ({ props, custom, block }) {
+ const { slots } = getCurrentInstance()!
+ const { registerRef } = useGlobalProperties()
+
+ const onSubmit = (values) => {
+ console.log('onSubmit:', values)
+ }
+
+ return (
+
+ )
+ },
+ resize: {
+ height: true,
+ width: true
+ },
+ props: {
+ 'slots.default.children': createEditorTableProp({
+ label: '表单项',
+ option: {
+ options: [
+ { label: '显示值', field: 'label' },
+ { label: '绑定值', field: 'value' },
+ { label: '备注', field: 'comments' }
+ ],
+ showKey: 'label'
+ },
+ defaultValue: []
+ })
+ }
+} as VisualEditorComponent
diff --git a/src/packages/container-component/index.ts b/src/packages/container-component/index.ts
new file mode 100644
index 0000000..5b84961
--- /dev/null
+++ b/src/packages/container-component/index.ts
@@ -0,0 +1,11 @@
+const modules = import.meta.globEager('./*/index.tsx')
+
+const components = {}
+
+Object.keys(modules).forEach((key: string) => {
+ const name = key.replace(/\.\/(.*)\/index\.(tsx|vue)/, '$1')
+ components[name] = modules[key]?.default || modules[key]
+})
+
+console.log(components, 'base-widgets')
+export default components
diff --git a/src/packages/container-component/layout/index.module.scss b/src/packages/container-component/layout/index.module.scss
new file mode 100644
index 0000000..d2b2ac6
--- /dev/null
+++ b/src/packages/container-component/layout/index.module.scss
@@ -0,0 +1,10 @@
+/**
+* @name: index.module
+* @author: 卜启缘
+* @date: 2021/5/2 16:15
+* @description:index.module
+* @update: 2021/5/2 16:15
+*/
+.van-row {
+ padding: 2px;
+}
diff --git a/src/packages/container-component/layout/index.tsx b/src/packages/container-component/layout/index.tsx
new file mode 100644
index 0000000..0f8e39a
--- /dev/null
+++ b/src/packages/container-component/layout/index.tsx
@@ -0,0 +1,115 @@
+import { Col, Row } from 'vant'
+import { renderSlot, getCurrentInstance } from 'vue'
+import { createEditorInputProp, createEditorSelectProp } from '@/visual-editor/visual-editor.props'
+import { VisualEditorComponent } from '@/visual-editor/visual-editor.utils'
+import styles from './index.module.scss'
+import { useGlobalProperties } from '@/hooks/useGlobalProperties'
+
+interface SlotItem {
+ value: string
+ [prop: string]: any
+}
+
+const slotsTemp = {} as any
+
+const createSlots = (str: string): SlotItem =>
+ str.split(':').reduce(
+ (prev, curr, index) => {
+ prev[`slot${index}`] = {
+ key: `slot${index}`,
+ span: curr,
+ children: []
+ }
+ return prev
+ },
+ { value: str }
+ )
+
+export default {
+ key: 'layout',
+ moduleName: 'containerComponents',
+ label: '布局容器',
+ preview: () => (
+
+ span: 8
+ span: 8
+ span: 8
+
+ ),
+ render: function ({ props, size, block, custom }) {
+ const { slots } = getCurrentInstance()!
+ const { registerRef } = useGlobalProperties()
+
+ slotsTemp[block._vid] ??= {}
+
+ if (Object.keys(props.slots || {}).length) {
+ Object.keys(props.slots).forEach((key) => {
+ if (slotsTemp[block._vid][key]?.children) {
+ props.slots[key].children = slotsTemp[block._vid][key].children
+ }
+ })
+ }
+
+ return (
+ registerRef(el, block._vid)}
+ {...custom}
+ {...props}
+ style={{
+ height: size.height ? `${size.height}px` : null,
+ width: size.width ? `${size.width}px` : null
+ }}
+ class={styles.vanRow}
+ >
+ {Object.values(Object.keys(props.slots).length ? props.slots : createSlots('12:12'))
+ ?.filter((item) => typeof item !== 'string')
+ .map((spanItem: SlotItem, spanIndex) => {
+ slotsTemp[block._vid][`slot${spanIndex}`] = spanItem
+ return (
+ <>
+ {renderSlot(slots, `slot${spanIndex}`)}
+ >
+ )
+ })}
+
+ )
+ },
+ resize: {
+ height: true,
+ width: true
+ },
+ props: {
+ gutter: createEditorInputProp({ label: '列间隔' }),
+ slots: createEditorSelectProp({
+ label: '列比例',
+ options: [
+ { label: '24', val: createSlots('24') },
+ { label: '12:12', val: createSlots('12:12') },
+ { label: '6:18', val: createSlots('6:18') },
+ { label: '18:6', val: createSlots('18:6') },
+ { label: '8:8:8', val: createSlots('8:8:8') },
+ { label: '6:12:6', val: createSlots('6:12:6') },
+ { label: '6:6:6:6', val: createSlots('6:6:6:6') }
+ ],
+ defaultValue: createSlots('12:12')
+ }),
+ justify: createEditorSelectProp({
+ label: '主轴对齐方式',
+ options: [
+ { label: '左对齐', val: 'start' },
+ { label: '居中排列', val: 'center' },
+ { label: '均匀对齐', val: 'space-around' },
+ { label: '两端对齐', val: 'space-between' },
+ { label: '右对齐', val: 'end' }
+ ]
+ }),
+ align: createEditorSelectProp({
+ label: '交叉轴对齐方式',
+ options: [
+ { label: '顶部对齐', val: 'top' },
+ { label: '垂直居中', val: 'center' },
+ { label: '底部对齐', val: 'bottom' }
+ ]
+ })
+ }
+} as VisualEditorComponent
diff --git a/src/plugins/element-plus.ts b/src/plugins/element-plus.ts
new file mode 100644
index 0000000..10b0db0
--- /dev/null
+++ b/src/plugins/element-plus.ts
@@ -0,0 +1,3 @@
+import 'element-plus/packages/theme-chalk/src/base.scss'
+// import 'element-plus/lib/theme-chalk/index.css'
+// import 'element-plus/lib/theme-chalk/el-popper.css'
diff --git a/src/plugins/vant.ts b/src/plugins/vant.ts
new file mode 100644
index 0000000..feea34f
--- /dev/null
+++ b/src/plugins/vant.ts
@@ -0,0 +1,2 @@
+import '@vant/touch-emulator'
+import 'vant/lib/index.css'
diff --git a/src/router/index.ts b/src/router/index.ts
new file mode 100644
index 0000000..8392d8c
--- /dev/null
+++ b/src/router/index.ts
@@ -0,0 +1,10 @@
+import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
+
+const routes: Array = []
+
+const router = createRouter({
+ history: createWebHashHistory(),
+ routes
+})
+
+export default router
diff --git a/src/shims-vue.d.ts b/src/shims-vue.d.ts
new file mode 100644
index 0000000..46391fd
--- /dev/null
+++ b/src/shims-vue.d.ts
@@ -0,0 +1,32 @@
+type RequestIdleCallbackHandle = any
+type RequestIdleCallbackOptions = {
+ timeout: number
+}
+type RequestIdleCallbackDeadline = {
+ readonly didTimeout: boolean
+ timeRemaining: () => number
+}
+
+declare interface Window {
+ $$refs: any
+ requestIdleCallback: (
+ callback: (deadline: RequestIdleCallbackDeadline) => void,
+ opts?: RequestIdleCallbackOptions
+ ) => RequestIdleCallbackHandle
+ cancelIdleCallback: (handle: RequestIdleCallbackHandle) => void
+}
+
+// declare module '*.vue' {
+// import { DefineComponent } from 'vue'
+//
+// const component: DefineComponent<{}, {}, any>
+// export default component
+// }
+
+// declare module '*.module.scss'
+
+declare module '*.vue' {
+ import { ComponentOptions } from 'vue'
+ const component: ComponentOptions
+ export default component
+}
diff --git a/src/store/index.ts b/src/store/index.ts
new file mode 100644
index 0000000..57facbe
--- /dev/null
+++ b/src/store/index.ts
@@ -0,0 +1,27 @@
+import { createStore } from 'vuex'
+
+const defaultState = {
+ count: 0
+}
+
+// Create a new store instance.
+export default createStore({
+ state() {
+ return defaultState
+ },
+ mutations: {
+ increment(state: typeof defaultState) {
+ state.count++
+ }
+ },
+ actions: {
+ increment(context) {
+ context.commit('increment')
+ }
+ },
+ getters: {
+ double(state: typeof defaultState) {
+ return 2 * state.count
+ }
+ }
+})
diff --git a/src/style/common.scss b/src/style/common.scss
new file mode 100644
index 0000000..be7e9e2
--- /dev/null
+++ b/src/style/common.scss
@@ -0,0 +1,14 @@
+body {
+ overflow: hidden;
+}
+::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+}
+::-webkit-scrollbar-thumb {
+ background: #bfbfbf;
+ border-radius: 10px;
+}
+.placeholder {
+ color: #c8c9cc;
+}
diff --git a/src/visual-editor/components/common/monaco.ts b/src/visual-editor/components/common/monaco.ts
new file mode 100644
index 0000000..f70eff2
--- /dev/null
+++ b/src/visual-editor/components/common/monaco.ts
@@ -0,0 +1,24 @@
+// https://github.com/vitejs/vite/discussions/1791#discussioncomment-321046
+
+import * as Monaco from 'monaco-editor'
+// import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
+import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'
+import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'
+// import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'
+// import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'
+
+const global: any = globalThis || window
+
+global.MonacoEnvironment = {
+ getWorker(_: string, label: string) {
+ if (label === 'json') return new jsonWorker()
+ if (label === 'css' || label === 'scss' || label === 'less') return new cssWorker()
+ // if (label === 'html' || label === 'handlebars' || label === 'razor') return new htmlWorker()
+ // if (label === 'typescript' || label === 'javascript') return new tsWorker()
+ // return new editorWorker()
+ }
+}
+
+const languages = Monaco.languages.getLanguages()
+
+export { Monaco, languages }
diff --git a/src/visual-editor/components/common/simulator.vue b/src/visual-editor/components/common/simulator.vue
new file mode 100644
index 0000000..81b2127
--- /dev/null
+++ b/src/visual-editor/components/common/simulator.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
diff --git a/src/visual-editor/components/header/comp-render.tsx b/src/visual-editor/components/header/comp-render.tsx
new file mode 100644
index 0000000..289b7d2
--- /dev/null
+++ b/src/visual-editor/components/header/comp-render.tsx
@@ -0,0 +1,27 @@
+import { defineComponent } from 'vue'
+
+export default defineComponent({
+ name: 'CompRender',
+ props: {
+ element: {
+ type: Object,
+ default: () => ({})
+ },
+ config: {
+ type: Object,
+ default: () => ({})
+ }
+ },
+ setup(props) {
+ return () => {
+ const component = props.config.componentMap[props.element.componentKey]
+ return component.render({
+ size: {},
+ props: props.element.props || {},
+ model: {},
+ block: props.element,
+ custom: {}
+ })
+ }
+ }
+})
diff --git a/src/visual-editor/components/header/index.vue b/src/visual-editor/components/header/index.vue
new file mode 100644
index 0000000..f608bc3
--- /dev/null
+++ b/src/visual-editor/components/header/index.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/components/header/preview.vue b/src/visual-editor/components/header/preview.vue
new file mode 100644
index 0000000..64de5d3
--- /dev/null
+++ b/src/visual-editor/components/header/preview.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/components/header/slot-item.vue b/src/visual-editor/components/header/slot-item.vue
new file mode 100644
index 0000000..69d0ad3
--- /dev/null
+++ b/src/visual-editor/components/header/slot-item.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/components/left-aside/components/base-widgets/index.module.scss b/src/visual-editor/components/left-aside/components/base-widgets/index.module.scss
new file mode 100644
index 0000000..c0fde73
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/base-widgets/index.module.scss
@@ -0,0 +1,43 @@
+.list-group {
+
+}
+.list-group-item {
+ position: relative;
+ width: calc(100% - 20px);
+ margin-left: 10px;
+ border: solid 3px #ebeef5;
+ margin-top: 20px;
+ min-height: 120px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0px 5px;
+ box-sizing: border-box;
+ &:hover {
+ border-color: #409EFF;
+ cursor: move;
+ }
+ &:last-of-type {
+ margin-bottom: 20px;
+ }
+ &::before {
+ content: attr(data-label);
+ position: absolute;
+ top: -3px;
+ left: -3px;
+ background-color: #409EFF;
+ color: white;
+ padding: 4px 8px;
+ font-size: 12px;
+ z-index: 1;
+ }
+ &::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 2;
+ }
+}
diff --git a/src/visual-editor/components/left-aside/components/base-widgets/index.tsx b/src/visual-editor/components/left-aside/components/base-widgets/index.tsx
new file mode 100644
index 0000000..4a5db8a
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/base-widgets/index.tsx
@@ -0,0 +1,45 @@
+import { defineComponent } from 'vue'
+import { cloneDeep } from 'lodash'
+import { visualConfig } from '@/visual.config'
+import Draggable from 'vuedraggable'
+import styles from './index.module.scss'
+import { createNewBlock } from '@/visual-editor/visual-editor.utils'
+
+export default defineComponent({
+ name: 'BaseWidgets',
+ setup() {
+ const log = (evt) => {
+ window.console.log(evt)
+ }
+ // 克隆组件
+ const cloneDog = (comp) => {
+ console.log('当前拖拽的组件:', comp)
+ const newComp = cloneDeep(comp)
+ newComp._vid = Date.now()
+ return createNewBlock({ left: 0, top: 0, component: newComp })
+ }
+
+ return () => (
+ <>
+
+ {{
+ item: ({ element }) => (
+
+ {element.preview()}
+
+ )
+ }}
+
+ >
+ )
+ }
+})
diff --git a/src/visual-editor/components/left-aside/components/container-component/index.module.scss b/src/visual-editor/components/left-aside/components/container-component/index.module.scss
new file mode 100644
index 0000000..c0fde73
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/container-component/index.module.scss
@@ -0,0 +1,43 @@
+.list-group {
+
+}
+.list-group-item {
+ position: relative;
+ width: calc(100% - 20px);
+ margin-left: 10px;
+ border: solid 3px #ebeef5;
+ margin-top: 20px;
+ min-height: 120px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0px 5px;
+ box-sizing: border-box;
+ &:hover {
+ border-color: #409EFF;
+ cursor: move;
+ }
+ &:last-of-type {
+ margin-bottom: 20px;
+ }
+ &::before {
+ content: attr(data-label);
+ position: absolute;
+ top: -3px;
+ left: -3px;
+ background-color: #409EFF;
+ color: white;
+ padding: 4px 8px;
+ font-size: 12px;
+ z-index: 1;
+ }
+ &::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 2;
+ }
+}
diff --git a/src/visual-editor/components/left-aside/components/container-component/index.tsx b/src/visual-editor/components/left-aside/components/container-component/index.tsx
new file mode 100644
index 0000000..25858f3
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/container-component/index.tsx
@@ -0,0 +1,45 @@
+import { defineComponent } from 'vue'
+import { cloneDeep } from 'lodash'
+import { visualConfig } from '@/visual.config'
+import Draggable from 'vuedraggable'
+import styles from './index.module.scss'
+import { createNewBlock } from '@/visual-editor/visual-editor.utils'
+
+export default defineComponent({
+ name: 'ContainerComponent',
+ setup() {
+ const log = (evt) => {
+ window.console.log(evt)
+ }
+ // 克隆组件
+ const cloneDog = (comp) => {
+ console.log('当前拖拽的组件:', comp)
+ const newComp = cloneDeep(comp)
+ newComp._vid = Date.now()
+ return createNewBlock({ left: 0, top: 0, component: newComp })
+ }
+
+ return () => (
+ <>
+
+ {{
+ item: ({ element }) => (
+
+ {element.preview()}
+
+ )
+ }}
+
+ >
+ )
+ }
+})
diff --git a/src/visual-editor/components/left-aside/components/custom-component/index.vue b/src/visual-editor/components/left-aside/components/custom-component/index.vue
new file mode 100644
index 0000000..9027511
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/custom-component/index.vue
@@ -0,0 +1,10 @@
+
+自定义组件
+
+
+
+
diff --git a/src/visual-editor/components/left-aside/components/index.ts b/src/visual-editor/components/left-aside/components/index.ts
new file mode 100644
index 0000000..0339dff
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/index.ts
@@ -0,0 +1,13 @@
+const modules = import.meta.globEager('./*/index.(tsx|vue)')
+
+const components = {}
+
+console.log(modules, '起航')
+
+for (const path in modules) {
+ const comp = modules[path].default
+ components[comp.name] = comp
+}
+console.log('left-aside components:', components)
+
+export default components
diff --git a/src/visual-editor/components/left-aside/components/page-tree/index.vue b/src/visual-editor/components/left-aside/components/page-tree/index.vue
new file mode 100644
index 0000000..282a229
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/page-tree/index.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+ {{ node.label }}
+
+
+
+
+
+
+
+ 添加子页面
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/components/left-aside/components/page-tree/treeData.ts b/src/visual-editor/components/left-aside/components/page-tree/treeData.ts
new file mode 100644
index 0000000..16a8d59
--- /dev/null
+++ b/src/visual-editor/components/left-aside/components/page-tree/treeData.ts
@@ -0,0 +1,57 @@
+export const treeData = [
+ {
+ label: '一级 1',
+ children: [
+ {
+ label: '二级 1-1',
+ children: [
+ {
+ label: '三级 1-1-1'
+ }
+ ]
+ }
+ ]
+ },
+ {
+ label: '一级 2',
+ children: [
+ {
+ label: '二级 2-1',
+ children: [
+ {
+ label: '三级 2-1-1'
+ }
+ ]
+ },
+ {
+ label: '二级 2-2',
+ children: [
+ {
+ label: '三级 2-2-1'
+ }
+ ]
+ }
+ ]
+ },
+ {
+ label: '一级 3',
+ children: [
+ {
+ label: '二级 3-1',
+ children: [
+ {
+ label: '三级 3-1-1'
+ }
+ ]
+ },
+ {
+ label: '二级 3-2',
+ children: [
+ {
+ label: '三级 3-2-1'
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/src/visual-editor/components/left-aside/index.vue b/src/visual-editor/components/left-aside/index.vue
new file mode 100644
index 0000000..d3634c0
--- /dev/null
+++ b/src/visual-editor/components/left-aside/index.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+ {{ tabItem.label }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/components/left-aside/tabs.ts b/src/visual-editor/components/left-aside/tabs.ts
new file mode 100644
index 0000000..da26b40
--- /dev/null
+++ b/src/visual-editor/components/left-aside/tabs.ts
@@ -0,0 +1,26 @@
+export const tabs = [
+ {
+ name: 'pages',
+ icon: 'el-icon-tickets',
+ label: '页面',
+ componentName: 'PageTree'
+ },
+ {
+ name: 'base-widget',
+ icon: 'el-icon-edit',
+ label: '基础控件',
+ componentName: 'BaseWidgets'
+ },
+ {
+ name: 'complex-component',
+ icon: 'el-icon-suitcase',
+ label: '容器组件',
+ componentName: 'ContainerComponent'
+ },
+ {
+ name: 'custom-component',
+ icon: 'el-icon-upload',
+ label: '自定义组件',
+ componentName: 'custom-component'
+ }
+]
diff --git a/src/visual-editor/components/right-attribute-panel/MonacoEditor.module.scss b/src/visual-editor/components/right-attribute-panel/MonacoEditor.module.scss
new file mode 100644
index 0000000..eb6d3e6
--- /dev/null
+++ b/src/visual-editor/components/right-attribute-panel/MonacoEditor.module.scss
@@ -0,0 +1,20 @@
+/**
+* @name: MonacoEditor
+* @author: 卜启缘
+* @date: 2021/4/30 0:04
+* @description:MonacoEditor
+* @update: 2021/4/30 0:04
+*/
+.container {
+ border: 1px solid #eee;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5px;
+}
+.title {
+ background-color: #eee;
+ padding: 10px 0 10px 20px;
+}
+.code {
+ flex-grow: 1
+}
diff --git a/src/visual-editor/components/right-attribute-panel/MonacoEditor.tsx b/src/visual-editor/components/right-attribute-panel/MonacoEditor.tsx
new file mode 100644
index 0000000..5c42ace
--- /dev/null
+++ b/src/visual-editor/components/right-attribute-panel/MonacoEditor.tsx
@@ -0,0 +1,138 @@
+/**
+ * @name: MonacoEditor
+ * @author: 卜启缘
+ * @date: 2021/4/30 0:01
+ * @description:MonacoEditor
+ * @update: 2021/4/30 0:01
+ */
+import { Monaco } from '../common/monaco'
+import { defineComponent, onMounted, PropType, shallowRef, ref, onBeforeUnmount, watch } from 'vue'
+import styles from './MonacoEditor.module.scss'
+let subscription: Monaco.IDisposable | undefined
+let preventTriggerChangeEvent = false
+
+export default defineComponent({
+ name: 'MonacoEditor',
+ props: {
+ code: {
+ type: String as PropType,
+ required: true
+ },
+ vid: [String, Number],
+ onChange: {
+ type: Function as PropType<
+ (value: string, event: Monaco.editor.IModelContentChangedEvent) => void
+ >,
+ required: true
+ },
+ title: {
+ type: String as PropType,
+ required: true
+ }
+ },
+ setup(props) {
+ // 需要一个shallowRef: 只监听value,不关心实际对象
+ const editorRef = shallowRef(null)
+
+ // 需要生成编辑器的Dom
+ const containerDomRef = ref(null)
+
+ // 格式化代码
+ const formatCode = () => {
+ window.requestIdleCallback(
+ () => {
+ editorRef.value.getAction('editor.action.formatDocument').run()
+ },
+ { timeout: 800 }
+ )
+ }
+
+ onMounted(() => {
+ // 组件初始化时创建一个MonacoEditor的实例
+ editorRef.value = Monaco.editor.create(containerDomRef.value, {
+ value: props.code, // 初始值
+ theme: 'vs-dark', // vs, hc-black, or vs-dark
+ language: 'json', // 代码生成语言
+ formatOnPaste: true, // 当粘贴的时候自动进行一次格式化代码
+ tabSize: 2, // tab缩进长度
+ minimap: {
+ enabled: false // 不需要小的缩略图
+ },
+ fontFamily: '微软雅黑', //字体
+ // automaticLayout: true, //编辑器自适应布局,可能会影响性能
+ overviewRulerBorder: false,
+ scrollBeyondLastLine: false //滚动配置,溢出才滚动
+ })
+
+ // 如果代码有变化,会在这里监听到,当受到外部数据改变时,不需要触发change事件
+ subscription = editorRef.value.onDidChangeModelContent((event) => {
+ if (!preventTriggerChangeEvent) {
+ // getValue: 获取编辑器中的所有文本
+ props.onChange(editorRef.value.getValue(), event)
+ }
+ })
+ formatCode()
+ editorRef.value.layout({
+ width: 300,
+ height: 800
+ })
+ })
+
+ onBeforeUnmount(() => {
+ // 组件销毁时卸载编辑器
+ if (subscription) {
+ subscription.dispose()
+ }
+ })
+ // 更新编辑器
+ const refreshEditor = () => {
+ if (editorRef.value) {
+ const editor = editorRef.value
+ // 获取编辑器的textModel文本
+ const model = editor.getModel()
+
+ // 如果代码发生变化 这里需要更新一版
+ if (model && props.code !== model.getValue()) {
+ // 这是进行一次常规化的操作 文档原文:Push an "undo stop" in the undo-redo stack.
+ editor.pushUndoStop()
+ preventTriggerChangeEvent = true
+ /**
+ * @function 开始编辑编辑器, 文档原文:Push edit operations, basically editing the model. This is the preferred way of editing the model. The edit operations will land on the undo stack.
+ * @param 编辑操作之前的光标状态。调用撤销或重做时,将返回此光标状态
+ * @param 需要编辑的内容 range: 编辑的内容范围,这里选择的是全部范围
+ * @param 在编辑器质性完成之后可以计算光标状态的一个回调参数
+ */
+ model.pushEditOperations(
+ [],
+ [
+ {
+ range: model.getFullModelRange(),
+ text: props.code
+ }
+ ],
+ () => null
+ )
+ }
+
+ editor.pushUndoStop()
+ preventTriggerChangeEvent = false
+ formatCode()
+ }
+ }
+
+ watch(() => props.vid, refreshEditor)
+
+ return () => {
+ return (
+
+ {props.title && (
+
+ {props.title}
+
+ )}
+
+
+ )
+ }
+ }
+})
diff --git a/src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-edit.service.tsx b/src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-edit.service.tsx
new file mode 100644
index 0000000..98e36ce
--- /dev/null
+++ b/src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-edit.service.tsx
@@ -0,0 +1,132 @@
+import { VisualEditorProps } from '../../../../visual-editor.props'
+import { defineComponent, getCurrentInstance, onMounted, PropType, reactive, createApp } from 'vue'
+import { defer } from '../../../../utils/defer'
+import { ElButton, ElDialog, ElTable, ElTableColumn, ElInput } from 'element-plus'
+import { cloneDeep } from 'lodash'
+
+export interface TablePropEditorServiceOption {
+ data: any[]
+ config: VisualEditorProps
+ onConfirm: (val: any[]) => void
+}
+
+const ServiceComponent = defineComponent({
+ props: {
+ option: { type: Object as PropType, required: true }
+ },
+ setup(props) {
+ const ctx = getCurrentInstance()!
+
+ const state = reactive({
+ option: props.option,
+ showFlag: false,
+ mounted: (() => {
+ const dfd = defer()
+ onMounted(() => setTimeout(() => dfd.resolve(), 0))
+ return dfd.promise
+ })(),
+ editData: [] as any[]
+ })
+
+ const methods = {
+ service: (option: TablePropEditorServiceOption) => {
+ state.option = option
+ state.editData = cloneDeep(option.data || [])
+ methods.show()
+ },
+ show: async () => {
+ await state.mounted
+ state.showFlag = true
+ },
+ hide: () => {
+ state.showFlag = false
+ },
+ add: () => {
+ state.editData.push({})
+ },
+ reset: () => {
+ state.editData = cloneDeep(state.option.data)
+ }
+ }
+
+ const handler = {
+ onConfirm: () => {
+ state.option.onConfirm(state.editData)
+ methods.hide()
+ },
+ onCancel: () => {
+ methods.hide()
+ },
+ onDelete: (index: number) => {
+ state.editData.splice(index, 1)
+ }
+ }
+
+ Object.assign(ctx.proxy!, methods)
+
+ return () => (
+ <>
+
+ {{
+ default: () => (
+
+
+ 添加
+ 重置
+
+
+
+ {state.option.config.table!.options.map((item) => (
+
+ {{
+ default: ({ row }: { row: any }) =>
+ }}
+
+ ))}
+
+ {{
+ default: ({ $index }: { $index: number }) => (
+ handler.onDelete($index) } as any)}
+ >
+ 删除
+
+ )
+ }}
+
+
+
+ ),
+ footer: () => (
+ <>
+ 取消
+
+ 确定
+
+ >
+ )
+ }}
+
+ >
+ )
+ }
+})
+
+export const $$tablePropEditor = (() => {
+ let ins: any
+ return (option: Omit) => {
+ if (!ins) {
+ const el = document.createElement('div')
+ document.body.appendChild(el)
+ const app = createApp(ServiceComponent, { option })
+ ins = app.mount(el)
+ }
+ const dfd = defer()
+ ins.service({
+ ...option,
+ onConfirm: dfd.resolve
+ })
+ return dfd.promise
+ }
+})()
diff --git a/src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-editor.tsx b/src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-editor.tsx
new file mode 100644
index 0000000..a537f3a
--- /dev/null
+++ b/src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-editor.tsx
@@ -0,0 +1,38 @@
+import { defineComponent, PropType } from 'vue'
+import { VisualEditorProps } from '../../../../visual-editor.props'
+import { useModel } from '../../../../utils/useModel'
+import { ElButton, ElTag } from 'element-plus'
+import { $$tablePropEditor } from './table-prop-edit.service'
+
+export const TablePropEditor = defineComponent({
+ props: {
+ modelValue: { type: Array as PropType },
+ propConfig: { type: Object as PropType, required: true }
+ },
+ emits: ['update:modelValue'],
+ setup(props, ctx) {
+ const model = useModel(
+ () => props.modelValue,
+ (val) => ctx.emit('update:modelValue', val)
+ )
+
+ const onClick = async () => {
+ const data = await $$tablePropEditor({
+ config: props.propConfig,
+ data: props.modelValue || []
+ })
+ model.value = data
+ }
+
+ return () => (
+
+ {(!model.value || model.value.length == 0) && (
+ 添加
+ )}
+ {(model.value || []).map((item) => (
+ {item[props.propConfig.table!.showKey]}
+ ))}
+
+ )
+ }
+})
diff --git a/src/visual-editor/components/right-attribute-panel/index.common.scss b/src/visual-editor/components/right-attribute-panel/index.common.scss
new file mode 100644
index 0000000..75ec979
--- /dev/null
+++ b/src/visual-editor/components/right-attribute-panel/index.common.scss
@@ -0,0 +1,17 @@
+/**
+* @name: index.common
+* @author: 卜启缘
+* @date: 2021/5/3 16:05
+* @description:index.common
+* @update: 2021/5/3 16:05
+*/
+body {
+ .el-form-item__label {
+ font-size: 12px;
+ }
+ .el-form-item--mini .el-form-item__content {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ }
+}
diff --git a/src/visual-editor/components/right-attribute-panel/index.module.scss b/src/visual-editor/components/right-attribute-panel/index.module.scss
new file mode 100644
index 0000000..b6f4123
--- /dev/null
+++ b/src/visual-editor/components/right-attribute-panel/index.module.scss
@@ -0,0 +1,61 @@
+/**
+* @name: index.module
+* @author: 卜启缘
+* @date: 2021/4/28 17:03
+* @description:index.module
+* @update: 2021/4/28 17:03
+*/
+$boxShadow: -2px 0 4px 0 rgb(0 0 0 / 10%);
+
+.drawer {
+ position: absolute;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ width: 320px;
+ background-color: white;
+ transform: translateX(100%);
+ transition: transform 0.5s ease-in-out;
+ box-shadow: $boxShadow;
+ z-index: 20;
+ &.is-open {
+ transform: translateX(0);
+ /*.floating-action-btn {
+ transform: translateX(0);
+ }*/
+ }
+ /*&:hover {
+ .floating-action-btn {
+ transform: translateX(-20px);
+ }
+ }*/
+}
+
+.drawer.is-open {
+ transform: translateX(0);
+}
+
+.floating-action-btn {
+ position: absolute;
+ width: 20px;
+ height: 80px;
+ background: #fff;
+ box-shadow: $boxShadow;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ transform: translateX(-20px);
+ transition: transform 0.5s ease-in-out;
+ left: 0;
+ top: 50%;
+ cursor: pointer;
+}
+
+.attrs {
+ position: absolute;
+ padding: 12px;
+ width: 100%;
+ height: 100%;
+ background-color: white;
+ overflow: auto;
+}
diff --git a/src/visual-editor/components/right-attribute-panel/index.tsx b/src/visual-editor/components/right-attribute-panel/index.tsx
new file mode 100644
index 0000000..4b6f2f1
--- /dev/null
+++ b/src/visual-editor/components/right-attribute-panel/index.tsx
@@ -0,0 +1,177 @@
+/**
+ * @name: RightAttributePanel
+ * @author: 卜启缘
+ * @date: 2021/4/28 16:59
+ * @description:属性编辑器
+ * @update: 2021/4/28 16:59
+ */
+import { defineComponent, PropType, reactive } from 'vue'
+import styles from './index.module.scss'
+import './index.common.scss'
+import {
+ ElColorPicker,
+ ElForm,
+ ElFormItem,
+ ElInput,
+ ElInputNumber,
+ ElOption,
+ ElSelect,
+ ElSwitch,
+ ElTabPane,
+ ElTabs,
+ ElPopover
+} from 'element-plus'
+import { VisualEditorProps, VisualEditorPropsType } from '@/visual-editor/visual-editor.props'
+import { TablePropEditor } from '@/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-editor'
+import {
+ VisualEditorBlockData,
+ VisualEditorConfig,
+ VisualEditorModelValue
+} from '@/visual-editor/visual-editor.utils'
+import MonacoEditor from './MonacoEditor'
+import { useVModel } from '@vueuse/core'
+import { useDotProp } from '@/visual-editor/utils/useDotProp'
+
+export default defineComponent({
+ name: 'RightAttributePanel',
+ props: {
+ block: { type: Object as PropType, default: () => ({}) },
+ config: { type: Object as PropType, required: true },
+ dataModel: { type: Object as PropType<{ value: VisualEditorModelValue }>, required: true }
+ },
+ setup(props, { emit }) {
+ const state = reactive({
+ activeName: 'attr',
+ isOpen: true,
+ editData: useVModel(props, 'block', emit)
+ })
+
+ const renderEditor = (propName: string, propConfig: VisualEditorProps) => {
+ const { propObj, prop } = useDotProp(state.editData.props, propName)
+
+ return {
+ [VisualEditorPropsType.input]: () => ,
+ [VisualEditorPropsType.inputNumber]: () => ,
+ [VisualEditorPropsType.switch]: () => ,
+ [VisualEditorPropsType.color]: () => ,
+ [VisualEditorPropsType.select]: () => (
+
+ {(() => {
+ return propConfig.options!.map((opt) => (
+
+ ))
+ })()}
+
+ ),
+ [VisualEditorPropsType.table]: () => (
+
+ )
+ }[propConfig.type]()
+ }
+
+ return () => {
+ const content: JSX.Element[] = []
+
+ if (!props.block) {
+ content.push(
+ <>
+
+
+
+
+
+
+ >
+ )
+ } else {
+ const { componentKey } = props.block
+ const component = props.config.componentMap[componentKey]
+ console.log('props.block:', props.block)
+ content.push(
+
+ {props.block._vid}
+ (
+
+ )
+ }}
+ >
+
+ )
+ if (!!component) {
+ if (!!component.props) {
+ content.push(
+ <>
+ {Object.entries(component.props || {}).map(([propName, propConfig]) => (
+
+ propConfig.tips ? (
+ <>
+
+ }}
+ >
+ {propConfig.label}
+ >
+ ) : (
+ propConfig.label
+ )
+ }}
+ >
+ {renderEditor(propName, propConfig)}
+
+ ))}
+ >
+ )
+ }
+ }
+ }
+
+ const handleSchemaChange = (val) => {
+ try {
+ const newObj = JSON.parse(val)
+ Object.assign(state.editData, newObj)
+ } catch (e) {
+ console.log('JSON格式有误:', e)
+ }
+ }
+
+ return (
+ <>
+
+
(state.isOpen = !state.isOpen)}>
+
+
+
+
+
+
+ {content}
+
+
+
+
+
+
+
+
+ >
+ )
+ }
+ }
+})
diff --git a/src/visual-editor/components/simulator-editor/comp-render.tsx b/src/visual-editor/components/simulator-editor/comp-render.tsx
new file mode 100644
index 0000000..bc172d2
--- /dev/null
+++ b/src/visual-editor/components/simulator-editor/comp-render.tsx
@@ -0,0 +1,28 @@
+import { defineComponent, PropType } from 'vue'
+import { VisualEditorBlockData } from '@/visual-editor/visual-editor.utils'
+
+export default defineComponent({
+ name: 'CompRender',
+ props: {
+ element: {
+ type: Object as PropType,
+ default: () => ({})
+ },
+ config: {
+ type: Object,
+ default: () => ({})
+ }
+ },
+ setup(props) {
+ return () => {
+ const component = props.config.componentMap[props.element.componentKey]
+ return component.render({
+ size: {},
+ props: props.element.props || {},
+ model: {},
+ block: props.element,
+ custom: {}
+ })
+ }
+ }
+})
diff --git a/src/visual-editor/components/simulator-editor/draggable-transition-group.vue b/src/visual-editor/components/simulator-editor/draggable-transition-group.vue
new file mode 100644
index 0000000..4d155f0
--- /dev/null
+++ b/src/visual-editor/components/simulator-editor/draggable-transition-group.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/components/simulator-editor/simulator-editor.vue b/src/visual-editor/components/simulator-editor/simulator-editor.vue
new file mode 100644
index 0000000..0fc265a
--- /dev/null
+++ b/src/visual-editor/components/simulator-editor/simulator-editor.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/components/simulator-editor/slot-item.vue b/src/visual-editor/components/simulator-editor/slot-item.vue
new file mode 100644
index 0000000..f2ba7f6
--- /dev/null
+++ b/src/visual-editor/components/simulator-editor/slot-item.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/index.vue b/src/visual-editor/index.vue
new file mode 100644
index 0000000..17d8d57
--- /dev/null
+++ b/src/visual-editor/index.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/visual-editor/plugins/command.plugin.ts b/src/visual-editor/plugins/command.plugin.ts
new file mode 100644
index 0000000..4ed1d99
--- /dev/null
+++ b/src/visual-editor/plugins/command.plugin.ts
@@ -0,0 +1,156 @@
+import { reactive, onUnmounted } from 'vue'
+import { KeyboardCode } from './keyboard-code'
+
+export interface CommandExecute {
+ undo?: () => void
+ redo: () => void
+}
+
+export interface Command {
+ name: string // 命令唯一标识
+ keyboard?: string | string[] // 命令监听的快捷键
+ execute: (...args: any[]) => CommandExecute // 命令被执行的时候,所做的内容
+ followQueue?: boolean // 命令执行完之后,是否需要将命令执行得到的undo,redo存入命令队列
+ init?: () => (() => void) | undefined // 命令初始化函数
+ data?: any // 命令缓存所需要的数据
+}
+
+export function useCommander() {
+ const state = reactive({
+ current: -1, // 队列中当前的命令
+ queue: [] as CommandExecute[], // 命令队列
+ commandArray: [] as Command[], // 命令对象数组
+ commands: {} as Record void>, // 命令对象,方便通过命令的名称调用命令的execute函数,并且执行额外的命令队列的逻辑
+ destroyList: [] as ((() => void) | undefined)[] // 组件销毁的时候,需要调用的销毁逻辑数组
+ })
+
+ /**
+ * 注册一个命令
+ * @author 卜启缘
+ * @date 2021/4/22 11:33 下午
+ */
+ const registry = (command: Command) => {
+ state.commandArray.push(command)
+ state.commands[command.name] = (...args) => {
+ const { undo, redo } = command.execute(...args)
+ redo()
+ /*如果命令执行之后,不需要进入命令队列,则直接结束*/
+ if (command.followQueue === false) {
+ return
+ }
+ /*否则,将命令队列中剩余的命令去除,保留current及其之前的命令*/
+ const { queue, current } = state
+ if (queue.length > 0) {
+ state.queue = queue.slice(0, current + 1)
+ }
+ /*设置命令队列中最后一个命令为当前执行的命令*/
+ queue.push({ undo, redo })
+ /*索引+1,指向队列中的最后一个命令*/
+ state.current = current + 1
+ }
+ }
+
+ const keyboardEvent = (() => {
+ const onKeydown = (e: KeyboardEvent) => {
+ if (document.activeElement !== document.body) {
+ return
+ }
+ const { keyCode, shiftKey, altKey, ctrlKey, metaKey } = e
+ const keyString: string[] = []
+ if (ctrlKey || metaKey) keyString.push('ctrl')
+ if (shiftKey) keyString.push('shift')
+ if (altKey) keyString.push('alt')
+ keyString.push(KeyboardCode[keyCode])
+ const keyNames = keyString.join('+')
+ state.commandArray.forEach(({ keyboard, name }) => {
+ if (!keyboard) {
+ return
+ }
+ const keys = Array.isArray(keyboard) ? keyboard : [keyboard]
+ if (keys.indexOf(keyNames) > -1) {
+ state.commands[name]()
+ e.stopPropagation()
+ e.preventDefault()
+ }
+ })
+ }
+ const init = () => {
+ window.addEventListener('keydown', onKeydown)
+ return () => window.removeEventListener('keydown', onKeydown)
+ }
+ return init
+ })()
+
+ /**
+ * useCommander初始化函数,负责初始化键盘监听事件,调用命令的初始化逻辑
+ * @author 卜启缘
+ * @date 2021/4/22 11:35 下午
+ */
+ const init = () => {
+ const onKeydown = (_: KeyboardEvent) => {
+ // console.log('监听到键盘时间')
+ }
+ window.addEventListener('keydown', onKeydown)
+ state.commandArray.forEach(
+ (command) => !!command.init && state.destroyList.push(command.init())
+ )
+ state.destroyList.push(keyboardEvent())
+ state.destroyList.push(() => window.removeEventListener('keydown', onKeydown))
+ }
+
+ /**
+ * 注册撤回命令(撤回命令执行结果不需要进入命令队列)
+ * @author 卜启缘
+ * @date 2021/4/22 11:36 下午
+ */
+ registry({
+ name: 'undo',
+ keyboard: 'ctrl+z',
+ followQueue: false,
+ execute: () => {
+ return {
+ redo: () => {
+ if (state.current === -1) {
+ return
+ }
+ const queueItem = state.queue[state.current]
+ // console.log('queueItem',queueItem)
+ if (queueItem) {
+ !!queueItem.undo && queueItem.undo()
+ state.current--
+ }
+ }
+ }
+ }
+ })
+
+ /**
+ * 注册重做命令(重做命令执行结果不需要进入命令队列)
+ * @author 卜启缘
+ * @date 2021/4/22 11:36 下午
+ */
+ registry({
+ name: 'redo',
+ keyboard: ['ctrl+y', 'ctrl+shift+z'],
+ followQueue: false,
+ execute: () => {
+ return {
+ redo: () => {
+ const queueItem = state.queue[state.current + 1]
+ if (queueItem) {
+ queueItem.redo()
+ state.current++
+ }
+ }
+ }
+ }
+ })
+
+ onUnmounted(() => state.destroyList.forEach((fn) => !!fn && fn()))
+
+ return {
+ state,
+ registry,
+ init
+ }
+}
diff --git a/src/visual-editor/plugins/event.ts b/src/visual-editor/plugins/event.ts
new file mode 100644
index 0000000..f499d59
--- /dev/null
+++ b/src/visual-editor/plugins/event.ts
@@ -0,0 +1,17 @@
+type SimplyListener = () => void
+
+export function createEvent() {
+ const listeners: SimplyListener[] = []
+ return {
+ on: (cb: SimplyListener) => {
+ listeners.push(cb)
+ },
+ off: (cb: SimplyListener) => {
+ const index = listeners.indexOf(cb)
+ if (index > -1) listeners.splice(index, 1)
+ },
+ emit: () => {
+ listeners.forEach((item) => item())
+ }
+ }
+}
diff --git a/src/visual-editor/plugins/keyboard-code.ts b/src/visual-editor/plugins/keyboard-code.ts
new file mode 100644
index 0000000..80337c2
--- /dev/null
+++ b/src/visual-editor/plugins/keyboard-code.ts
@@ -0,0 +1,71 @@
+export const KeyboardCode = {
+ 16: 'shift',
+ 17: 'ctrl',
+ 18: 'alt',
+
+ 8: 'backspace',
+ 9: 'tab',
+ 13: 'enter',
+ 27: 'esc',
+ 32: 'space',
+
+ 37: 'left',
+ 38: 'up',
+ 39: 'right',
+ 40: 'down',
+ 46: 'delete',
+ 189: '-',
+ 187: '=',
+
+ 48: '0',
+ 49: '1',
+ 50: '2',
+ 51: '3',
+ 52: '4',
+ 53: '5',
+ 54: '6',
+ 55: '7',
+ 56: '8',
+ 57: '9',
+
+ 65: 'a',
+ 66: 'b',
+ 67: 'c',
+ 68: 'd',
+ 69: 'e',
+ 70: 'f',
+ 71: 'g',
+ 72: 'h',
+ 73: 'i',
+ 74: 'j',
+ 75: 'k',
+
+ 76: 'l',
+ 77: 'm',
+ 78: 'n',
+ 79: 'o',
+ 80: 'p',
+ 81: 'q',
+ 82: 'r',
+ 83: 's',
+ 84: 't',
+ 85: 'u',
+ 86: 'v',
+ 87: 'w',
+ 88: 'x',
+ 89: 'y',
+ 90: 'z',
+
+ 112: 'F1',
+ 113: 'F2',
+ 114: 'F3',
+ 115: 'F4',
+ 116: 'F5',
+ 117: 'F6',
+ 118: 'F7',
+ 119: 'F8',
+ 120: 'F9',
+ 121: 'F10',
+ 122: 'F11',
+ 123: 'F12'
+} as Record
diff --git a/src/visual-editor/utils/defer.ts b/src/visual-editor/utils/defer.ts
new file mode 100644
index 0000000..8577000
--- /dev/null
+++ b/src/visual-editor/utils/defer.ts
@@ -0,0 +1,22 @@
+interface Defer {
+ (): {
+ resolve: () => void
+ reject: () => void
+ promise: Promise
+ }
+
+ (): {
+ resolve: (val: T) => void
+ reject: () => void
+ promise: Promise
+ }
+}
+
+export const defer: Defer = () => {
+ const dfd = {} as any
+ dfd.promise = new Promise((resolve, reject) => {
+ dfd.resolve = resolve as any
+ dfd.reject = reject
+ })
+ return dfd
+}
diff --git a/src/visual-editor/utils/dialog-service.tsx b/src/visual-editor/utils/dialog-service.tsx
new file mode 100644
index 0000000..2204ee4
--- /dev/null
+++ b/src/visual-editor/utils/dialog-service.tsx
@@ -0,0 +1,134 @@
+import { defer } from './defer'
+import { defineComponent, PropType, reactive, createApp, getCurrentInstance } from 'vue'
+import { ElInput, ElDialog, ElButton } from 'element-plus'
+
+enum DialogServiceEditType {
+ textarea = 'textarea',
+ input = 'input'
+}
+
+interface DialogServiceOption {
+ title?: string
+ editType: DialogServiceEditType
+ editReadonly?: boolean
+ editValue?: string | null
+ onConfirm: (val?: string | null) => void
+}
+
+const keyGenerator = (() => {
+ let count = 0
+ return () => `auto_key_${count++}`
+})()
+
+const ServiceComponent = defineComponent({
+ props: {
+ option: { type: Object as PropType, required: true }
+ },
+ setup(props) {
+ const ctx = getCurrentInstance()!
+
+ const state = reactive({
+ option: props.option,
+ editValue: null as undefined | null | string,
+ showFlag: false,
+ key: keyGenerator()
+ })
+
+ const methods = {
+ service: (option: DialogServiceOption) => {
+ state.option = option
+ state.editValue = option.editValue
+ state.key = keyGenerator()
+ methods.show()
+ },
+ show: () => {
+ state.showFlag = true
+ },
+ hide: () => (state.showFlag = false)
+ }
+
+ const handler = {
+ onConfirm: () => {
+ state.option.onConfirm(state.editValue)
+ methods.hide()
+ },
+ onCancel: () => {
+ methods.hide()
+ }
+ }
+
+ Object.assign(ctx.proxy, methods)
+
+ return () => (
+ <>
+
+ {{
+ default: () => (
+
+ {state.option.editType === DialogServiceEditType.textarea ? (
+
+ ) : (
+
+ )}
+
+ ),
+ footer: () => (
+
+ 取消
+ 确定
+
+ )
+ }}
+
+ >
+ )
+ }
+})
+
+const DialogService = (() => {
+ let ins: any
+ return (option: DialogServiceOption) => {
+ if (!ins) {
+ const el = document.createElement('div')
+ document.body.appendChild(el)
+ const app = createApp(ServiceComponent, { option })
+ ins = app.mount(el)
+ }
+ ins.service(option)
+ }
+})()
+
+export const $$dialog = Object.assign(DialogService, {
+ input: (
+ initValue?: string,
+ title?: string,
+ option?: Omit
+ ) => {
+ const dfd = defer()
+ const opt: DialogServiceOption = {
+ ...option,
+ editType: DialogServiceEditType.input,
+ onConfirm: dfd.resolve,
+ editValue: initValue,
+ title
+ }
+ DialogService(opt)
+ return dfd.promise
+ },
+ textarea: (
+ initValue?: string,
+ title?: string,
+ option?: Omit
+ ) => {
+ const dfd = defer()
+ const opt: DialogServiceOption = {
+ ...option,
+ editType: DialogServiceEditType.textarea,
+ onConfirm: dfd.resolve,
+ editValue: initValue,
+ title
+ }
+ DialogService(opt)
+ return dfd.promise
+ }
+})
diff --git a/src/visual-editor/utils/dropdown-service.tsx b/src/visual-editor/utils/dropdown-service.tsx
new file mode 100644
index 0000000..174f672
--- /dev/null
+++ b/src/visual-editor/utils/dropdown-service.tsx
@@ -0,0 +1,143 @@
+import {
+ defineComponent,
+ PropType,
+ reactive,
+ computed,
+ getCurrentInstance,
+ createApp,
+ onMounted,
+ onBeforeUnmount,
+ ref,
+ provide,
+ inject
+} from 'vue'
+import './dropdown-sservice.scss'
+import { defer } from './defer'
+
+interface DropdownServiceOption {
+ reference: MouseEvent | HTMLElement
+ content: () => JSX.Element
+}
+
+const DropdownServiceProvider = (() => {
+ const DROPDOWN_SERVICE_PROVIDER = '@@DROPDOWN_SERVICE_PROVIDER'
+ return {
+ provide: (handler: { onClick: () => void }) => provide(DROPDOWN_SERVICE_PROVIDER, handler),
+ inject: () => inject(DROPDOWN_SERVICE_PROVIDER) as { onClick: () => void }
+ }
+})()
+
+const ServiceComponent = defineComponent({
+ props: { option: { type: Object as PropType, required: true } },
+ setup(props) {
+ const ctx = getCurrentInstance()!
+ const el = ref({} as HTMLDivElement)
+
+ const state = reactive({
+ option: props.option,
+ showFlag: false,
+ top: 0,
+ left: 0,
+ mounted: (() => {
+ const dfd = defer()
+ onMounted(() => setTimeout(() => dfd.resolve(), 0))
+ return dfd.promise
+ })()
+ })
+
+ const service = (option: DropdownServiceOption) => {
+ state.option = option
+
+ if ('addEventListener' in option.reference) {
+ const { top, left, height } = option.reference.getBoundingClientRect()!
+ state.top = top + height
+ state.left = left
+ } else {
+ const { clientX, clientY } = option.reference
+ state.left = clientX
+ state.top = clientY
+ }
+
+ methods.show()
+ }
+
+ const methods = {
+ show: async () => {
+ await state.mounted
+ state.showFlag = true
+ },
+ hide: () => {
+ state.showFlag = false
+ }
+ }
+
+ const classes = computed(() => [
+ 'dropdown-service',
+ {
+ 'dropdown-service-show': state.showFlag
+ }
+ ])
+
+ const styles = computed(() => ({
+ top: `${state.top}px`,
+ left: `${state.left}px`
+ }))
+
+ Object.assign(ctx.proxy, { service })
+
+ const onMousedownDocument = (e: MouseEvent) => {
+ if (!el.value.contains(e.target as HTMLElement)) {
+ methods.hide()
+ }
+ }
+
+ onMounted(() => document.body.addEventListener('mousedown', onMousedownDocument, true))
+ onBeforeUnmount(() => document.body.removeEventListener('mousedown', onMousedownDocument, true))
+
+ DropdownServiceProvider.provide({ onClick: methods.hide })
+
+ return () => (
+
+ {state.option.content()}
+
+ )
+ }
+})
+
+export const DropdownOption = defineComponent({
+ props: {
+ label: { type: String },
+ icon: { type: String }
+ },
+ emits: ['click'],
+ setup(props, ctx) {
+ const { onClick: dropdownClickHandler } = DropdownServiceProvider.inject()
+
+ const handler = {
+ onClick: (e: MouseEvent) => {
+ ctx.emit('click', e)
+ dropdownClickHandler()
+ }
+ }
+
+ return () => (
+
+
+ {props.label}
+
+ )
+ }
+})
+
+export const $$dropdown = (() => {
+ let ins: any
+ return (option: DropdownServiceOption) => {
+ if (!ins) {
+ const el = document.createElement('div')
+ document.body.appendChild(el)
+ const app = createApp(ServiceComponent, { option })
+ ins = app.mount(el)
+ }
+ ins.service(option)
+ }
+})()
diff --git a/src/visual-editor/utils/dropdown-sservice.scss b/src/visual-editor/utils/dropdown-sservice.scss
new file mode 100644
index 0000000..647553e
--- /dev/null
+++ b/src/visual-editor/utils/dropdown-sservice.scss
@@ -0,0 +1,29 @@
+.dropdown-service {
+ position: fixed;
+ padding: 8px 0;
+ z-index: 99;
+ box-shadow: 0 2px 5px 1px #ddd;
+ background-color: white;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 200ms linear;
+
+ .dropdown-option {
+ padding: 5px 12px;
+ font-size: 14px;
+
+ & > i {
+ margin-right: 4px;
+ }
+
+ &:hover {
+ background-color: #efefef;
+ cursor: pointer;
+ }
+ }
+
+ &.dropdown-service-show {
+ opacity: 1;
+ pointer-events: auto;
+ }
+}
\ No newline at end of file
diff --git a/src/visual-editor/utils/useDotProp.ts b/src/visual-editor/utils/useDotProp.ts
new file mode 100644
index 0000000..5729457
--- /dev/null
+++ b/src/visual-editor/utils/useDotProp.ts
@@ -0,0 +1,18 @@
+/**
+ * @name: useDotProp
+ * @author: 卜启缘
+ * @date: 2021/5/2 19:54
+ * @description:useDotProp
+ * @update: 2021/5/2 19:54
+ */
+export const useDotProp = (originObj, propName) => {
+ const props: string[] = propName.split('.')
+ const isDotProp = props.length > 1
+ const prop = props.pop()!
+ const propObj = props.reduce((prev, curr) => (prev[curr] ??= {}), originObj)
+ return {
+ prop,
+ propObj,
+ isDotProp
+ }
+}
diff --git a/src/visual-editor/utils/useModel.tsx b/src/visual-editor/utils/useModel.tsx
new file mode 100644
index 0000000..ea83102
--- /dev/null
+++ b/src/visual-editor/utils/useModel.tsx
@@ -0,0 +1,42 @@
+import { ref, watch, defineComponent } from 'vue'
+
+export function useModel(getter: () => T, emitter: (val: T) => void) {
+ const state = ref(getter()) as { value: T }
+
+ watch(getter, (val) => {
+ if (val !== state.value) {
+ state.value = val
+ }
+ })
+
+ return {
+ get value() {
+ return state.value
+ },
+ set value(val: T) {
+ if (state.value !== val) {
+ state.value = val
+ emitter(val)
+ }
+ }
+ }
+}
+
+export const TestUseModel = defineComponent({
+ props: {
+ modelValue: { type: String }
+ },
+ emits: ['update:modelValue'],
+ setup(props, ctx) {
+ const model = useModel(
+ () => props.modelValue,
+ (val) => ctx.emit('update:modelValue', val)
+ )
+ return () => (
+
+ 自定义的输入框
+
+
+ )
+ }
+})
diff --git a/src/visual-editor/visual-editor.props.tsx b/src/visual-editor/visual-editor.props.tsx
new file mode 100644
index 0000000..188288d
--- /dev/null
+++ b/src/visual-editor/visual-editor.props.tsx
@@ -0,0 +1,148 @@
+export enum VisualEditorPropsType {
+ input = 'input',
+ inputNumber = 'InputNumber',
+ color = 'color',
+ select = 'select',
+ table = 'table',
+ switch = 'switch'
+}
+
+export type VisualEditorProps = {
+ type: VisualEditorPropsType
+ label: string
+ tips?: string
+ defaultValue?: any
+} & {
+ options?: VisualEditorSelectOptions
+} & {
+ table?: VisualEditorTableOption
+}
+
+/*---------------------------------------switch-------------------------------------------*/
+interface EditorSwitchProp {
+ label: string
+ defaultValue?: boolean
+ tips?: string
+}
+
+export function createEditorSwitchProp({
+ label,
+ defaultValue,
+ tips
+}: EditorSwitchProp): VisualEditorProps {
+ return {
+ type: VisualEditorPropsType.switch,
+ label,
+ tips,
+ defaultValue
+ }
+}
+
+/*---------------------------------------input-------------------------------------------*/
+
+interface EditorInputProp {
+ label: string
+ defaultValue?: any
+ tips?: string
+}
+
+export function createEditorInputProp({
+ label,
+ defaultValue,
+ tips
+}: EditorInputProp): VisualEditorProps {
+ return {
+ type: VisualEditorPropsType.input,
+ label,
+ tips,
+ defaultValue
+ }
+}
+/*---------------------------------------InputNumber -------------------------------------------*/
+
+interface EditorInputNumberProp {
+ label: string
+ defaultValue?: any
+ tips?: string
+}
+
+export function createEditorInputNumberProp({
+ label,
+ defaultValue,
+ tips
+}: EditorInputNumberProp): VisualEditorProps {
+ return {
+ type: VisualEditorPropsType.inputNumber,
+ label,
+ tips,
+ defaultValue
+ }
+}
+
+/*---------------------------------------color-------------------------------------------*/
+
+export function createEditorColorProp(label: string, defaultValue?: string): VisualEditorProps {
+ return {
+ type: VisualEditorPropsType.color,
+ label,
+ defaultValue
+ }
+}
+
+/*---------------------------------------select-------------------------------------------*/
+
+export type VisualEditorSelectOptions = {
+ label: string
+ val: string | number | boolean | object
+}[]
+
+interface EditorSelectProp {
+ label: string
+ options: VisualEditorSelectOptions
+ defaultValue?: any
+ tips?: string
+}
+
+export function createEditorSelectProp({
+ label,
+ options,
+ defaultValue,
+ tips
+}: EditorSelectProp): VisualEditorProps {
+ return {
+ type: VisualEditorPropsType.select,
+ label,
+ defaultValue,
+ tips,
+ options
+ }
+}
+
+/*---------------------------------------table-------------------------------------------*/
+
+export type VisualEditorTableOption = {
+ options: {
+ label: string // 列显示文本
+ field: string // 列绑定的字段
+ }[]
+ showKey: string
+}
+
+interface EditorTableProp {
+ label: string
+ option: VisualEditorTableOption
+ defaultValue?: { label: string; value: string }[]
+}
+
+export function createEditorTableProp({
+ label,
+ option,
+ defaultValue
+}: EditorTableProp): VisualEditorProps {
+ return {
+ type: VisualEditorPropsType.table,
+ label,
+ table: option,
+ defaultValue
+ }
+}
diff --git a/src/visual-editor/visual-editor.utils.ts b/src/visual-editor/visual-editor.utils.ts
new file mode 100644
index 0000000..2b4dbc4
--- /dev/null
+++ b/src/visual-editor/visual-editor.utils.ts
@@ -0,0 +1,160 @@
+import { VisualEditorProps } from './visual-editor.props'
+import { inject, provide } from 'vue'
+import { useDotProp } from '@/visual-editor/utils/useDotProp'
+
+export interface VisualEditorBlockData {
+ _vid: string // 组件id 时间戳
+ moduleName: keyof ComponentModules // 组件所属的模块(基础组件、容器组件)
+ componentKey: string // 映射 VisualEditorConfig 中 componentMap 的 component对象
+ label: string // 组件标签名称
+ top: number // 组件的top定位
+ left: number // 组件的left定位
+ adjustPosition: boolean // 是否需要调整位置
+ focus: boolean // 当前是否为选中状态
+ zIndex: number // z-index值
+ width: number // 组件宽度
+ height: number // 组件高度
+ hasResize: boolean // 是否调整过宽度或者高度
+ props: Record // 组件的设计属性
+ model: Record // 绑定的字段
+ slotName?: string // 组件唯一标识
+ [prop: string]: any
+}
+
+export interface VisualEditorModelValue {
+ container: {
+ width: number
+ height: number
+ }
+ blocks?: VisualEditorBlockData[]
+}
+
+export interface VisualEditorComponent {
+ key: string // 组件名称
+ moduleName: keyof ComponentModules // 模块名称
+ _vid?: string // 组件id 时间戳
+ label: string
+ preview: () => JSX.Element
+ render: (data: {
+ props: any
+ model: any
+ block: VisualEditorBlockData
+ size: { width?: number; height?: number }
+ custom: Record
+ }) => JSX.Element
+ props?: Record
+ model?: Record
+ resize?: { width?: boolean; height?: boolean }
+}
+
+export interface VisualEditorMarkLines {
+ x: { left: number; showLeft: number }[]
+ y: { top: number; showTop: number }[]
+}
+
+export function createNewBlock({
+ component,
+ left,
+ top
+}: {
+ component: VisualEditorComponent
+ top: number
+ left: number
+}): VisualEditorBlockData {
+ component._vid = `${component._vid}`.startsWith('vid_') ? component._vid : `vid_${component._vid}`
+
+ return {
+ top,
+ left,
+ _vid: component._vid!,
+ moduleName: component.moduleName,
+ componentKey: component!.key,
+ label: component!.label,
+ adjustPosition: true,
+ focus: false,
+ zIndex: 0,
+ width: 0,
+ height: 0,
+ hasResize: false,
+ props: Object.keys(component.props || {}).reduce((prev, curr) => {
+ const { propObj, prop } = useDotProp(prev, curr)
+ if (component.props![curr]?.defaultValue) {
+ propObj[prop] = prev[curr] = component.props![curr]?.defaultValue
+ }
+ return prev
+ }, {}),
+ model: {}
+ }
+}
+
+export interface VisualDragEvent {
+ dragstart: {
+ on: (cb: () => void) => void
+ off: (cb: () => void) => void
+ emit: () => void
+ }
+ dragend: {
+ on: (cb: () => void) => void
+ off: (cb: () => void) => void
+ emit: () => void
+ }
+}
+
+export const VisualDragProvider = (() => {
+ const VISUAL_DRAG_PROVIDER = '@@VISUAL_DRAG_PROVIDER'
+ return {
+ provide: (data: VisualDragEvent) => {
+ provide(VISUAL_DRAG_PROVIDER, data)
+ },
+ inject: () => {
+ return inject(VISUAL_DRAG_PROVIDER) as VisualDragEvent
+ }
+ }
+})()
+
+// 组件模块
+export interface ComponentModules {
+ baseWidgets: VisualEditorComponent[] // 基础组件
+ containerComponents: VisualEditorComponent[] // 容器组件
+}
+
+export function createVisualEditorConfig() {
+ const componentModules: ComponentModules = {
+ baseWidgets: [],
+ containerComponents: []
+ }
+ // const componentList: VisualEditorComponent[] = []
+ const componentMap: Record = {}
+ return {
+ componentModules,
+ componentMap,
+ registry: <
+ _,
+ Props extends Record = {},
+ Model extends Record = {}
+ >(
+ moduleName: keyof ComponentModules,
+ key: string,
+ component: {
+ label: string
+ preview: () => JSX.Element
+ render: (data: {
+ props: { [k in keyof Props]: any }
+ model: Partial<{ [k in keyof Model]: any }>
+ block: VisualEditorBlockData
+ size: { width?: number; height?: number }
+ custom: Record
+ }) => JSX.Element
+ props?: Props
+ model?: Model
+ resize?: { width?: boolean; height?: boolean }
+ }
+ ) => {
+ const comp = { ...component, key, moduleName }
+ componentModules[moduleName].push(comp)
+ componentMap[key] = comp
+ }
+ }
+}
+
+export type VisualEditorConfig = ReturnType
diff --git a/src/visual-editor/visual.command.tsx b/src/visual-editor/visual.command.tsx
new file mode 100644
index 0000000..82cbb26
--- /dev/null
+++ b/src/visual-editor/visual.command.tsx
@@ -0,0 +1,232 @@
+import { useCommander } from './plugins/command.plugin'
+import { VisualEditorBlockData, VisualEditorModelValue } from './visual-editor.utils'
+import { cloneDeep } from 'lodash'
+
+export function useVisualCommand({
+ focusData,
+ updateBlocks,
+ dataModel,
+ dragstart,
+ dragend
+}: {
+ focusData: { value: { focus: VisualEditorBlockData[]; unFocus: VisualEditorBlockData[] } }
+ updateBlocks: (blocks?: VisualEditorBlockData[]) => void
+ dataModel: { value: VisualEditorModelValue }
+ dragstart: { on: (cb: () => void) => void; off: (cb: () => void) => void }
+ dragend: { on: (cb: () => void) => void; off: (cb: () => void) => void }
+}) {
+ const commander = useCommander()
+
+ /**
+ * 删除命令
+ * @author 卜启缘
+ * @date 2021/4/22 11:37 下午
+ */
+ commander.registry({
+ name: 'delete',
+ keyboard: ['backspace', 'delete', 'ctrl+d'],
+ execute: () => {
+ // console.log('执行删除命令')
+ const data = {
+ before: dataModel.value.blocks,
+ after: focusData.value.unFocus
+ }
+ return {
+ redo: () => {
+ // console.log('重做删除命令')
+ updateBlocks(cloneDeep(data.after))
+ },
+ undo: () => {
+ // console.log('撤回删除命令')
+ updateBlocks(cloneDeep(data.before))
+ }
+ }
+ }
+ })
+
+ /**
+ * 拖拽命令,适用于三种情况:
+ * - 从菜单拖拽组件到容器画布;
+ * - 在容器中拖拽组件调整位置
+ * - 拖拽调整组件的宽度和高度;
+ * @author 卜启缘
+ * @date 2021/4/22 11:38 下午
+ */
+ commander.registry({
+ name: 'drag',
+ init() {
+ this.data = { before: null as null | VisualEditorBlockData[] }
+ const handler = {
+ dragstart: () => (this.data.before = cloneDeep(dataModel.value.blocks)),
+ dragend: () => commander.state.commands.drag()
+ }
+ dragstart.on(handler.dragstart)
+ dragend.on(handler.dragend)
+ return () => {
+ dragstart.off(handler.dragstart)
+ dragend.off(handler.dragend)
+ }
+ },
+ execute() {
+ const before = cloneDeep(this.data.before)
+ const after = cloneDeep(dataModel.value.blocks)
+ return {
+ redo: () => {
+ updateBlocks(cloneDeep(after))
+ },
+ undo: () => {
+ updateBlocks(cloneDeep(before))
+ }
+ }
+ }
+ })
+
+ commander.registry({
+ name: 'clear',
+ execute: () => {
+ const data = {
+ before: cloneDeep(dataModel.value.blocks),
+ after: cloneDeep([])
+ }
+ return {
+ redo: () => {
+ updateBlocks(cloneDeep(data.after))
+ },
+ undo: () => {
+ updateBlocks(cloneDeep(data.before))
+ }
+ }
+ }
+ })
+
+ commander.registry({
+ name: 'placeTop',
+ keyboard: 'ctrl+up',
+ execute: () => {
+ const data = {
+ before: cloneDeep(dataModel.value.blocks),
+ after: cloneDeep(
+ (() => {
+ const { focus, unFocus } = focusData.value
+ const maxZIndex =
+ unFocus.reduce((prev, block) => Math.max(prev, block.zIndex), -Infinity) + 1
+ focus.forEach((block) => (block.zIndex = maxZIndex))
+ return cloneDeep(dataModel.value.blocks)
+ })()
+ )
+ }
+ return {
+ redo: () => {
+ updateBlocks(cloneDeep(data.after))
+ },
+ undo: () => {
+ updateBlocks(cloneDeep(data.before))
+ }
+ }
+ }
+ })
+
+ commander.registry({
+ name: 'placeBottom',
+ keyboard: 'ctrl+down',
+ execute: () => {
+ const data = {
+ before: cloneDeep(dataModel.value.blocks),
+ after: cloneDeep(
+ (() => {
+ const { focus, unFocus } = focusData.value
+ let minZIndex =
+ unFocus.reduce((prev, block) => Math.min(prev, block.zIndex), Infinity) - 1
+ if (minZIndex < 0) {
+ const dur = Math.abs(minZIndex)
+ unFocus.forEach((block) => (block.zIndex += dur))
+ minZIndex = 0
+ }
+ focus.forEach((block) => (block.zIndex = minZIndex))
+ return cloneDeep(dataModel.value.blocks)
+ })()
+ )
+ }
+ return {
+ redo: () => {
+ updateBlocks(cloneDeep(data.after))
+ },
+ undo: () => {
+ updateBlocks(cloneDeep(data.before))
+ }
+ }
+ }
+ })
+
+ commander.registry({
+ name: 'updateBlock',
+ execute: (newBlock: VisualEditorBlockData, oldBlock: VisualEditorBlockData) => {
+ let blocks = cloneDeep(dataModel.value.blocks || [])
+ const data = {
+ before: blocks,
+ after: (() => {
+ blocks = [...blocks]
+ const index = dataModel.value.blocks!.indexOf(oldBlock)
+ if (index > -1) {
+ blocks.splice(index, 1, newBlock)
+ }
+ return cloneDeep(blocks)
+ })()
+ }
+ return {
+ redo: () => {
+ updateBlocks(cloneDeep(data.after))
+ },
+ undo: () => {
+ updateBlocks(cloneDeep(data.before))
+ }
+ }
+ }
+ })
+
+ commander.registry({
+ name: 'updateModelValue',
+ execute: (val: VisualEditorModelValue) => {
+ const data = {
+ before: cloneDeep(dataModel.value),
+ after: cloneDeep(val)
+ }
+ return {
+ redo: () => {
+ dataModel.value = data.after
+ },
+ undo: () => {
+ dataModel.value = data.before
+ }
+ }
+ }
+ })
+
+ commander.registry({
+ name: 'selectAll',
+ followQueue: false,
+ keyboard: 'ctrl+a',
+ execute: () => {
+ return {
+ redo: () => {
+ ;(dataModel.value.blocks || []).forEach((block) => (block.focus = true))
+ }
+ }
+ }
+ })
+
+ commander.init()
+
+ return {
+ undo: () => commander.state.commands.undo(),
+ redo: () => commander.state.commands.redo(),
+ delete: () => commander.state.commands.delete(),
+ clear: () => commander.state.commands.clear(),
+ placeTop: () => commander.state.commands.placeTop(),
+ placeBottom: () => commander.state.commands.placeBottom(),
+ updateBlock: (newBlock: VisualEditorBlockData, oldBlock: VisualEditorBlockData) =>
+ commander.state.commands.updateBlock(newBlock, oldBlock),
+ updateModelValue: (val: VisualEditorModelValue) =>
+ commander.state.commands.updateModelValue(val)
+ }
+}
diff --git a/src/visual.config.tsx b/src/visual.config.tsx
new file mode 100644
index 0000000..2521ab4
--- /dev/null
+++ b/src/visual.config.tsx
@@ -0,0 +1,16 @@
+import { createVisualEditorConfig } from './visual-editor/visual-editor.utils'
+// import './visual.config.scss'
+import baseWidgets from '@/packages/base-widgets'
+import containerComponent from '@/packages/container-component'
+
+export const visualConfig = createVisualEditorConfig()
+// 注册基础控件
+Object.keys(baseWidgets).forEach((name: string) =>
+ visualConfig.registry('baseWidgets', name, baseWidgets[name])
+)
+// 注册容器组件
+Object.keys(containerComponent).forEach((name: string) =>
+ visualConfig.registry('containerComponents', name, containerComponent[name])
+)
+
+console.log('visualConfig:', visualConfig)
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..a50a9c4
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,38 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "module": "esnext",
+ "moduleResolution": "node",
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "allowSyntheticDefaultImports": true,
+ "strictFunctionTypes": false,
+ "jsx": "preserve",
+ "baseUrl": ".",
+ "allowJs": true,
+ "sourceMap": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "resolveJsonModule": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "experimentalDecorators": true,
+ "noImplicitAny": false,
+ "skipLibCheck": true,
+ "typeRoots": ["./node_modules/@types/", "./types"],
+ "types": ["vite/client", "webpack-env"],
+ "paths": {
+ "@/*": [
+ "src/*"
+ ]
+ },
+ "lib": [
+ "esnext",
+ "dom",
+ "dom.iterable",
+ "scripthost"
+ ]
+ },
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
+ "exclude": ["dist", "node_modules"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..509b669
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,73 @@
+import { ConfigEnv, defineConfig, loadEnv, UserConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import vueJsx from '@vitejs/plugin-vue-jsx'
+import { resolve } from 'path'
+import ViteComponents, { ElementPlusResolver, VantResolver } from 'vite-plugin-components'
+import styleImport from 'vite-plugin-style-import'
+import WindiCSS from 'vite-plugin-windicss'
+
+const CWD = process.cwd()
+
+// https://vitejs.dev/config/
+export default ({ command, mode }: ConfigEnv): UserConfig => {
+ // 环境变量
+ const { VITE_BASE_URL, VITE_DROP_CONSOLE } = loadEnv(mode, CWD)
+ return {
+ css: {
+ modules: {
+ localsConvention: 'camelCase' // 默认只支持驼峰,修改为同时支持横线和驼峰
+ }
+ },
+ plugins: [
+ vue(),
+ vueJsx(),
+ WindiCSS(),
+ ViteComponents({
+ // valid file extensions for components.
+ extensions: ['vue', 'tsx'],
+ customComponentResolvers: [ElementPlusResolver(), VantResolver()]
+ }),
+ styleImport({
+ libs: [
+ {
+ libraryName: 'element-plus',
+ esModule: true,
+ ensureStyleFile: true,
+ resolveStyle: (name) => {
+ name = name.slice(3)
+ return `element-plus/packages/theme-chalk/src/${name}.scss`
+ },
+ resolveComponent: (name) => {
+ return `element-plus/lib/${name}`
+ }
+ }
+ ]
+ })
+ ],
+ resolve: {
+ alias: {
+ '@': resolve(__dirname, 'src') // 设置 `@` 指向 `src` 目录
+ }
+ },
+ base: VITE_BASE_URL, // 设置打包路径
+ optimizeDeps: {
+ include: ['vue', 'vue-router', '@vueuse/core'],
+ exclude: ['vue-demi']
+ },
+ server: {
+ port: 8080, // 设置服务启动端口号
+ open: false, // 设置服务启动时是否自动打开浏览器
+ cors: true // 允许跨域
+
+ // 设置代理,根据我们项目实际情况配置
+ // proxy: {
+ // '/api': {
+ // target: 'http://xxx.xxx.xxx.xxx:x000',
+ // changeOrigin: true,
+ // secure: false,
+ // rewrite: (path) => path.replace('/api/', '/')
+ // }
+ // },
+ }
+ }
+}
diff --git a/windi.config.ts b/windi.config.ts
new file mode 100644
index 0000000..4291bf8
--- /dev/null
+++ b/windi.config.ts
@@ -0,0 +1,38 @@
+import { defineConfig } from 'vite-plugin-windicss'
+import colors from 'windicss/colors'
+import typography from 'windicss/plugin/typography'
+
+export default defineConfig({
+ darkMode: 'class',
+ plugins: [typography()],
+ theme: {
+ extend: {
+ typography: {
+ DEFAULT: {
+ css: {
+ maxWidth: '65ch',
+ color: 'inherit',
+ a: {
+ color: 'inherit',
+ opacity: 0.75,
+ fontWeight: '500',
+ textDecoration: 'underline',
+ '&:hover': {
+ opacity: 1,
+ color: colors.teal[600]
+ }
+ },
+ b: { color: 'inherit' },
+ strong: { color: 'inherit' },
+ em: { color: 'inherit' },
+ h1: { color: 'inherit' },
+ h2: { color: 'inherit' },
+ h3: { color: 'inherit' },
+ h4: { color: 'inherit' },
+ code: { color: 'inherit' }
+ }
+ }
+ }
+ }
+ }
+})
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..79e7a25
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4815 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
+ integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
+ integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
+ dependencies:
+ "@babel/highlight" "^7.12.13"
+
+"@babel/compat-data@^7.13.15":
+ version "7.13.15"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4"
+ integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==
+
+"@babel/core@^7.12.10":
+ version "7.13.16"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a"
+ integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@babel/generator" "^7.13.16"
+ "@babel/helper-compilation-targets" "^7.13.16"
+ "@babel/helper-module-transforms" "^7.13.14"
+ "@babel/helpers" "^7.13.16"
+ "@babel/parser" "^7.13.16"
+ "@babel/template" "^7.12.13"
+ "@babel/traverse" "^7.13.15"
+ "@babel/types" "^7.13.16"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.1.2"
+ semver "^6.3.0"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.13.16":
+ version "7.13.16"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14"
+ integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==
+ dependencies:
+ "@babel/types" "^7.13.16"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/helper-compilation-targets@^7.13.16":
+ version "7.13.16"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c"
+ integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==
+ dependencies:
+ "@babel/compat-data" "^7.13.15"
+ "@babel/helper-validator-option" "^7.12.17"
+ browserslist "^4.14.5"
+ semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.13.0":
+ version "7.13.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6"
+ integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==
+ dependencies:
+ "@babel/helper-function-name" "^7.12.13"
+ "@babel/helper-member-expression-to-functions" "^7.13.0"
+ "@babel/helper-optimise-call-expression" "^7.12.13"
+ "@babel/helper-replace-supers" "^7.13.0"
+ "@babel/helper-split-export-declaration" "^7.12.13"
+
+"@babel/helper-function-name@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a"
+ integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.12.13"
+ "@babel/template" "^7.12.13"
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-get-function-arity@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
+ integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12":
+ version "7.13.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72"
+ integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==
+ dependencies:
+ "@babel/types" "^7.13.12"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.13.12":
+ version "7.13.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
+ integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==
+ dependencies:
+ "@babel/types" "^7.13.12"
+
+"@babel/helper-module-transforms@^7.13.14":
+ version "7.13.14"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef"
+ integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==
+ dependencies:
+ "@babel/helper-module-imports" "^7.13.12"
+ "@babel/helper-replace-supers" "^7.13.12"
+ "@babel/helper-simple-access" "^7.13.12"
+ "@babel/helper-split-export-declaration" "^7.12.13"
+ "@babel/helper-validator-identifier" "^7.12.11"
+ "@babel/template" "^7.12.13"
+ "@babel/traverse" "^7.13.13"
+ "@babel/types" "^7.13.14"
+
+"@babel/helper-optimise-call-expression@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea"
+ integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0":
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
+ integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
+
+"@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12":
+ version "7.13.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804"
+ integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.13.12"
+ "@babel/helper-optimise-call-expression" "^7.12.13"
+ "@babel/traverse" "^7.13.0"
+ "@babel/types" "^7.13.12"
+
+"@babel/helper-simple-access@^7.13.12":
+ version "7.13.12"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6"
+ integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==
+ dependencies:
+ "@babel/types" "^7.13.12"
+
+"@babel/helper-split-export-declaration@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05"
+ integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==
+ dependencies:
+ "@babel/types" "^7.12.13"
+
+"@babel/helper-validator-identifier@^7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
+ integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
+
+"@babel/helper-validator-option@^7.12.17":
+ version "7.12.17"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
+ integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==
+
+"@babel/helpers@^7.13.16":
+ version "7.13.17"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6"
+ integrity sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==
+ dependencies:
+ "@babel/template" "^7.12.13"
+ "@babel/traverse" "^7.13.17"
+ "@babel/types" "^7.13.17"
+
+"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
+ version "7.13.10"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
+ integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.12.11"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.12.0", "@babel/parser@^7.13.9":
+ version "7.13.15"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.15.tgz#8e66775fb523599acb6a289e12929fa5ab0954d8"
+ integrity sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==
+
+"@babel/parser@^7.12.13", "@babel/parser@^7.13.16":
+ version "7.13.16"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37"
+ integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==
+
+"@babel/plugin-syntax-import-meta@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-jsx@^7.0.0":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15"
+ integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-typescript@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474"
+ integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-transform-typescript@^7.12.1":
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853"
+ integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.13.0"
+ "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/plugin-syntax-typescript" "^7.12.13"
+
+"@babel/template@^7.0.0", "@babel/template@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327"
+ integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@babel/parser" "^7.12.13"
+ "@babel/types" "^7.12.13"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17":
+ version "7.13.17"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3"
+ integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@babel/generator" "^7.13.16"
+ "@babel/helper-function-name" "^7.12.13"
+ "@babel/helper-split-export-declaration" "^7.12.13"
+ "@babel/parser" "^7.13.16"
+ "@babel/types" "^7.13.17"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17":
+ version "7.13.17"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4"
+ integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.12.11"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.12.0", "@babel/types@^7.13.0":
+ version "7.13.14"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d"
+ integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.12.11"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
+"@commitlint/cli@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-12.1.1.tgz#740370e557a8a17f415052821cdd5276ecb0ab98"
+ integrity sha512-SB67/s6VJ50seoPx/Sr2gj1fMzKrx+udgarecGdr8h43ah+M2e22gjQJ7xHv5KwyPQ+6ug1YOMCL34ubT4zupQ==
+ dependencies:
+ "@commitlint/format" "^12.1.1"
+ "@commitlint/lint" "^12.1.1"
+ "@commitlint/load" "^12.1.1"
+ "@commitlint/read" "^12.1.1"
+ "@commitlint/types" "^12.1.1"
+ get-stdin "8.0.0"
+ lodash "^4.17.19"
+ resolve-from "5.0.0"
+ resolve-global "1.0.0"
+ yargs "^16.2.0"
+
+"@commitlint/config-conventional@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-12.1.1.tgz#73dd3b1a7912138420d248f334f15c94c250bc9e"
+ integrity sha512-15CqbXMsQiEb0qbzjEHe2OkzaXPYSp7RxaS6KoSVk/4W0QiigquavQ+M0huBZze92h0lMS6Pxoq4AJ5CQ3D+iQ==
+ dependencies:
+ conventional-changelog-conventionalcommits "^4.3.1"
+
+"@commitlint/ensure@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-12.1.1.tgz#bcefc85f7f8a41bb31f67d7a8966e322b47a6e43"
+ integrity sha512-XEUQvUjzBVQM7Uv8vYz+c7PDukFvx0AvQEyX/V+PaTkCK/xPvexu7FLbFwvypjSt9BPMf+T/rhB1hVmldkd6lw==
+ dependencies:
+ "@commitlint/types" "^12.1.1"
+ lodash "^4.17.19"
+
+"@commitlint/execute-rule@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.1.1.tgz#8aad1d46fb78b3199e4ae36debdc93570bf765ea"
+ integrity sha512-6mplMGvLCKF5LieL7BRhydpg32tm6LICnWQADrWU4S5g9PKi2utNvhiaiuNPoHUXr29RdbNaGNcyyPv8DSjJsQ==
+
+"@commitlint/format@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-12.1.1.tgz#a6b14f8605171374eecc2c463098d63c127ab7df"
+ integrity sha512-bTAoOryTFLqls17JTaRwk2WDVOP0NwuG4F/JPK8RaF6DMZNVQTfajkgTxFENNZRnESfau1BvivvEXfUAW2ZsvA==
+ dependencies:
+ "@commitlint/types" "^12.1.1"
+ chalk "^4.0.0"
+
+"@commitlint/is-ignored@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-12.1.1.tgz#6075a5cd2dcda7b6ec93322f5dbe2142cfbb3248"
+ integrity sha512-Sn4fsnWX+wLAJOD/UZeoVruB98te1TyPYRiDEq0MhRJAQIrP+7jE/O3/ass68AAMq00HvH3OK9kt4UBXggcGjA==
+ dependencies:
+ "@commitlint/types" "^12.1.1"
+ semver "7.3.5"
+
+"@commitlint/lint@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-12.1.1.tgz#cdd898af6eadba8f9e71d7f1255b5a479a757078"
+ integrity sha512-FFFPpku/E0svL1jaUVqosuZJDDWiNWYBlUw5ZEljh3MwWRcoaWtMIX5bseX+IvHpFZsCTAiBs1kCgNulCi0UvA==
+ dependencies:
+ "@commitlint/is-ignored" "^12.1.1"
+ "@commitlint/parse" "^12.1.1"
+ "@commitlint/rules" "^12.1.1"
+ "@commitlint/types" "^12.1.1"
+
+"@commitlint/load@>6.1.1", "@commitlint/load@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.1.1.tgz#5a7fb8be11e520931d1237c5e8dc401b7cc9c6c1"
+ integrity sha512-qOQtgNdJRULUQWP9jkpTwhj7aEtnqUtqeUpbQ9rjS+GIUST65HZbteNUX4S0mAEGPWqy2aK5xGd73cUfFSvuuw==
+ dependencies:
+ "@commitlint/execute-rule" "^12.1.1"
+ "@commitlint/resolve-extends" "^12.1.1"
+ "@commitlint/types" "^12.1.1"
+ chalk "^4.0.0"
+ cosmiconfig "^7.0.0"
+ lodash "^4.17.19"
+ resolve-from "^5.0.0"
+
+"@commitlint/message@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-12.1.1.tgz#56eb1dbb561e85e9295380a46ff3b09bc93cac65"
+ integrity sha512-RakDSLAiOligXjhbLahV8HowF4K75pZIcs0+Ii9Q8Gz5H3DWf1Ngit7alFTWfcbf/+DTjSzVPov5HiwQZPIBUg==
+
+"@commitlint/parse@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-12.1.1.tgz#3e49d6dc113d59cf266af0db99e320e933108c56"
+ integrity sha512-nuljIvAbBDr93DgL0wCArftEIhjSghawAwhvrKNV9FFcqAJqfVqitwMxJrNDCQ5pgUMCSKULLOEv+dA0bLlTEQ==
+ dependencies:
+ "@commitlint/types" "^12.1.1"
+ conventional-changelog-angular "^5.0.11"
+ conventional-commits-parser "^3.0.0"
+
+"@commitlint/read@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-12.1.1.tgz#22a2d7fd1eab5e38b9b262311af28ac42f9a5097"
+ integrity sha512-1k0CQEoZIdixvmqZRKEcWdj2XiKS7SlizEOJ1SE99Qui5d5FlBey8eaooTGgmpR6zObpIHJehtEPzM3VzUT3qA==
+ dependencies:
+ "@commitlint/top-level" "^12.1.1"
+ "@commitlint/types" "^12.1.1"
+ fs-extra "^9.0.0"
+ git-raw-commits "^2.0.0"
+
+"@commitlint/resolve-extends@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.1.1.tgz#80a78b0940775d17888dd2985b52f93d93e0a885"
+ integrity sha512-/DXRt0S0U3o9lq5cc8OL1Lkx0IjW0HcDWjUkUXshAajBIKBYSJB8x/loNCi1krNEJ8SwLXUEFt5OLxNO6wE9yQ==
+ dependencies:
+ import-fresh "^3.0.0"
+ lodash "^4.17.19"
+ resolve-from "^5.0.0"
+ resolve-global "^1.0.0"
+
+"@commitlint/rules@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-12.1.1.tgz#d59182a837d2addf301a3a4ef83316ae7e70248f"
+ integrity sha512-oCcLF/ykcJfhM2DeeaDyrgdaiuKsqIPNocugdPj2WEyhSYqmx1/u18CV96LAtW+WyyiOLCCeiZwiQutx3T5nXg==
+ dependencies:
+ "@commitlint/ensure" "^12.1.1"
+ "@commitlint/message" "^12.1.1"
+ "@commitlint/to-lines" "^12.1.1"
+ "@commitlint/types" "^12.1.1"
+
+"@commitlint/to-lines@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-12.1.1.tgz#40fbed1767d637249ce49b311a51909d8361ecf8"
+ integrity sha512-W23AH2XF5rI27MOAPSSr0TUDoRe7ZbFoRtYhFnPu2MBmcuDA9Tmfd9N5sM2tBXtdE26uq3SazwKqGt1OoGAilQ==
+
+"@commitlint/top-level@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-12.1.1.tgz#228df8fc36b6d7ea7ad149badfb6ef53dbc7001d"
+ integrity sha512-g7uRbr81QEIg+pbii0OkE17Zh/2C/f6dSmiMDVRn1S0+hNHR1bENCh18hVUKcV/qKTUsKkFlhhWXM9mQBfxQJw==
+ dependencies:
+ find-up "^5.0.0"
+
+"@commitlint/types@^12.1.1":
+ version "12.1.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.1.1.tgz#8e651f6af0171cd4f8d464c6c37a7cf63ee071bd"
+ integrity sha512-+qGH+s2Lo6qwacV2X3/ZypZwaAI84ift+1HBjXdXtI/q0F5NtmXucV3lcQOTviMTNiJhq4qWON2fjci2NItASw==
+ dependencies:
+ chalk "^4.0.0"
+
+"@eslint/eslintrc@^0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
+ integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
+"@nodelib/fs.scandir@2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
+ integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.4"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"
+ integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"
+ integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.4"
+ fastq "^1.6.0"
+
+"@popperjs/core@^2.4.4", "@popperjs/core@^2.9.2":
+ version "2.9.2"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.2.tgz#adea7b6953cbb34651766b0548468e743c6a2353"
+ integrity sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==
+
+"@rollup/pluginutils@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838"
+ integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==
+ dependencies:
+ estree-walker "^2.0.1"
+ picomatch "^2.2.2"
+
+"@types/json-schema@^7.0.3":
+ version "7.0.7"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+ integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+
+"@types/lodash@^4.14.161":
+ version "4.14.168"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008"
+ integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==
+
+"@types/minimist@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
+ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
+
+"@types/node@^14.14.41":
+ version "14.14.41"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615"
+ integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==
+
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
+"@typescript-eslint/eslint-plugin@^4.21.0":
+ version "4.22.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz#3d5f29bb59e61a9dba1513d491b059e536e16dbc"
+ integrity sha512-U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "4.22.0"
+ "@typescript-eslint/scope-manager" "4.22.0"
+ debug "^4.1.1"
+ functional-red-black-tree "^1.0.1"
+ lodash "^4.17.15"
+ regexpp "^3.0.0"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@4.22.0":
+ version "4.22.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz#68765167cca531178e7b650a53456e6e0bef3b1f"
+ integrity sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/scope-manager" "4.22.0"
+ "@typescript-eslint/types" "4.22.0"
+ "@typescript-eslint/typescript-estree" "4.22.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
+"@typescript-eslint/parser@^4.21.0":
+ version "4.22.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.0.tgz#e1637327fcf796c641fe55f73530e90b16ac8fe8"
+ integrity sha512-z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q==
+ dependencies:
+ "@typescript-eslint/scope-manager" "4.22.0"
+ "@typescript-eslint/types" "4.22.0"
+ "@typescript-eslint/typescript-estree" "4.22.0"
+ debug "^4.1.1"
+
+"@typescript-eslint/scope-manager@4.22.0":
+ version "4.22.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz#ed411545e61161a8d702e703a4b7d96ec065b09a"
+ integrity sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q==
+ dependencies:
+ "@typescript-eslint/types" "4.22.0"
+ "@typescript-eslint/visitor-keys" "4.22.0"
+
+"@typescript-eslint/types@4.22.0":
+ version "4.22.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.0.tgz#0ca6fde5b68daf6dba133f30959cc0688c8dd0b6"
+ integrity sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA==
+
+"@typescript-eslint/typescript-estree@4.22.0":
+ version "4.22.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz#b5d95d6d366ff3b72f5168c75775a3e46250d05c"
+ integrity sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg==
+ dependencies:
+ "@typescript-eslint/types" "4.22.0"
+ "@typescript-eslint/visitor-keys" "4.22.0"
+ debug "^4.1.1"
+ globby "^11.0.1"
+ is-glob "^4.0.1"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/visitor-keys@4.22.0":
+ version "4.22.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz#169dae26d3c122935da7528c839f42a8a42f6e47"
+ integrity sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw==
+ dependencies:
+ "@typescript-eslint/types" "4.22.0"
+ eslint-visitor-keys "^2.0.0"
+
+"@vant/icons@^1.5.3":
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/@vant/icons/-/icons-1.5.3.tgz#b7779f67bf608d417a82452fbede406dfa46b439"
+ integrity sha512-OQaJqAWN6quHicWje4buknX9zcDo3UDy3X4nrk/ldnr9Fj8Str4nMtQbMbIrCMtmjQdP2ei769uuY508dudrjA==
+
+"@vant/lazyload@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@vant/lazyload/-/lazyload-1.2.0.tgz#62e9779bd7844ad8f71c2ca2bf852e6147c7a86d"
+ integrity sha512-QsqNm8nNat4z9TdrTI4YkDXZXgg3dbGhHf7tC4mhel+gJ0u2WZcoMYKWkzQXvO+vo395cByT5iUE5a72360B2Q==
+
+"@vant/popperjs@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@vant/popperjs/-/popperjs-1.1.0.tgz#b4edee5bbfa6fb18705986e313d4fd5f17942a0f"
+ integrity sha512-8MD1gz146awV/uPxYjz4pet22f7a9YVKqk7T+gFkWFwT9mEcrIUEg/xPrdOnWKLP9puXyYtm7oVfSDSefZ/p/w==
+ dependencies:
+ "@popperjs/core" "^2.9.2"
+
+"@vant/touch-emulator@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@vant/touch-emulator/-/touch-emulator-1.2.0.tgz#486300b23e57db9ce9231a04e0a0c621c68692d8"
+ integrity sha512-sJ97zU85zOq51qoi7+CpBEcOyH3CitjP1KC7/GQwqaurUJni+EP7/F9n0HMnAh8GXMjgtgDBNJ5z48x+coNKYQ==
+
+"@vant/use@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@vant/use/-/use-1.1.1.tgz#fc39c1e918d6027cae52d0cb0c210a1134a7ac6c"
+ integrity sha512-aW7L6d1npRR18IhZ90gw92tYNQZSJecCLxzjnB8+fhUvrjQC97LHdDq0XJLEGB76ZmW0yaSzttfZRnTcj4xUFw==
+
+"@vitejs/plugin-vue-jsx@^1.1.3":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.1.3.tgz#426c68f8a367a603acb82fca6e2b12506ba9fc8e"
+ integrity sha512-R9wsuNDEKTDG5oXJaFictrw9E5uokniGzi6tvyO5Od02tE4TnOPfgY2BeHKB4f4ldgiZRMhdUhNEsgjoWnct6A==
+ dependencies:
+ "@babel/core" "^7.12.10"
+ "@babel/plugin-syntax-import-meta" "^7.10.4"
+ "@babel/plugin-transform-typescript" "^7.12.1"
+ "@vue/babel-plugin-jsx" "^1.0.3"
+ hash-sum "^2.0.0"
+
+"@vitejs/plugin-vue@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.1.tgz#6de49436fc346f829a56676066428e3f011522ac"
+ integrity sha512-TG+LbEUNwfFrx1VyN+iq+PsiGd9MT16hUdJY+BnMXj3MrLAF8m3VYUspTDM3aXoh48YDmAkMjG4gWFRg3lbG5A==
+
+"@vue/babel-helper-vue-transform-on@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc"
+ integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==
+
+"@vue/babel-plugin-jsx@^1.0.3":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.0.5.tgz#72820d5fb371c41d2113b31b16787995e8bdf69a"
+ integrity sha512-Jtipy7oI0am5e1q5Ahunm/cCcCh5ssf5VkMQsLR383S3un5Qh7NBfxgSK9kmWf4IXJEhDeYp9kHv8G/EnMai9A==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+ "@babel/template" "^7.0.0"
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ "@vue/babel-helper-vue-transform-on" "^1.0.2"
+ camelcase "^6.0.0"
+ html-tags "^3.1.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-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-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-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/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/runtime-core@3.0.11":
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.11.tgz#c52dfc6acf3215493623552c1c2919080c562e44"
+ integrity sha512-87XPNwHfz9JkmOlayBeCCfMh9PT2NBnv795DSbi//C/RaAnc/bGZgECjmkD7oXJ526BZbgk9QZBPdFT8KMxkAg==
+ dependencies:
+ "@vue/reactivity" "3.0.11"
+ "@vue/shared" "3.0.11"
+
+"@vue/runtime-dom@3.0.11":
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.0.11.tgz#7a552df21907942721feb6961c418e222a699337"
+ integrity sha512-jm3FVQESY3y2hKZ2wlkcmFDDyqaPyU3p1IdAX92zTNeCH7I8zZ37PtlE1b9NlCtzV53WjB4TZAYh9yDCMIEumA==
+ dependencies:
+ "@vue/runtime-core" "3.0.11"
+ "@vue/shared" "3.0.11"
+ 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==
+
+"@vueuse/core@^4.9.1":
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-4.9.1.tgz#e5805222a26107b16518cdb8459569b5b7d58c90"
+ integrity sha512-BmmEEaistQqNsGlmmpwS2fRkzpf/2riBnUAmm4uDOj4ZDUpssCvCyTeOoIGbZYg92Hzaz0YF9qSeE7megjYLCg==
+ dependencies:
+ "@vueuse/shared" "4.9.1"
+ vue-demi "*"
+
+"@vueuse/shared@4.9.1":
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-4.9.1.tgz#ff3fa7c35f77a1f30e7c568de9113fc42bfb4019"
+ integrity sha512-5jj+/Ve7e82LP4OFpU8jBRhjC7QGUxI95U2m4bB2BGuWA8v6r2EVV7AVkU/rXZ5EvRoYkAnUs8jWRCj0QlD6XQ==
+ dependencies:
+ vue-demi "*"
+
+"@windicss/plugin-utils@0.14.6":
+ version "0.14.6"
+ resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-0.14.6.tgz#25d3fdda3a8b0a560f3daed6588abd0a4fbef195"
+ integrity sha512-jF+dJ6D4/UqVHSbH5kCdSoPnklLTZDf+seck4unICI0qyzmyPsrO15nmSS/gIvnmCedUfBrQj1MfYOX0tccFjQ==
+ dependencies:
+ debug "^4.3.2"
+ fast-glob "^3.2.5"
+ magic-string "^0.25.7"
+ micromatch "^4.0.4"
+ pirates "^4.0.1"
+ sucrase "^3.17.1"
+ windicss "^2.5.14"
+
+JSONStream@^1.0.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+ integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
+acorn-jsx@^5.2.0, acorn-jsx@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
+ integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+
+acorn@^7.1.1, acorn@^7.4.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv@^6.10.0, ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^8.0.1:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.1.0.tgz#45d5d3d36c7cdd808930cc3e603cf6200dbeb736"
+ integrity sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-escapes@^4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@~3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-ify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
+ integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
+
+array-includes@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
+ integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ get-intrinsic "^1.1.1"
+ is-string "^1.0.5"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+array.prototype.flat@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
+ integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-validator@^3.4.0:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-3.5.1.tgz#cd62b9688b2465f48420e27adb47760ab1b5559f"
+ integrity sha512-DDmKA7sdSAJtTVeNZHrnr2yojfFaoeW8MfQN8CeuXg8DDQHTqKk9Fdv38dSvnesHoO8MUwMI2HphOeSyIF+wmQ==
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+atob@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+axios@^0.21.1:
+ version "0.21.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
+ integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
+ dependencies:
+ follow-redirects "^1.10.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+big-integer@^1.6.17:
+ version "1.6.48"
+ resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e"
+ integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+binary@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79"
+ integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=
+ dependencies:
+ buffers "~0.1.1"
+ chainsaw "~0.1.0"
+
+bluebird@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bluebird@~3.4.1:
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
+ integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.14.5:
+ version "4.16.5"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae"
+ integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==
+ dependencies:
+ caniuse-lite "^1.0.30001214"
+ colorette "^1.2.2"
+ electron-to-chromium "^1.3.719"
+ escalade "^3.1.1"
+ node-releases "^1.1.71"
+
+buffer-indexof-polyfill@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c"
+ integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==
+
+buffers@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"
+ integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s=
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cachedir@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e"
+ integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+ integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+ dependencies:
+ pascal-case "^3.1.2"
+ tslib "^2.0.3"
+
+camelcase-keys@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
+ integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
+ dependencies:
+ camelcase "^5.3.1"
+ map-obj "^4.0.0"
+ quick-lru "^4.0.1"
+
+camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
+ integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+
+caniuse-lite@^1.0.30001214:
+ version "1.0.30001216"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001216.tgz#47418a082a4f952d14d8964ae739e25efb2060a9"
+ integrity sha512-1uU+ww/n5WCJRwUcc9UH/W6925Se5aNnem/G5QaSDga2HzvjYMs8vRbekGUN/PnTZ7ezTHcxxTEb9fgiMYwH6Q==
+
+capital-case@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669"
+ integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
+chainsaw@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98"
+ integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=
+ dependencies:
+ traverse ">=0.3.0 <0.4"
+
+chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0, chalk@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+change-case@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12"
+ integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==
+ dependencies:
+ camel-case "^4.1.2"
+ capital-case "^1.0.4"
+ constant-case "^3.0.4"
+ dot-case "^3.0.4"
+ header-case "^2.0.4"
+ no-case "^3.0.4"
+ param-case "^3.0.4"
+ pascal-case "^3.1.2"
+ path-case "^3.0.4"
+ sentence-case "^3.0.4"
+ snake-case "^3.0.4"
+ tslib "^2.0.3"
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
+ integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.5.0"
+ optionalDependencies:
+ fsevents "~2.3.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-truncate@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+ integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+ dependencies:
+ slice-ansi "^3.0.0"
+ string-width "^4.2.0"
+
+cli-width@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colorette@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
+ integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commander@^6.2.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
+ integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
+
+commitizen@^4.0.3, commitizen@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.2.3.tgz#088d0ef72500240d331b11e02e288223667c1475"
+ integrity sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ==
+ dependencies:
+ cachedir "2.2.0"
+ cz-conventional-changelog "3.2.0"
+ dedent "0.7.0"
+ detect-indent "6.0.0"
+ find-node-modules "2.0.0"
+ find-root "1.1.0"
+ fs-extra "8.1.0"
+ glob "7.1.4"
+ inquirer "6.5.2"
+ is-utf8 "^0.2.1"
+ lodash "^4.17.20"
+ minimist "1.2.5"
+ strip-bom "4.0.0"
+ strip-json-comments "3.0.1"
+
+compare-func@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
+ integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^5.1.0"
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+consolidate@^0.16.0:
+ version "0.16.0"
+ resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16"
+ integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==
+ dependencies:
+ bluebird "^3.7.2"
+
+constant-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1"
+ integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case "^2.0.2"
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+conventional-changelog-angular@^5.0.11:
+ version "5.0.12"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9"
+ integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==
+ dependencies:
+ compare-func "^2.0.0"
+ q "^1.5.1"
+
+conventional-changelog-conventionalcommits@^4.3.1:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz#a02e0b06d11d342fdc0f00c91d78265ed0bc0a62"
+ integrity sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw==
+ dependencies:
+ compare-func "^2.0.0"
+ lodash "^4.17.15"
+ q "^1.5.1"
+
+conventional-commit-types@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b"
+ integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==
+
+conventional-commits-parser@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2"
+ integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==
+ dependencies:
+ JSONStream "^1.0.4"
+ is-text-path "^1.0.1"
+ lodash "^4.17.15"
+ meow "^8.0.0"
+ split2 "^3.0.0"
+ through2 "^4.0.0"
+ trim-off-newlines "^1.0.0"
+
+convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
+ integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+csstype@^2.6.8:
+ version "2.6.16"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39"
+ integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==
+
+cz-conventional-changelog@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz#6aef1f892d64113343d7e455529089ac9f20e477"
+ integrity sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==
+ dependencies:
+ chalk "^2.4.1"
+ commitizen "^4.0.3"
+ conventional-commit-types "^3.0.0"
+ lodash.map "^4.5.1"
+ longest "^2.0.1"
+ word-wrap "^1.0.3"
+ optionalDependencies:
+ "@commitlint/load" ">6.1.1"
+
+cz-conventional-changelog@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2"
+ integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==
+ dependencies:
+ chalk "^2.4.1"
+ commitizen "^4.0.3"
+ conventional-commit-types "^3.0.0"
+ lodash.map "^4.5.1"
+ longest "^2.0.1"
+ word-wrap "^1.0.3"
+ optionalDependencies:
+ "@commitlint/load" ">6.1.1"
+
+cz-customizable@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/cz-customizable/-/cz-customizable-6.3.0.tgz#1b24e5b84e1fccaa18ad837612b233b8c51d7882"
+ integrity sha512-MWGmWa45v4Ds3NJNNwQc3GCFdjtH3k4ypDWoWkwultMVLf7aOHR9VaXGYGZHLOQS4sMfbkBSjNUYoXCSmLuRSA==
+ dependencies:
+ editor "1.0.0"
+ find-config "^1.0.0"
+ inquirer "^6.3.1"
+ lodash "^4.17.19"
+ temp "^0.9.0"
+ word-wrap "^1.2.3"
+
+dargs@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
+ integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
+
+dayjs@1.x:
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2"
+ integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==
+
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
+ integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
+ dependencies:
+ ms "2.1.2"
+
+decamelize-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+dedent@0.7.0, dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-is@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-indent@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
+ integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
+
+dexie@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.0.3.tgz#ede63849dfe5f07e13e99bb72a040e8ac1d29dab"
+ integrity sha512-BSFhGpngnCl1DOr+8YNwBDobRMH0ziJs2vts69VilwetHYOtEDcLqo7d/XiIphM0tJZ2rPPyAGd31lgH2Ln3nw==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dot-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+ integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+dot-prop@^5.1.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
+ integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
+ dependencies:
+ is-obj "^2.0.0"
+
+duplexer2@~0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=
+ dependencies:
+ readable-stream "^2.0.2"
+
+editor@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742"
+ integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=
+
+electron-to-chromium@^1.3.719:
+ version "1.3.720"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.720.tgz#f5d66df8754d993006b7b2ded15ff7738c58bd94"
+ integrity sha512-B6zLTxxaOFP4WZm6DrvgRk8kLFYWNhQ5TrHMC0l5WtkMXhU5UbnvWoTfeEwqOruUSlNMhVLfYak7REX6oC5Yfw==
+
+element-plus@^1.0.2-beta.41:
+ version "1.0.2-beta.41"
+ resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-1.0.2-beta.41.tgz#9c234b536b3401d042505c003e579bd65081f0f0"
+ integrity sha512-GikmQdajaKB5oLxfHxhKXGXtiNoaN1wYiLr9aRx+yxwLx3nPDfoBx60+nrZoN6BOCk2M0HjBVj9TtA214WLRYw==
+ dependencies:
+ "@popperjs/core" "^2.4.4"
+ "@types/lodash" "^4.14.161"
+ async-validator "^3.4.0"
+ dayjs "1.x"
+ lodash "^4.17.20"
+ mitt "^2.1.0"
+ normalize-wheel "^1.0.1"
+ resize-observer-polyfill "^1.5.1"
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enquirer@^2.3.5, enquirer@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
+ version "1.18.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
+ integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
+ dependencies:
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ get-intrinsic "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.2"
+ is-callable "^1.2.3"
+ is-negative-zero "^2.0.1"
+ is-regex "^1.1.2"
+ is-string "^1.0.5"
+ object-inspect "^1.9.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.4"
+ string.prototype.trimstart "^1.0.4"
+ unbox-primitive "^1.0.0"
+
+es-module-lexer@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e"
+ integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+esbuild@^0.9.3:
+ version "0.9.7"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.7.tgz#ea0d639cbe4b88ec25fbed4d6ff00c8d788ef70b"
+ integrity sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-config-prettier@^8.1.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.2.0.tgz#78de77d63bca8e9e59dae75a614b5299925bb7b3"
+ integrity sha512-dWV9EVeSo2qodOPi1iBYU/x6F6diHv8uujxbxr77xExs3zTAlNXvVZKiyLsQGNz7yPV2K49JY5WjPzNIuDc2Bw==
+
+eslint-import-resolver-node@^0.3.4:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
+ integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.13.1"
+
+eslint-module-utils@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
+ integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
+ dependencies:
+ debug "^2.6.9"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-import@^2.22.1:
+ version "2.22.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
+ integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
+ dependencies:
+ array-includes "^3.1.1"
+ array.prototype.flat "^1.2.3"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.4"
+ eslint-module-utils "^2.6.0"
+ has "^1.0.3"
+ minimatch "^3.0.4"
+ object.values "^1.1.1"
+ read-pkg-up "^2.0.0"
+ resolve "^1.17.0"
+ tsconfig-paths "^3.9.0"
+
+eslint-plugin-prettier@^3.3.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7"
+ integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==
+ dependencies:
+ prettier-linter-helpers "^1.0.0"
+
+eslint-plugin-vue@^7.8.0:
+ version "7.9.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz#f8e83a2a908f4c43fc8304f5401d4ff671f3d560"
+ integrity sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==
+ dependencies:
+ eslint-utils "^2.1.0"
+ natural-compare "^1.4.0"
+ semver "^7.3.2"
+ vue-eslint-parser "^7.6.0"
+
+eslint-scope@^5.0.0, eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^2.0.0, eslint-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
+ integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+
+eslint@^7.24.0:
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.24.0.tgz#2e44fa62d93892bfdb100521f17345ba54b8513a"
+ integrity sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==
+ dependencies:
+ "@babel/code-frame" "7.12.11"
+ "@eslint/eslintrc" "^0.4.0"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.1"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ file-entry-cache "^6.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^13.6.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash "^4.17.21"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^6.0.4"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
+ integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-jsx "^5.2.0"
+ eslint-visitor-keys "^1.1.0"
+
+espree@^7.3.0, espree@^7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
+ integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^1.3.0"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+estree-walker@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+execa@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
+ integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-diff@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+ integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+
+fast-glob@^3.1.1, fast-glob@^3.2.5:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+ integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastq@^1.6.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
+ integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
+ dependencies:
+ reusify "^1.0.4"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+figures@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-config@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/find-config/-/find-config-1.0.0.tgz#eafa2b9bc07fa9c90e9a0c3ef9cecf1cc800f530"
+ integrity sha1-6vorm8B/qckOmgw++c7PHMgA9TA=
+ dependencies:
+ user-home "^2.0.0"
+
+find-node-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69"
+ integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==
+ dependencies:
+ findup-sync "^3.0.0"
+ merge "^1.2.1"
+
+find-root@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flatted@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
+ integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
+
+follow-redirects@^1.10.0:
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267"
+ integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fs-extra@8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^9.0.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+fstream@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
+ integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+generic-names@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872"
+ integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==
+ dependencies:
+ loader-utils "^1.1.0"
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+ integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-stdin@8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
+get-stream@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+git-raw-commits@^2.0.0:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1"
+ integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==
+ dependencies:
+ dargs "^7.0.0"
+ lodash "^4.17.15"
+ meow "^8.0.0"
+ split2 "^3.0.0"
+ through2 "^4.0.0"
+
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@7.1.4:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@7.1.6, glob@^7.1.3:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-dirs@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
+globals@^13.6.0:
+ version "13.8.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3"
+ integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==
+ dependencies:
+ type-fest "^0.20.2"
+
+globby@^11.0.1:
+ version "11.0.3"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
+ integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
+ integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+
+hard-rejection@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+ integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+
+has-bigints@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
+ integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.1, has-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
+ integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-sum@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
+ integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
+
+header-case@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063"
+ integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==
+ dependencies:
+ capital-case "^1.0.4"
+ tslib "^2.0.3"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
+hosted-git-info@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961"
+ integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+html-tags@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
+ integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==
+
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+husky@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e"
+ integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==
+
+iconv-lite@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
+
+icss-utils@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
+ integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.4:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@^1.3.4:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inquirer@6.5.2, inquirer@^6.3.1:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
+ integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^2.0.0"
+ lodash "^4.17.12"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^6.4.0"
+ string-width "^2.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-bigint@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2"
+ integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"
+ integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==
+ dependencies:
+ call-bind "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4, is-callable@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
+ integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
+
+is-core-module@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
+ integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
+ dependencies:
+ has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
+ integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-negative-zero@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
+ integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
+
+is-number-object@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
+ integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-regex@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251"
+ integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-symbols "^1.0.1"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
+is-string@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
+ integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-text-path@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
+ integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
+ dependencies:
+ text-extensions "^1.0.0"
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-utf8@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
+ integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
+ dependencies:
+ minimist "^1.2.5"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
+lint-staged@^10.5.4:
+ version "10.5.4"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665"
+ integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==
+ dependencies:
+ chalk "^4.1.0"
+ cli-truncate "^2.1.0"
+ commander "^6.2.0"
+ cosmiconfig "^7.0.0"
+ debug "^4.2.0"
+ dedent "^0.7.0"
+ enquirer "^2.3.6"
+ execa "^4.1.0"
+ listr2 "^3.2.2"
+ log-symbols "^4.0.0"
+ micromatch "^4.0.2"
+ normalize-path "^3.0.0"
+ please-upgrade-node "^3.2.0"
+ string-argv "0.3.1"
+ stringify-object "^3.3.0"
+
+listenercount@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937"
+ integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=
+
+listr2@^3.2.2:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.7.0.tgz#cb7a80b12eae385ac023c4ba82328036132e56f1"
+ integrity sha512-qctvOB7/AoHZPYnFgA75OhR+w9UnXsMMSNoTvkSuBbR0XA9bFno1L54UdJh5BHZD0pc9RNzFhAMUGM9gzbCTyQ==
+ dependencies:
+ chalk "^4.1.0"
+ cli-truncate "^2.1.0"
+ figures "^3.2.0"
+ indent-string "^4.0.0"
+ log-update "^4.0.0"
+ p-map "^4.0.0"
+ rxjs "^6.6.7"
+ through "^2.3.8"
+ wrap-ansi "^7.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+loader-utils@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.flatten@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+ integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
+
+lodash.map@^4.5.1:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+ integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
+
+lodash.truncate@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
+ integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
+
+lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+log-update@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
+ integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
+ dependencies:
+ ansi-escapes "^4.3.0"
+ cli-cursor "^3.1.0"
+ slice-ansi "^4.0.0"
+ wrap-ansi "^6.2.0"
+
+longest@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8"
+ integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g=
+
+lower-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+ integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+ dependencies:
+ tslib "^2.0.3"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+magic-string@^0.25.7:
+ version "0.25.7"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
+ integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
+ dependencies:
+ sourcemap-codec "^1.4.4"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7"
+ integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+meow@^8.0.0:
+ version "8.1.2"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
+ integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==
+ dependencies:
+ "@types/minimist" "^1.2.0"
+ camelcase-keys "^6.2.2"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^3.0.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.18.0"
+ yargs-parser "^20.2.3"
+
+merge-source-map@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
+ integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
+ dependencies:
+ source-map "^0.6.1"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+merge@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
+ integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
+
+micromatch@^3.0.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.2, micromatch@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+ integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.2.3"
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+min-indent@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
+minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist-options@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+ integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+ kind-of "^6.0.3"
+
+minimist@1.2.5, minimist@^1.2.0, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+mitt@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230"
+ integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.1:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+monaco-editor@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.23.0.tgz#24844ba5640c7adb3a2a3ff3b520cf2d7170a6f0"
+ integrity sha512-q+CP5zMR/aFiMTE9QlIavGyGicKnG2v/H8qVvybLzeFsARM8f6G9fL0sMST2tyVYCwDKkGamZUI6647A0jR/Lg==
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nanoid@^3.1.22:
+ version "3.1.22"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
+ integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+no-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+ integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+ dependencies:
+ lower-case "^2.0.2"
+ tslib "^2.0.3"
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-releases@^1.1.71:
+ version "1.1.71"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
+ integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-package-data@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699"
+ integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==
+ dependencies:
+ hosted-git-info "^4.0.1"
+ resolve "^1.20.0"
+ semver "^7.3.4"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-wheel@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45"
+ integrity sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=
+
+normalize.css@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3"
+ integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==
+
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+object-assign@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.9.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30"
+ integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==
+
+object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+ integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ has-symbols "^1.0.1"
+ object-keys "^1.1.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+object.values@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee"
+ integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.2"
+ has "^1.0.3"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+onetime@^5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+param-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+ integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+pascal-case@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+ integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f"
+ integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
+ integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+please-upgrade-node@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
+ integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
+ dependencies:
+ semver-compare "^1.0.0"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-modules-extract-imports@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
+ integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
+
+postcss-modules-local-by-default@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
+ integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
+ dependencies:
+ icss-utils "^5.0.0"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.1.0"
+
+postcss-modules-scope@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
+ integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
+ dependencies:
+ postcss-selector-parser "^6.0.4"
+
+postcss-modules-values@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
+ integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
+ dependencies:
+ icss-utils "^5.0.0"
+
+postcss-modules@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.0.0.tgz#2bc7f276ab88f3f1b0fadf6cbd7772d43b5f3b9b"
+ integrity sha512-ghS/ovDzDqARm4Zj6L2ntadjyQMoyJmi0JkLlYtH2QFLrvNlxH5OAVRPWPeKilB0pY7SbuhO173KOWkPAxRJcw==
+ dependencies:
+ generic-names "^2.0.1"
+ icss-replace-symbols "^1.1.0"
+ lodash.camelcase "^4.3.0"
+ postcss-modules-extract-imports "^3.0.0"
+ postcss-modules-local-by-default "^4.0.0"
+ postcss-modules-scope "^3.0.0"
+ postcss-modules-values "^4.0.0"
+ string-hash "^1.1.1"
+
+postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3"
+ integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==
+ dependencies:
+ cssesc "^3.0.0"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
+ integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
+
+postcss@^8.1.10, postcss@^8.2.1:
+ version "8.2.10"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b"
+ integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==
+ dependencies:
+ colorette "^1.2.2"
+ nanoid "^3.1.22"
+ source-map "^0.6.1"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prettier-linter-helpers@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
+ integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ dependencies:
+ fast-diff "^1.1.2"
+
+prettier@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
+ integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+quick-lru@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
+ integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ dependencies:
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
+
+readable-stream@3, readable-stream@^3.0.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@^2.0.2, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readdirp@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+ integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
+ dependencies:
+ picomatch "^2.2.1"
+
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpp@^3.0.0, regexpp@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+
+repeat-element@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+ integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+resize-observer-polyfill@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+ integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@5.0.0, resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-global@1.0.0, resolve-global@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
+ integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
+ dependencies:
+ global-dirs "^0.1.1"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
+ integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+ dependencies:
+ is-core-module "^2.2.0"
+ path-parse "^1.0.6"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@2:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rollup@^2.38.5:
+ version "2.45.2"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.45.2.tgz#8fb85917c9f35605720e92328f3ccbfba6f78b48"
+ integrity sha512-kRRU7wXzFHUzBIv0GfoFFIN3m9oteY4uAsKllIpQDId5cfnkWF2J130l+27dzDju0E6MScKiV0ZM5Bw8m4blYQ==
+ optionalDependencies:
+ fsevents "~2.3.1"
+
+run-async@^2.2.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+rxjs@^6.4.0, rxjs@^6.6.7:
+ version "6.6.7"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
+ integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sass@^1.32.10:
+ version "1.32.10"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.10.tgz#d40da4e20031b450359ee1c7e69bc8cc89569241"
+ integrity sha512-Nx0pcWoonAkn7CRp0aE/hket1UP97GiR1IFw3kcjV3pnenhWgZEWUf0ZcfPOV2fK52fnOcK3JdC/YYZ9E47DTQ==
+ dependencies:
+ chokidar ">=3.0.0 <4.0.0"
+
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+"semver@2 || 3 || 4 || 5":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@7.3.5, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
+semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+sentence-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f"
+ integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@~1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+ integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
+snake-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
+ integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sortablejs@1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290"
+ integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==
+
+source-map-resolve@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-url@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sourcemap-codec@^1.4.4:
+ version "1.4.8"
+ resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65"
+ integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split2@^3.0.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
+ integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
+ dependencies:
+ readable-stream "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+string-argv@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
+ integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
+
+string-hash@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
+ integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
+
+string-width@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
+ integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.trimend@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
+ integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+string.prototype.trimstart@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
+ integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+strip-bom@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
+strip-json-comments@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+sucrase@^3.17.1:
+ version "3.18.1"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.18.1.tgz#7c699d5148734b1105542ca4ea2aa69bcab7f728"
+ integrity sha512-TRyO38wwOPhLLlM8QLOG3TgMj0FKk+arlTrS9pRAanF8cAcHvgRPKIYWGO25mPSp/Rj87zMMTjFfkqIZGI6ZdA==
+ dependencies:
+ commander "^4.0.0"
+ glob "7.1.6"
+ lines-and-columns "^1.1.6"
+ mz "^2.7.0"
+ pirates "^4.0.1"
+ ts-interface-checker "^0.1.9"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+svg-tags@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
+ integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
+
+table@^6.0.4:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.2.0.tgz#3d92adbd37aca3c45de5f9c698d0474aa1de22b8"
+ integrity sha512-WMBBLuauiLXJjth35K4vOnd/xkaZ/dxEcyoZ+YhxSwfxFqvh+av06+oRqIwbR14m1lENB1egSWOFv/bNEt2D8A==
+ dependencies:
+ ajv "^8.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ lodash.clonedeep "^4.5.0"
+ lodash.flatten "^4.4.0"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.0"
+
+temp@^0.9.0:
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620"
+ integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==
+ dependencies:
+ mkdirp "^0.5.1"
+ rimraf "~2.6.2"
+
+text-extensions@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
+ integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
+through2@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
+ integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
+ dependencies:
+ readable-stream "3"
+
+"through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+"traverse@>=0.3.0 <0.4":
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
+ integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=
+
+trim-newlines@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
+ integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
+
+trim-off-newlines@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
+ integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
+
+ts-interface-checker@^0.1.9:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
+tsconfig-paths@^3.9.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
+ integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.0"
+ strip-bom "^3.0.0"
+
+tslib@^1.8.1, tslib@^1.9.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.3:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c"
+ integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==
+
+tsutils@^3.17.1:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+ dependencies:
+ tslib "^1.8.1"
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.18.0:
+ version "0.18.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
+ integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+typescript@^4.2.4:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961"
+ integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==
+
+unbox-primitive@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
+ integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
+ dependencies:
+ function-bind "^1.1.1"
+ has-bigints "^1.0.1"
+ has-symbols "^1.0.2"
+ which-boxed-primitive "^1.0.2"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+unzipper@0.10.11:
+ version "0.10.11"
+ resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e"
+ integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==
+ dependencies:
+ big-integer "^1.6.17"
+ binary "~0.3.0"
+ bluebird "~3.4.1"
+ buffer-indexof-polyfill "~1.0.0"
+ duplexer2 "~0.1.4"
+ fstream "^1.0.12"
+ graceful-fs "^4.2.2"
+ listenercount "~1.0.1"
+ readable-stream "~2.3.6"
+ setimmediate "~1.0.4"
+
+upper-case-first@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324"
+ integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==
+ dependencies:
+ tslib "^2.0.3"
+
+upper-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a"
+ integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==
+ dependencies:
+ tslib "^2.0.3"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+user-home@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8=
+ dependencies:
+ os-homedir "^1.0.0"
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+v8-compile-cache@^2.0.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
+ integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vant@^3.0.16:
+ version "3.0.16"
+ resolved "https://registry.yarnpkg.com/vant/-/vant-3.0.16.tgz#abc4404b9cc61f4607ac61c0ba6d890975e2723e"
+ integrity sha512-13CPWGOA5xgYpIbQc7k1KPGpnNysUgDpeifqwbXq2U394UR0ss5ZSjfg0Kz+mUfe4a98sDVdx0qnoC299TtBoQ==
+ dependencies:
+ "@vant/icons" "^1.5.3"
+ "@vant/lazyload" "^1.2.0"
+ "@vant/popperjs" "^1.1.0"
+ "@vant/use" "^1.1.1"
+
+vite-plugin-components@^0.8.4:
+ version "0.8.4"
+ resolved "https://registry.yarnpkg.com/vite-plugin-components/-/vite-plugin-components-0.8.4.tgz#158a4d69c8106c36944a2e284df3ad0169ae1017"
+ integrity sha512-h6/FNBKBXc4TIcHxnFYxa4+aBGDZusqp/6Ra3LBvwolwFuX6k8qPsBbXkBP0I+UwOkyHw9iU2xJ4rdYBGyN+0Q==
+ dependencies:
+ chokidar "^3.5.1"
+ debug "^4.3.2"
+ fast-glob "^3.2.5"
+ minimatch "^3.0.4"
+
+vite-plugin-style-import@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/vite-plugin-style-import/-/vite-plugin-style-import-0.10.0.tgz#f348ca95b72cdaa212a98c2d4da0dfbf70584165"
+ integrity sha512-mfsyFJTMP+4gOYiTyBiqcJQZ/XADEQt9mnsR16VBsJbccacxcqjcD7ZliDw06nN45PzN06J52+V7iU/tRVohPQ==
+ dependencies:
+ "@rollup/pluginutils" "^4.1.0"
+ change-case "^4.1.2"
+ debug "^4.3.2"
+ es-module-lexer "^0.4.1"
+ magic-string "^0.25.7"
+
+vite-plugin-windicss@^0.14.6:
+ version "0.14.6"
+ resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-0.14.6.tgz#c17b66b5f35a3b1ffdfc3e969ce28a528305716e"
+ integrity sha512-bFyKfvnsa3nAab9LgrFInzdQhsIJyeNdCczgjrYMxjO8WlgiQuIFyJ1RTYQnYmQRlbvU9jpOL5XDxsFUMKRLUg==
+ dependencies:
+ "@windicss/plugin-utils" "0.14.6"
+ chalk "^4.1.0"
+ debug "^4.3.2"
+ windicss "^2.5.14"
+
+vite@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-2.2.3.tgz#1acbdfa56ac00e00e7ccb6988f63f130c2f99dbb"
+ integrity sha512-PtjyBL4GtACM+uT5q5hi2+AlMBbb6YI2b2bam6QI8ZdZt4FezseF0yZHQx0G+b3po9jIJ/GS5N9gc5Yq9Rue7g==
+ dependencies:
+ esbuild "^0.9.3"
+ postcss "^8.2.1"
+ resolve "^1.19.0"
+ rollup "^2.38.5"
+ optionalDependencies:
+ fsevents "~2.3.1"
+
+vue-demi@*:
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.7.5.tgz#88dee7492fc99a0f911ff03fc02c658fa2a79af8"
+ integrity sha512-eFSQSvbQdY7C9ujOzvM6tn7XxwLjn0VQDXQsiYBLBwf28Na+2nTQR4BBBcomhmdP6mmHlBKAwarq6a0BPG87hQ==
+
+vue-eslint-parser@^7.6.0:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz#01ea1a2932f581ff244336565d712801f8f72561"
+ integrity sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==
+ dependencies:
+ debug "^4.1.1"
+ eslint-scope "^5.0.0"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.2.1"
+ esquery "^1.4.0"
+ lodash "^4.17.15"
+
+vue-router@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.6.tgz#91750db507d26642f225b0ec6064568e5fe448d6"
+ integrity sha512-Y04llmK2PyaESj+N33VxLjGCUDuv9t4q2OpItEGU7POZiuQZaugV6cJpE6Qm1sVFtxufodLKN2y2dQl9nk0Reg==
+
+vue-tsc@^0.0.25:
+ version "0.0.25"
+ resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-0.0.25.tgz#80852b731ff9bf8dc4d1193a524e1cc06e58e9cd"
+ integrity sha512-9cWIQxjoviLQE2o+8NVfycKeI6nlfPndTDvH9hhG2/5mQhixPYWzXgAjszLXa8pzLKnF3ZiAr/hrTxjIAai5+A==
+ dependencies:
+ unzipper "0.10.11"
+
+vue@^3.0.11:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/vue/-/vue-3.0.11.tgz#c82f9594cbf4dcc869241d4c8dd3e08d9a8f4b5f"
+ integrity sha512-3/eUi4InQz8MPzruHYSTQPxtM3LdZ1/S/BvaU021zBnZi0laRUyH6pfuE4wtUeLvI8wmUNwj5wrZFvbHUXL9dw==
+ dependencies:
+ "@vue/compiler-dom" "3.0.11"
+ "@vue/runtime-dom" "3.0.11"
+ "@vue/shared" "3.0.11"
+
+vuedraggable@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-4.0.1.tgz#3bcaab0808b7944030b7d9a29f9a63d59dfa12c5"
+ integrity sha512-7qN5jhB1SLfx5P+HCm3JUW+pvgA1bSLgYLSVOeLWBDH9z+zbaEH0OlyZBVMLOxFR+JUHJjwDD0oy7T4r9TEgDA==
+ dependencies:
+ sortablejs "1.10.2"
+
+vuex@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.0.0.tgz#ac877aa76a9c45368c979471e461b520d38e6cf5"
+ integrity sha512-56VPujlHscP5q/e7Jlpqc40sja4vOhC4uJD1llBCWolVI8ND4+VzisDVkUMl+z5y0MpIImW6HjhNc+ZvuizgOw==
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which@^1.2.14:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+windicss@^2.5.14:
+ version "2.5.14"
+ resolved "https://registry.yarnpkg.com/windicss/-/windicss-2.5.14.tgz#41236ccc2517c0947e1adb69e0d5e8aa9bed9c1e"
+ integrity sha512-8Lm7U1M5AzJPbiaVSVz7qWdETRzlkv//5LBMICBBAojos1jo09lUGhNZ5rBzHeldB9JmqYMDOGgrrXHExu0EAg==
+
+word-wrap@^1.0.3, word-wrap@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^1.10.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@^20.2.2, yargs-parser@^20.2.3:
+ version "20.2.7"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a"
+ integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==
+
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==