From d2946b256016255562beefdc9487a6ff104ae295 Mon Sep 17 00:00:00 2001 From: bqy_fe <1743369777@qq.com> Date: Tue, 4 May 2021 21:54:05 +0800 Subject: [PATCH] first commit --- .cz-config.js | 92 + .editorconfig | 16 + .env.development | 10 + .env.production | 10 + .eslintignore | 15 + .eslintrc.js | 60 + .github/workflows/deploy.yml | 29 + .gitignore | 47 + .husky/.gitignore | 1 + .husky/commit-msg | 4 + .husky/pre-commit | 4 + .husky/pre-push | 9 + .prettierignore | 9 + LICENSE | 21 + README.md | 41 + commitlint.config.js | 1 + index.html | 13 + package.json | 85 + prettier.config.js | 9 + public/favicon.ico | Bin 0 -> 4286 bytes src/App.vue | 48 + src/assets/logo.png | Bin 0 -> 60745 bytes src/common/types/index.ts | 5 + src/hooks/useGlobalProperties.ts | 27 + src/main.ts | 22 + src/packages/base-widgets/button/index.tsx | 137 + .../base-widgets/checkbox/createFieldProps.ts | 39 + src/packages/base-widgets/checkbox/index.tsx | 94 + .../datetimePicker/createFieldProps.ts | 39 + .../base-widgets/datetimePicker/index.tsx | 116 + src/packages/base-widgets/image/index.tsx | 32 + src/packages/base-widgets/index.ts | 11 + .../base-widgets/input/createFieldProps.ts | 141 + src/packages/base-widgets/input/index.tsx | 36 + src/packages/base-widgets/nav-bar/index.tsx | 46 + .../base-widgets/number-range/index.tsx | 31 + .../number-range/number-range.scss | 24 + .../number-range/number-range.tsx | 30 + .../base-widgets/picker/createFieldProps.ts | 39 + src/packages/base-widgets/picker/index.tsx | 113 + .../base-widgets/radio/createFieldProps.ts | 39 + src/packages/base-widgets/radio/index.tsx | 90 + .../base-widgets/rate/createFieldProps.ts | 39 + src/packages/base-widgets/rate/index.tsx | 60 + src/packages/base-widgets/select/index.tsx | 37 + .../base-widgets/slider/createFieldProps.ts | 39 + src/packages/base-widgets/slider/index.tsx | 61 + .../base-widgets/stepper/createFieldProps.ts | 39 + src/packages/base-widgets/stepper/index.tsx | 55 + .../base-widgets/switch/createFieldProps.ts | 39 + src/packages/base-widgets/switch/index.tsx | 55 + src/packages/base-widgets/text/index.tsx | 28 + .../form/index.module.scss | 10 + .../container-component/form/index.tsx | 54 + src/packages/container-component/index.ts | 11 + .../layout/index.module.scss | 10 + .../container-component/layout/index.tsx | 115 + src/plugins/element-plus.ts | 3 + src/plugins/vant.ts | 2 + src/router/index.ts | 10 + src/shims-vue.d.ts | 32 + src/store/index.ts | 27 + src/style/common.scss | 14 + src/visual-editor/components/common/monaco.ts | 24 + .../components/common/simulator.vue | 43 + .../components/header/comp-render.tsx | 27 + src/visual-editor/components/header/index.vue | 67 + .../components/header/preview.vue | 94 + .../components/header/slot-item.vue | 40 + .../components/base-widgets/index.module.scss | 43 + .../components/base-widgets/index.tsx | 45 + .../container-component/index.module.scss | 43 + .../components/container-component/index.tsx | 45 + .../components/custom-component/index.vue | 10 + .../components/left-aside/components/index.ts | 13 + .../left-aside/components/page-tree/index.vue | 75 + .../components/page-tree/treeData.ts | 57 + .../components/left-aside/index.vue | 63 + .../components/left-aside/tabs.ts | 26 + .../MonacoEditor.module.scss | 20 + .../right-attribute-panel/MonacoEditor.tsx | 138 + .../table-prop-edit.service.tsx | 132 + .../table-prop-editor/table-prop-editor.tsx | 38 + .../right-attribute-panel/index.common.scss | 17 + .../right-attribute-panel/index.module.scss | 61 + .../right-attribute-panel/index.tsx | 177 + .../simulator-editor/comp-render.tsx | 28 + .../draggable-transition-group.vue | 95 + .../simulator-editor/simulator-editor.vue | 229 + .../components/simulator-editor/slot-item.vue | 137 + src/visual-editor/index.vue | 108 + src/visual-editor/plugins/command.plugin.ts | 156 + src/visual-editor/plugins/event.ts | 17 + src/visual-editor/plugins/keyboard-code.ts | 71 + src/visual-editor/utils/defer.ts | 22 + src/visual-editor/utils/dialog-service.tsx | 134 + src/visual-editor/utils/dropdown-service.tsx | 143 + .../utils/dropdown-sservice.scss | 29 + src/visual-editor/utils/useDotProp.ts | 18 + src/visual-editor/utils/useModel.tsx | 42 + src/visual-editor/visual-editor.props.tsx | 148 + src/visual-editor/visual-editor.utils.ts | 160 + src/visual-editor/visual.command.tsx | 232 + src/visual.config.tsx | 16 + tsconfig.json | 38 + vite.config.ts | 73 + windi.config.ts | 38 + yarn.lock | 4815 +++++++++++++++++ 108 files changed, 10422 insertions(+) create mode 100644 .cz-config.js create mode 100644 .editorconfig create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .github/workflows/deploy.yml create mode 100644 .gitignore create mode 100644 .husky/.gitignore create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit create mode 100644 .husky/pre-push create mode 100644 .prettierignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 commitlint.config.js create mode 100644 index.html create mode 100644 package.json create mode 100644 prettier.config.js create mode 100644 public/favicon.ico create mode 100644 src/App.vue create mode 100644 src/assets/logo.png create mode 100644 src/common/types/index.ts create mode 100644 src/hooks/useGlobalProperties.ts create mode 100644 src/main.ts create mode 100644 src/packages/base-widgets/button/index.tsx create mode 100644 src/packages/base-widgets/checkbox/createFieldProps.ts create mode 100644 src/packages/base-widgets/checkbox/index.tsx create mode 100644 src/packages/base-widgets/datetimePicker/createFieldProps.ts create mode 100644 src/packages/base-widgets/datetimePicker/index.tsx create mode 100644 src/packages/base-widgets/image/index.tsx create mode 100644 src/packages/base-widgets/index.ts create mode 100644 src/packages/base-widgets/input/createFieldProps.ts create mode 100644 src/packages/base-widgets/input/index.tsx create mode 100644 src/packages/base-widgets/nav-bar/index.tsx create mode 100644 src/packages/base-widgets/number-range/index.tsx create mode 100644 src/packages/base-widgets/number-range/number-range.scss create mode 100644 src/packages/base-widgets/number-range/number-range.tsx create mode 100644 src/packages/base-widgets/picker/createFieldProps.ts create mode 100644 src/packages/base-widgets/picker/index.tsx create mode 100644 src/packages/base-widgets/radio/createFieldProps.ts create mode 100644 src/packages/base-widgets/radio/index.tsx create mode 100644 src/packages/base-widgets/rate/createFieldProps.ts create mode 100644 src/packages/base-widgets/rate/index.tsx create mode 100644 src/packages/base-widgets/select/index.tsx create mode 100644 src/packages/base-widgets/slider/createFieldProps.ts create mode 100644 src/packages/base-widgets/slider/index.tsx create mode 100644 src/packages/base-widgets/stepper/createFieldProps.ts create mode 100644 src/packages/base-widgets/stepper/index.tsx create mode 100644 src/packages/base-widgets/switch/createFieldProps.ts create mode 100644 src/packages/base-widgets/switch/index.tsx create mode 100644 src/packages/base-widgets/text/index.tsx create mode 100644 src/packages/container-component/form/index.module.scss create mode 100644 src/packages/container-component/form/index.tsx create mode 100644 src/packages/container-component/index.ts create mode 100644 src/packages/container-component/layout/index.module.scss create mode 100644 src/packages/container-component/layout/index.tsx create mode 100644 src/plugins/element-plus.ts create mode 100644 src/plugins/vant.ts create mode 100644 src/router/index.ts create mode 100644 src/shims-vue.d.ts create mode 100644 src/store/index.ts create mode 100644 src/style/common.scss create mode 100644 src/visual-editor/components/common/monaco.ts create mode 100644 src/visual-editor/components/common/simulator.vue create mode 100644 src/visual-editor/components/header/comp-render.tsx create mode 100644 src/visual-editor/components/header/index.vue create mode 100644 src/visual-editor/components/header/preview.vue create mode 100644 src/visual-editor/components/header/slot-item.vue create mode 100644 src/visual-editor/components/left-aside/components/base-widgets/index.module.scss create mode 100644 src/visual-editor/components/left-aside/components/base-widgets/index.tsx create mode 100644 src/visual-editor/components/left-aside/components/container-component/index.module.scss create mode 100644 src/visual-editor/components/left-aside/components/container-component/index.tsx create mode 100644 src/visual-editor/components/left-aside/components/custom-component/index.vue create mode 100644 src/visual-editor/components/left-aside/components/index.ts create mode 100644 src/visual-editor/components/left-aside/components/page-tree/index.vue create mode 100644 src/visual-editor/components/left-aside/components/page-tree/treeData.ts create mode 100644 src/visual-editor/components/left-aside/index.vue create mode 100644 src/visual-editor/components/left-aside/tabs.ts create mode 100644 src/visual-editor/components/right-attribute-panel/MonacoEditor.module.scss create mode 100644 src/visual-editor/components/right-attribute-panel/MonacoEditor.tsx create mode 100644 src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-edit.service.tsx create mode 100644 src/visual-editor/components/right-attribute-panel/components/table-prop-editor/table-prop-editor.tsx create mode 100644 src/visual-editor/components/right-attribute-panel/index.common.scss create mode 100644 src/visual-editor/components/right-attribute-panel/index.module.scss create mode 100644 src/visual-editor/components/right-attribute-panel/index.tsx create mode 100644 src/visual-editor/components/simulator-editor/comp-render.tsx create mode 100644 src/visual-editor/components/simulator-editor/draggable-transition-group.vue create mode 100644 src/visual-editor/components/simulator-editor/simulator-editor.vue create mode 100644 src/visual-editor/components/simulator-editor/slot-item.vue create mode 100644 src/visual-editor/index.vue create mode 100644 src/visual-editor/plugins/command.plugin.ts create mode 100644 src/visual-editor/plugins/event.ts create mode 100644 src/visual-editor/plugins/keyboard-code.ts create mode 100644 src/visual-editor/utils/defer.ts create mode 100644 src/visual-editor/utils/dialog-service.tsx create mode 100644 src/visual-editor/utils/dropdown-service.tsx create mode 100644 src/visual-editor/utils/dropdown-sservice.scss create mode 100644 src/visual-editor/utils/useDotProp.ts create mode 100644 src/visual-editor/utils/useModel.tsx create mode 100644 src/visual-editor/visual-editor.props.tsx create mode 100644 src/visual-editor/visual-editor.utils.ts create mode 100644 src/visual-editor/visual.command.tsx create mode 100644 src/visual.config.tsx create mode 100644 tsconfig.json create mode 100644 vite.config.ts create mode 100644 windi.config.ts create mode 100644 yarn.lock 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 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3ac3627baff5df3db601d3f2123fbd2a39021a40 GIT binary patch literal 60745 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
AePrMqu~>O0t#+&N>yL3 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 dx$;9mfw<%Ja6Cx-7>9tDf{e { + 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 ( +
registerRef(el, block._vid)} {...custom} {...props} onSubmit={onSubmit}> + {renderSlot(slots, 'default')} +
+ ) + }, + 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 @@ + + + + + + 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 @@ + + + + + + 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 () => ( + + ) + } +}) + +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==