chore: add some notes

This commit is contained in:
vben
2020-11-18 22:41:59 +08:00
parent 815250ed34
commit 46e0875374
87 changed files with 926 additions and 728 deletions

View File

@@ -138,6 +138,7 @@
// "vetur.format.defaultFormatter.html": "prettyhtml", // "vetur.format.defaultFormatter.html": "prettyhtml",
"vetur.format.defaultFormatter.ts": "prettier-tslint", "vetur.format.defaultFormatter.ts": "prettier-tslint",
"vetur.format.defaultFormatter.js": "prettier", "vetur.format.defaultFormatter.js": "prettier",
"vetur.languageFeatures.codeActions": false,
// "vetur.useWorkspaceDependencies": true, // "vetur.useWorkspaceDependencies": true,
"vetur.format.defaultFormatterOptions": { "vetur.format.defaultFormatterOptions": {
"js-beautify-html": { "js-beautify-html": {

View File

@@ -11,7 +11,8 @@
### 🎫 Chores ### 🎫 Chores
- 更新 antdv 到`2.0.0-rc.1` - 更新 antdv 到`2.0.0-rc.1`(暂时还原到 beta15,rc1 菜单卡顿太严重.
- 添加部分注释
### 🐛 Bug Fixes ### 🐛 Bug Fixes

View File

@@ -1,7 +1,7 @@
// 修改自 // Modified from
// https://github.com/luxueyan/vite-transform-globby-import/blob/master/src/index.ts // https://github.com/luxueyan/vite-transform-globby-import/blob/master/src/index.ts
// TODO 目前还不能监听文件新增及删除 内容已经改变,缓存问题? // TODO Currently, it is not possible to monitor file addition and deletion. The content has been changed, the cache problem?
import { join } from 'path'; import { join } from 'path';
import { lstatSync } from 'fs'; import { lstatSync } from 'fs';
import glob from 'glob'; import glob from 'glob';

View File

@@ -4,11 +4,11 @@ import { resultSuccess } from '../_util';
const userInfo = { const userInfo = {
name: 'Vben', name: 'Vben',
userid: '00000001', userid: '00000001',
email: 'antdesign@alipay.com', email: 'test@gmail.com',
signature: '海纳百川,有容乃大', signature: '海纳百川,有容乃大',
introduction: '微笑着,努力着,欣赏着', introduction: '微笑着,努力着,欣赏着',
title: '交互专家', title: '交互专家',
group: '蚂蚁集团11某某某事业群某某平台部某某技术部UED', group: '某某某事业群某某平台部某某技术部UED',
tags: [ tags: [
{ {
key: '0', key: '0',
@@ -38,7 +38,7 @@ const userInfo = {
notifyCount: 12, notifyCount: 12,
unreadCount: 11, unreadCount: 11,
country: 'China', country: 'China',
address: '厦门市 77', address: 'Xiamen City 77',
phone: '0592-268888888', phone: '0592-268888888',
}; };

View File

@@ -22,8 +22,8 @@
}, },
"dependencies": { "dependencies": {
"@iconify/iconify": "^2.0.0-rc.2", "@iconify/iconify": "^2.0.0-rc.2",
"@vueuse/core": "^4.0.0-beta.41", "@vueuse/core": "4.0.0-beta.41",
"ant-design-vue": "^2.0.0-rc.1", "ant-design-vue": "2.0.0-beta.15",
"apexcharts": "3.22.0", "apexcharts": "3.22.0",
"axios": "^0.21.0", "axios": "^0.21.0",
"echarts": "^4.9.0", "echarts": "^4.9.0",
@@ -35,7 +35,7 @@
"qrcode": "^1.4.4", "qrcode": "^1.4.4",
"vditor": "^3.6.2", "vditor": "^3.6.2",
"vue": "^3.0.2", "vue": "^3.0.2",
"vue-i18n": "^9.0.0-beta.6", "vue-i18n": "^9.0.0-beta.7",
"vue-router": "^4.0.0-rc.3", "vue-router": "^4.0.0-rc.3",
"vuex": "^4.0.0-rc.1", "vuex": "^4.0.0-rc.1",
"vuex-module-decorators": "^1.0.1", "vuex-module-decorators": "^1.0.1",
@@ -45,10 +45,10 @@
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^11.0.0", "@commitlint/cli": "^11.0.0",
"@commitlint/config-conventional": "^11.0.0", "@commitlint/config-conventional": "^11.0.0",
"@iconify/json": "^1.1.258", "@iconify/json": "^1.1.260",
"@ls-lint/ls-lint": "^1.9.2", "@ls-lint/ls-lint": "^1.9.2",
"@purge-icons/generated": "^0.4.1", "@purge-icons/generated": "^0.4.1",
"@types/echarts": "^4.9.0", "@types/echarts": "^4.9.1",
"@types/fs-extra": "^9.0.4", "@types/fs-extra": "^9.0.4",
"@types/koa-static": "^4.0.1", "@types/koa-static": "^4.0.1",
"@types/lodash-es": "^4.17.3", "@types/lodash-es": "^4.17.3",
@@ -56,10 +56,10 @@
"@types/nprogress": "^0.2.0", "@types/nprogress": "^0.2.0",
"@types/qrcode": "^1.3.5", "@types/qrcode": "^1.3.5",
"@types/rollup-plugin-visualizer": "^2.6.0", "@types/rollup-plugin-visualizer": "^2.6.0",
"@types/yargs": "^15.0.9", "@types/yargs": "^15.0.10",
"@types/zxcvbn": "^4.4.0", "@types/zxcvbn": "^4.4.0",
"@typescript-eslint/eslint-plugin": "^4.6.1", "@typescript-eslint/eslint-plugin": "^4.8.1",
"@typescript-eslint/parser": "^4.6.1", "@typescript-eslint/parser": "^4.8.1",
"@vue/compiler-sfc": "^3.0.2", "@vue/compiler-sfc": "^3.0.2",
"@vuedx/typecheck": "^0.2.4-0", "@vuedx/typecheck": "^0.2.4-0",
"@vuedx/typescript-plugin-vue": "^0.2.4-0", "@vuedx/typescript-plugin-vue": "^0.2.4-0",
@@ -84,7 +84,7 @@
"prettier": "^2.1.2", "prettier": "^2.1.2",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rollup-plugin-visualizer": "^4.1.2", "rollup-plugin-visualizer": "^4.1.2",
"stylelint": "^13.7.2", "stylelint": "^13.8.0",
"stylelint-config-prettier": "^8.0.2", "stylelint-config-prettier": "^8.0.2",
"stylelint-config-standard": "^20.0.0", "stylelint-config-standard": "^20.0.0",
"stylelint-order": "^4.1.0", "stylelint-order": "^4.1.0",

View File

@@ -1,3 +1,7 @@
/*
* @Author: Vben
* @Description:
*/
module.exports = { module.exports = {
printWidth: 100, printWidth: 100,
tabWidth: 2, tabWidth: 2,

View File

@@ -33,20 +33,17 @@
</style> </style>
<circle cx="97" cy="97" r="81" stroke-width="16" stroke="#327fd8" fill="none"></circle> <circle cx="97" cy="97" r="81" stroke-width="16" stroke="#327fd8" fill="none"></circle>
<g class="load"> <g class="load">
<!--右半圆环-->
<linearGradient id="left-linear" gradientUnits="userSpaceOnUse" x1="50" y1="0" x2="100" y2="180"> <linearGradient id="left-linear" gradientUnits="userSpaceOnUse" x1="50" y1="0" x2="100" y2="180">
<stop offset="0" style="stop-color: #64acff;" /> <stop offset="0" style="stop-color: #64acff;" />
<stop offset="1" style="stop-color: #9DBFE4;" /> <stop offset="1" style="stop-color: #9DBFE4;" />
</linearGradient> </linearGradient>
<path class="left-linear" d="M20,100c0-44.1,35.9-80,80-80V0C44.8,0,0,44.8,0,100s44.8,100,100,100v-20C55.9,180,20,144.1,20,100z" /> <path class="left-linear" d="M20,100c0-44.1,35.9-80,80-80V0C44.8,0,0,44.8,0,100s44.8,100,100,100v-20C55.9,180,20,144.1,20,100z" />
<!--左半圆环-->
<circle class="bottom" cx="100" cy="190" r="10" /> <circle class="bottom" cx="100" cy="190" r="10" />
<linearGradient id="right-linear" gradientUnits="userSpaceOnUse" x1="100" y1="120" x2="100" y2="180"> <linearGradient id="right-linear" gradientUnits="userSpaceOnUse" x1="100" y1="120" x2="100" y2="180">
<stop offset="0" style="stop-color: transparent;" /> <stop offset="0" style="stop-color: transparent;" />
<stop offset="1" style="stop-color: transparent;" /> <stop offset="1" style="stop-color: transparent;" />
</linearGradient> </linearGradient>
<path class="right-linear" d="M100,0v20c44.1,0,80,35.9,80,80c0,44.1-35.9,80-80,80v20c55.2,0,100-44.8,100-100S155.2,0,100,0z" /> <path class="right-linear" d="M100,0v20c44.1,0,80,35.9,80,80c0,44.1-35.9,80-80,80v20c55.2,0,100-44.8,100-100S155.2,0,100,0z" />
<!--左半圆环-->
<circle class="top" cx="100" cy="10" r="10" /> <circle class="top" cx="100" cy="10" r="10" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,5 +1,5 @@
<template> <template>
<ConfigProvider :locale="zhCN" :transform-cell-text="transformCellText" v-bind="lockOn"> <ConfigProvider v-bind="lockEvent" :locale="zhCN" :transform-cell-text="transformCellText">
<router-view /> <router-view />
</ConfigProvider> </ConfigProvider>
</template> </template>
@@ -13,9 +13,8 @@
import moment from 'moment'; import moment from 'moment';
import 'moment/dist/locale/zh-cn'; import 'moment/dist/locale/zh-cn';
import { useConfigProvider, useInitAppConfigStore } from './useApp'; import { getConfigProvider, initAppConfigStore } from '/@/setup/Application';
import { useLockPage } from '/@/hooks/web/useLockPage'; import { useLockPage } from '/@/hooks/web/useLockPage';
import { useSetting } from '/@/hooks/core/useSetting';
moment.locale('zh-cn'); moment.locale('zh-cn');
@@ -23,26 +22,22 @@
name: 'App', name: 'App',
components: { ConfigProvider }, components: { ConfigProvider },
setup() { setup() {
// Initialize application settings // Initialize vuex internal system configuration
useInitAppConfigStore(); initAppConfigStore();
// Initialize breakpoint monitoring
createBreakpointListen();
// Get system configuration
const { projectSetting } = useSetting();
// Get ConfigProvider configuration
const { transformCellText } = useConfigProvider();
let lockOn = {}; // Create a global breakpoint monitor
if (projectSetting.lockTime) { createBreakpointListen();
// Monitor the mouse or keyboard time, used to recalculate the lock screen time
const { on } = useLockPage(); // Get ConfigProvider configuration
lockOn = on; const { transformCellText } = getConfigProvider();
}
// Create a lock screen monitor
const lockEvent = useLockPage();
return { return {
transformCellText, transformCellText,
zhCN, zhCN,
lockOn, lockEvent,
}; };
}, },
}); });

View File

@@ -5,7 +5,7 @@ enum Api {
ACCOUNT_INFO = '/account/getAccountInfo', ACCOUNT_INFO = '/account/getAccountInfo',
} }
// 获取个人中心--基础设置内容 // Get personal center-basic settings
export function accountInfoApi() { export function accountInfoApi() {
return defHttp.request<GetAccountInfoModel>({ return defHttp.request<GetAccountInfoModel>({
url: Api.ACCOUNT_INFO, url: Api.ACCOUNT_INFO,

View File

@@ -7,7 +7,7 @@ enum Api {
} }
/** /**
* @description: 根据id获取用户菜单 * @description: Get user menu based on id
*/ */
export function getMenuListById(params: getMenuListByIdParams) { export function getMenuListById(params: getMenuListByIdParams) {
return defHttp.request<getMenuListByIdParamsResultModel>({ return defHttp.request<getMenuListByIdParamsResultModel>({

View File

@@ -11,13 +11,13 @@ export interface RouteItem {
} }
/** /**
* @description: 获取菜单接口 * @description: Get menu interface
*/ */
export interface getMenuListByIdParams { export interface getMenuListByIdParams {
id: number | string; id: number | string;
} }
/** /**
* @description: 获取菜单返回值 * @description: Get menu return value
*/ */
export type getMenuListByIdParamsResultModel = RouteItem[]; export type getMenuListByIdParamsResultModel = RouteItem[];

View File

@@ -7,7 +7,7 @@ enum Api {
} }
/** /**
* @description: 上传接口 * @description: Upload interface
*/ */
export function uploadApi( export function uploadApi(
params: UploadFileParams, params: UploadFileParams,

View File

@@ -1,2 +1,8 @@
import type { App } from 'vue';
import Authority from './src/index.vue'; import Authority from './src/index.vue';
export default Authority;
export default (app: App): void => {
app.component(Authority.name, Authority);
};
export { Authority };

View File

@@ -1,17 +1,28 @@
<!--
* @Author: Vben
* @Description:Access control component for fine-grained access control.
-->
<script lang="ts"> <script lang="ts">
import type { PropType } from 'vue'; import type { PropType } from 'vue';
import { defineComponent, computed, unref } from 'vue'; import { defineComponent, computed, unref } from 'vue';
import { PermissionModeEnum } from '/@/enums/appEnum'; import { PermissionModeEnum } from '/@/enums/appEnum';
import { RoleEnum } from '/@/enums/roleEnum'; import { RoleEnum } from '/@/enums/roleEnum';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import { appStore } from '/@/store/modules/app'; import { appStore } from '/@/store/modules/app';
import { getSlot } from '/@/utils/helper/tsxHelper'; import { getSlot } from '/@/utils/helper/tsxHelper';
export default defineComponent({ export default defineComponent({
name: 'Authority', name: 'Authority',
props: { props: {
// 指定角色可见 /**
* Specified role is visible
* When the permission mode is the role mode, the value value can pass the role value.
* When the permission mode is background, the value value can pass the code permission value
* @default ''
*/
value: { value: {
type: [Number, Array, String] as PropType<RoleEnum | RoleEnum[] | string | string[]>, type: [Number, Array, String] as PropType<RoleEnum | RoleEnum[] | string | string[]>,
default: '', default: '',
@@ -23,7 +34,7 @@
}); });
/** /**
* 渲染角色按钮 * Render role button
*/ */
function renderRoleAuth() { function renderRoleAuth() {
const { value } = props; const { value } = props;
@@ -34,10 +45,8 @@
return hasPermission(value) ? getSlot(slots) : null; return hasPermission(value) ? getSlot(slots) : null;
} }
/** // Render coding button
* 渲染编码按钮 // Here only judge whether it is included, the specific implementation can be written according to the project logic
* 这里只判断是否包含,具体实现可以根据项目自行写逻辑
*/
function renderCodeAuth() { function renderCodeAuth() {
const { value } = props; const { value } = props;
if (!value) { if (!value) {
@@ -49,12 +58,12 @@
return () => { return () => {
const mode = unref(getModeRef); const mode = unref(getModeRef);
// 基于角色渲染 // Role-based value control
if (mode === PermissionModeEnum.ROLE) { if (mode === PermissionModeEnum.ROLE) {
return renderRoleAuth(); return renderRoleAuth();
} }
// 基于后台编码渲染 // Based on background role permission control
if (mode === PermissionModeEnum.BACK) { if (mode === PermissionModeEnum.BACK) {
return renderCodeAuth(); return renderCodeAuth();
} }

View File

@@ -1,3 +1,7 @@
<!--
* @Author: Vben
* @Description: Arrow component with animation
-->
<template> <template>
<span :class="getClass"> <span :class="getClass">
<RightOutlined /> <RightOutlined />

View File

@@ -71,9 +71,6 @@
return props.absolute ? props.position : {}; return props.absolute ? props.position : {};
}); });
/**
* @description: 渲染内容
*/
const renderTitle = () => { const renderTitle = () => {
const list = props.text; const list = props.text;
if (isString(list)) { if (isString(list)) {
@@ -89,6 +86,7 @@
return () => { return () => {
return h( return h(
// @ts-ignores
Tooltip, Tooltip,
{ {
title: h( title: h(

View File

@@ -12,33 +12,19 @@
import { defineComponent, computed } from 'vue'; import { defineComponent, computed } from 'vue';
import { Button } from 'ant-design-vue'; import { Button } from 'ant-design-vue';
// import { extendSlots } from '/@/utils/helper/tsxHelper';
// import { useThrottle } from '/@/hooks/core/useThrottle';
// import { isFunction } from '/@/utils/is';
import Icon from '/@/components/Icon'; import Icon from '/@/components/Icon';
export default defineComponent({ export default defineComponent({
name: 'AButton', name: 'AButton',
inheritAttrs: false, inheritAttrs: false,
components: { Button, Icon }, components: { Button, Icon },
props: { props: {
// 按钮类型
type: { type: {
type: String as PropType<'primary' | 'default' | 'danger' | 'dashed' | 'link'>, type: String as PropType<'primary' | 'default' | 'danger' | 'dashed' | 'link'>,
default: 'default', default: 'default',
}, },
// 节流防抖类型 throttle debounce
// throttle: {
// type: String as PropType<'throttle' | 'debounce'>,
// default: 'throttle',
// },
color: { color: {
type: String as PropType<'error' | 'warning' | 'success' | ''>, type: String as PropType<'error' | 'warning' | 'success' | ''>,
}, },
// // 防抖节流时间
// throttleTime: {
// type: Number as PropType<number>,
// default: 50,
// },
loading: { loading: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: false, default: false,
@@ -58,42 +44,15 @@
const getIsCircleBtn = computed(() => { const getIsCircleBtn = computed(() => {
return attrs.shape === 'circle'; return attrs.shape === 'circle';
}); });
// const getListeners = computed(() => {
// const { throttle, throttleTime = 0 } = props;
// // 是否开启节流防抖
// const throttleType = throttle!.toLowerCase();
// const isDebounce = throttleType === 'debounce';
// const openThrottle = ['throttle', 'debounce'].includes(throttleType) && throttleTime > 0;
// if (!openThrottle) {
// return {
// ...attrs,
// };
// }
// const on: {
// onClick?: Fn;
// } = {};
// if (attrs.onClick && isFunction(attrs.onClick) && openThrottle) {
// const [handler] = useThrottle(attrs.onClick as any, throttleTime!, {
// debounce: isDebounce,
// immediate: false,
// });
// on.onClick = handler;
// }
// return {
// ...attrs,
// ...on,
// };
// });
const getColor = computed(() => { const getColor = computed(() => {
const res: string[] = [];
const { color, disabled } = props; const { color, disabled } = props;
color && res.push(`ant-btn-${color}`); return [
disabled && res.push('is-disabled'); {
return res; [`ant-btn-${color}`]: !!color,
[`is-disabled`]: disabled,
},
];
}); });
const getBindValue = computed((): any => { const getBindValue = computed((): any => {

View File

@@ -22,7 +22,8 @@
import { defineComponent, reactive, onMounted, ref, toRef, toRefs } from 'vue'; import { defineComponent, reactive, onMounted, ref, toRef, toRefs } from 'vue';
import { Skeleton } from 'ant-design-vue'; import { Skeleton } from 'ant-design-vue';
import { useTimeoutFn, useIntersectionObserver } from '@vueuse/core'; import { useTimeoutFn } from '@vueuse/core';
import { useIntersectionObserver } from '/@/hooks/event/useIntersectionObserver';
interface State { interface State {
isInit: boolean; isInit: boolean;
loading: boolean; loading: boolean;

View File

@@ -43,23 +43,22 @@
}, },
name: 'CollapseContainer', name: 'CollapseContainer',
props: { props: {
// 标题
title: { title: {
type: String as PropType<string>, type: String as PropType<string>,
default: '', default: '',
}, },
// 是否可以展开 // Can it be expanded
canExpan: { canExpan: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: true, default: true,
}, },
// 标题右侧温馨提醒 // Warm reminder on the right side of the title
helpMessage: { helpMessage: {
type: [Array, String] as PropType<string[] | string>, type: [Array, String] as PropType<string[] | string>,
default: '', default: '',
}, },
// 展开收缩的时候是否触发window.resize, // Whether to trigger window.resize when expanding and contracting,
// 可以适应表格和表单,当表单收缩起来,表格触发resize 自适应高度 // Can adapt to tables and forms, when the form shrinks, the form triggers resize to adapt to the height
triggerWindowResize: { triggerWindowResize: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: false, default: false,
@@ -68,12 +67,12 @@
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: false, default: false,
}, },
// 延时加载 // Delayed loading
lazy: { lazy: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: false, default: false,
}, },
// 延时加载时间 // Delayed loading time
lazyTime: { lazyTime: {
type: Number as PropType<number>, type: Number as PropType<number>,
default: 0, default: 0,
@@ -82,14 +81,14 @@
setup(props) { setup(props) {
const showRef = ref(true); const showRef = ref(true);
/** /**
* @description: 处理开展事件 * @description: Handling development events
*/ */
function handleExpand() { function handleExpand() {
const hasShow = !unref(showRef); const hasShow = !unref(showRef);
showRef.value = hasShow; showRef.value = hasShow;
if (props.triggerWindowResize) { if (props.triggerWindowResize) {
// 这里200毫秒是因为展开有动画, // 200 milliseconds here is because the expansion has animation,
useTimeoutFn(triggerWindowResize, 200); useTimeoutFn(triggerWindowResize, 200);
} }
} }

View File

@@ -9,25 +9,23 @@ export const props = {
type: Object as PropType<Event>, type: Object as PropType<Event>,
default: null, default: null,
}, },
// 样式
styles: { styles: {
type: Object as PropType<any>, type: Object as PropType<any>,
default: null, default: null,
}, },
showIcon: { showIcon: {
// 是否显示icon
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: true, default: true,
}, },
axis: { axis: {
// 鼠标右键点击的位置 // The position of the right mouse button click
type: Object as PropType<Axis>, type: Object as PropType<Axis>,
default() { default() {
return { x: 0, y: 0 }; return { x: 0, y: 0 };
}, },
}, },
items: { items: {
// 最重要的列表,没有的话直接不显示 // The most important list, if not, will not be displayed
type: Array as PropType<ContextMenuItem[]>, type: Array as PropType<ContextMenuItem[]>,
default() { default() {
return []; return [];

View File

@@ -1,2 +1,2 @@
// vue-count-to进行改造成支持vue3版本 // Transform vue-count-to to support vue3 version
export { default as CountTo } from './src/index.vue'; export { default as CountTo } from './src/index.vue';

View File

@@ -14,9 +14,8 @@ export default defineComponent({
props: descProps, props: descProps,
emits: ['register'], emits: ['register'],
setup(props, { attrs, slots, emit }) { setup(props, { attrs, slots, emit }) {
// props来自设置
const propsRef = ref<Partial<DescOptions> | null>(null); const propsRef = ref<Partial<DescOptions> | null>(null);
// 自定义title组件获得title // Custom title component: get title
const getMergeProps = computed(() => { const getMergeProps = computed(() => {
return { return {
...props, ...props,
@@ -34,19 +33,19 @@ export default defineComponent({
}); });
/** /**
* @description: 是否使用标题 * @description: Whether to use title
*/ */
const useWrapper = computed(() => { const useWrapper = computed(() => {
return !!unref(getMergeProps).title; return !!unref(getMergeProps).title;
}); });
/** /**
* @description: 获取配置Collapse * @description: Get configuration Collapse
*/ */
const getCollapseOptions = computed( const getCollapseOptions = computed(
(): CollapseContainerOptions => { (): CollapseContainerOptions => {
return { return {
// 默认不能展开 // Cannot be expanded by default
canExpand: false, canExpand: false,
...unref(getProps).collapseOptions, ...unref(getProps).collapseOptions,
}; };
@@ -57,7 +56,7 @@ export default defineComponent({
* @description:设置desc * @description:设置desc
*/ */
function setDescProps(descProps: Partial<DescOptions>): void { function setDescProps(descProps: Partial<DescOptions>): void {
// 保留上一次的setDrawerProps // Keep the last setDrawerProps
const mergeProps = deepMerge(unref(propsRef) || {}, descProps); const mergeProps = deepMerge(unref(propsRef) || {}, descProps);
propsRef.value = cloneDeep(mergeProps); propsRef.value = cloneDeep(mergeProps);
} }
@@ -68,7 +67,7 @@ export default defineComponent({
emit('register', methods); emit('register', methods);
// 防止换行 // Prevent line breaks
function renderLabel({ label, labelMinWidth, labelStyle }: DescItem) { function renderLabel({ label, labelMinWidth, labelStyle }: DescItem) {
if (!labelStyle && !labelMinWidth) { if (!labelStyle && !labelMinWidth) {
return label; return label;
@@ -101,7 +100,6 @@ export default defineComponent({
const width = contentMinWidth; const width = contentMinWidth;
return ( return (
// @ts-ignore
<Descriptions.Item label={renderLabel(item)} key={field} span={span}> <Descriptions.Item label={renderLabel(item)} key={field} span={span}>
{() => {() =>
contentMinWidth ? ( contentMinWidth ? (
@@ -131,7 +129,7 @@ export default defineComponent({
const renderContainer = () => { const renderContainer = () => {
const content = props.useCollapse ? renderDesc() : <div>{renderDesc()}</div>; const content = props.useCollapse ? renderDesc() : <div>{renderDesc()}</div>;
// 减少dom层级 // Reduce the dom level
return props.useCollapse ? ( return props.useCollapse ? (
<CollapseContainer <CollapseContainer
title={unref(getMergeProps).title} title={unref(getMergeProps).title}

View File

@@ -2,7 +2,6 @@ import type { VNode } from 'vue';
import type { CollapseContainerOptions } from '/@/components/Container/index'; import type { CollapseContainerOptions } from '/@/components/Container/index';
export interface DescItem { export interface DescItem {
// 最小宽度
labelMinWidth?: number; labelMinWidth?: number;
contentMinWidth?: number; contentMinWidth?: number;
@@ -11,7 +10,7 @@ export interface DescItem {
field: string; field: string;
label: any; label: any;
// 和并列 // Merge column
span?: number; span?: number;
show?: (...arg: any) => boolean; show?: (...arg: any) => boolean;
// render // render
@@ -19,10 +18,10 @@ export interface DescItem {
} }
export interface DescOptions { export interface DescOptions {
// 是否包含collapse组件 // Whether to include the collapse component
useCollapse?: boolean; useCollapse?: boolean;
/** /**
* item配置 * item configuration
* @type DescItem * @type DescItem
*/ */
schema: DescItem[]; schema: DescItem[];
@@ -32,7 +31,7 @@ export interface DescOptions {
*/ */
data: any; data: any;
/** /**
* 内置的CollapseContainer组件配置 * Built-in CollapseContainer component configuration
* @type CollapseContainerOptions * @type CollapseContainerOptions
*/ */
collapseOptions?: CollapseContainerOptions; collapseOptions?: CollapseContainerOptions;

View File

@@ -71,7 +71,7 @@ export default defineComponent({
} }
); );
// 底部按钮自定义实现, // Custom implementation of the bottom button,
const getFooterHeight = computed(() => { const getFooterHeight = computed(() => {
const { footerHeight, showFooter }: DrawerProps = unref(getProps); const { footerHeight, showFooter }: DrawerProps = unref(getProps);
if (showFooter && footerHeight) { if (showFooter && footerHeight) {
@@ -80,7 +80,7 @@ export default defineComponent({
return `0px`; return `0px`;
}); });
// 取消事件 // Cancel event
async function onClose(e: any) { async function onClose(e: any) {
const { closeFunc } = unref(getProps); const { closeFunc } = unref(getProps);
emit('close', e); emit('close', e);
@@ -93,7 +93,7 @@ export default defineComponent({
} }
function setDrawerProps(props: Partial<DrawerProps>): void { function setDrawerProps(props: Partial<DrawerProps>): void {
// 保留上一次的setDrawerProps // Keep the last setDrawerProps
propsRef.value = deepMerge(unref(propsRef) || {}, props); propsRef.value = deepMerge(unref(propsRef) || {}, props);
if (Reflect.has(props, 'visible')) { if (Reflect.has(props, 'visible')) {
visibleRef.value = !!props.visible; visibleRef.value = !!props.visible;

View File

@@ -1,9 +1,8 @@
import type { PropType } from 'vue'; import type { PropType } from 'vue';
// import {DrawerProps} from './types'
export const footerProps = { export const footerProps = {
confirmLoading: Boolean as PropType<boolean>, confirmLoading: Boolean as PropType<boolean>,
/** /**
* @description: 显示关闭按钮 * @description: Show close button
*/ */
showCancelBtn: { showCancelBtn: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
@@ -15,7 +14,7 @@ export const footerProps = {
default: '关闭', default: '关闭',
}, },
/** /**
* @description: 显示确认按钮 * @description: Show confirmation button
*/ */
showOkBtn: { showOkBtn: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,

View File

@@ -73,7 +73,7 @@ export interface DrawerProps extends DrawerFooterProps {
showDetailBack?: boolean; showDetailBack?: boolean;
visible?: boolean; visible?: boolean;
/** /**
* 内置的ScrollContainer组件配置 * Built-in ScrollContainer component configuration
* @type ScrollContainerOptions * @type ScrollContainerOptions
*/ */
scrollOptions?: ScrollContainerOptions; scrollOptions?: ScrollContainerOptions;

View File

@@ -22,7 +22,7 @@ import { isFunction } from '/@/utils/is';
const dataTransferRef = reactive<any>({}); const dataTransferRef = reactive<any>({});
/** /**
* @description: 适用于将drawer独立出去,外面调用 * @description: Applicable to separate drawer and call outside
*/ */
export function useDrawer(): UseDrawerReturnType { export function useDrawer(): UseDrawerReturnType {
if (!getCurrentInstance()) { if (!getCurrentInstance()) {

View File

@@ -1,7 +1,5 @@
import type { PropType } from 'vue'; import type { PropType } from 'vue';
/**
* @description: 基础表格参数配置
*/
export const dropdownProps = { export const dropdownProps = {
/** /**
* the trigger mode which executes the drop-down action * the trigger mode which executes the drop-down action
@@ -14,52 +12,6 @@ export const dropdownProps = {
return ['contextmenu']; return ['contextmenu'];
}, },
}, },
// /**
// * the dropdown menu
// * @type () => Menu
// */
// overlay: {
// type: null,
// },
// /**
// * Class name of the dropdown root element
// * @type string
// */
// overlayClassName: String,
// /**
// * Style of the dropdown root element
// * @type object
// */
// overlayStyle: Object,
// /**
// * whether the dropdown menu is visible
// * @type boolean
// */
// visible: Boolean,
// /**
// * whether the dropdown menu is disabled
// * @type boolean
// */
// disabled: Boolean,
// /**
// * to set the ontainer of the dropdown menu. The default is to create a div element in body, you can reset it to the scrolling area and make a relative reposition.
// * @default () => document.body
// * @type Function
// */
// getPopupContainer: Function,
// /**
// * placement of pop menu: bottomLeft bottomCenter bottomRight topLeft topCenter topRight
// * @default 'bottomLeft'
// * @type string
// */
// placement: String,
}; };
export const basicDropdownProps = Object.assign({}, dropdownProps, { export const basicDropdownProps = Object.assign({}, dropdownProps, {
dropMenuList: { dropMenuList: {

View File

@@ -27,7 +27,7 @@
<script lang="ts"> <script lang="ts">
import type { FormActionType, FormProps, FormSchema } from './types/form'; import type { FormActionType, FormProps, FormSchema } from './types/form';
import type { AdvanceState } from './types/hooks'; import type { AdvanceState } from './types/hooks';
import type { Ref } from 'vue'; import type { Ref, WatchStopHandle } from 'vue';
import type { ValidateFields } from 'ant-design-vue/lib/form/interface'; import type { ValidateFields } from 'ant-design-vue/lib/form/interface';
import { defineComponent, reactive, ref, computed, unref, toRef, onMounted, watch } from 'vue'; import { defineComponent, reactive, ref, computed, unref, toRef, onMounted, watch } from 'vue';
@@ -66,6 +66,7 @@
}); });
const defaultValueRef = ref<any>({}); const defaultValueRef = ref<any>({});
const isInitedDefaultRef = ref(false);
const propsRef = ref<Partial<FormProps>>({}); const propsRef = ref<Partial<FormProps>>({});
const schemaRef = ref<Nullable<FormSchema[]>>(null); const schemaRef = ref<Nullable<FormSchema[]>>(null);
const formElRef = ref<Nullable<FormActionType>>(null); const formElRef = ref<Nullable<FormActionType>>(null);
@@ -164,16 +165,19 @@
} }
); );
watch( const stopWatch: WatchStopHandle = watch(
() => getSchema.value, () => getSchema.value,
() => { (schema) => {
if (unref(isInitedDefaultRef)) {
return stopWatch();
}
if (schema && schema.length) {
initDefault(); initDefault();
isInitedDefaultRef.value = true;
}
} }
); );
/**
* @description:设置表单
*/
function setProps(formProps: Partial<FormProps>): void { function setProps(formProps: Partial<FormProps>): void {
const mergeProps = deepMerge(unref(propsRef) || {}, formProps); const mergeProps = deepMerge(unref(propsRef) || {}, formProps);
propsRef.value = mergeProps; propsRef.value = mergeProps;

View File

@@ -1,6 +1,6 @@
import { Component } from 'vue'; import { Component } from 'vue';
/** /**
* 组件列表,在这里注册才可以在表单使用 * Component list, register here to use it in the form
*/ */
import { import {
Input, Input,

View File

@@ -114,7 +114,7 @@ export default function ({
) { ) {
advanceState.hideAdvanceBtn = false; advanceState.hideAdvanceBtn = false;
// 大于3行默认收起 // More than 3 lines collapsed by default
} else if (!advanceState.isLoad) { } else if (!advanceState.isLoad) {
advanceState.isLoad = true; advanceState.isLoad = true;
advanceState.isAdvanced = !advanceState.isAdvanced; advanceState.isAdvanced = !advanceState.isAdvanced;
@@ -124,7 +124,7 @@ export default function ({
if (itemColSum > BASIC_COL_LEN) { if (itemColSum > BASIC_COL_LEN) {
return { isAdvanced: advanceState.isAdvanced, itemColSum }; return { isAdvanced: advanceState.isAdvanced, itemColSum };
} else { } else {
// 第一行始终显示 // The first line is always displayed
return { isAdvanced: true, itemColSum }; return { isAdvanced: true, itemColSum };
} }
} }

View File

@@ -62,7 +62,7 @@ export function useFormAction({
Object.keys(values).forEach((key) => { Object.keys(values).forEach((key) => {
const element = values[key]; const element = values[key];
if (element !== undefined && element !== null && fields.includes(key)) { if (element !== undefined && element !== null && fields.includes(key)) {
// 时间 // time type
if (itemIsDateType(key)) { if (itemIsDateType(key)) {
if (Array.isArray(element)) { if (Array.isArray(element)) {
const arr: any[] = []; const arr: any[] = [];
@@ -84,7 +84,7 @@ export function useFormAction({
// } // }
} }
/** /**
* @description: 根据字段名删除 * @description: Delete based on field name
*/ */
function removeSchemaByFiled(fields: string | string[]): void { function removeSchemaByFiled(fields: string | string[]): void {
const schemaList: FormSchema[] = cloneDeep(unref(getSchema)); const schemaList: FormSchema[] = cloneDeep(unref(getSchema));
@@ -102,7 +102,7 @@ export function useFormAction({
} }
/** /**
* @description: 根据字段名删除 * @description: Delete based on field name
*/ */
function _removeSchemaByFiled(field: string, schemaList: FormSchema[]): void { function _removeSchemaByFiled(field: string, schemaList: FormSchema[]): void {
if (isString(field)) { if (isString(field)) {
@@ -114,7 +114,7 @@ export function useFormAction({
} }
/** /**
* @description: 往某个字段后面插入,如果没有插入最后一个 * @description: Insert after a certain field, if not insert the last
*/ */
function appendSchemaByField(schema: FormSchema, prefixField?: string) { function appendSchemaByField(schema: FormSchema, prefixField?: string) {
const schemaList: FormSchema[] = cloneDeep(unref(getSchema)); const schemaList: FormSchema[] = cloneDeep(unref(getSchema));
@@ -169,7 +169,7 @@ export function useFormAction({
} }
/** /**
* @description: 是否是时间 * @description: Is it time
*/ */
function itemIsDateType(key: string) { function itemIsDateType(key: string) {
return unref(getSchema).some((item) => { return unref(getSchema).some((item) => {
@@ -193,7 +193,7 @@ export function useFormAction({
} }
/** /**
* @description: 表单提交 * @description: Form submission
*/ */
async function handleSubmit(e?: Event): Promise<void> { async function handleSubmit(e?: Event): Promise<void> {
e && e.preventDefault(); e && e.preventDefault();

View File

@@ -18,7 +18,7 @@ export function useFormValues({
getSchema, getSchema,
formModel, formModel,
}: UseFormValuesContext) { }: UseFormValuesContext) {
// 处理表单值 // Processing form values
function handleFormValues(values: any) { function handleFormValues(values: any) {
if (!isObject(values)) { if (!isObject(values)) {
return {}; return {};
@@ -37,7 +37,7 @@ export function useFormValues({
if (isArray(value) && value[0]._isAMomentObject && value[1]._isAMomentObject) { if (isArray(value) && value[0]._isAMomentObject && value[1]._isAMomentObject) {
value = value.map((item) => transformDateFunc(item)); value = value.map((item) => transformDateFunc(item));
} }
// 去除空格 // Remove spaces
if (isString(value)) { if (isString(value)) {
value = value.trim(); value = value.trim();
} }
@@ -47,7 +47,7 @@ export function useFormValues({
} }
/** /**
* @description: 处理时间区间参数 * @description: Processing time interval parameters
*/ */
function handleRangeTimeValue(values: any) { function handleRangeTimeValue(values: any) {
const fieldMapToTime = unref(fieldMapToTimeRef); const fieldMapToTime = unref(fieldMapToTimeRef);

View File

@@ -31,7 +31,7 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<
wrapperCol: globWrapperCol, wrapperCol: globWrapperCol,
} = unref(propsRef) as any; } = unref(propsRef) as any;
// 如果全局有设置labelWidth, 则所有item使用 // If labelWidth is set globally, all items use
if ((!globalLabelWidth && !labelWidth && !globalLabelCol) || disabledLabelWidth) { if ((!globalLabelWidth && !labelWidth && !globalLabelCol) || disabledLabelWidth) {
return { labelCol, wrapperCol }; return { labelCol, wrapperCol };
} }

View File

@@ -42,57 +42,57 @@ export type UseFormReturnType = [RegisterFn, FormActionType];
export interface FormProps { export interface FormProps {
// layout?: 'vertical' | 'inline' | 'horizontal'; // layout?: 'vertical' | 'inline' | 'horizontal';
// 表单值 // Form value
model?: any; model?: any;
// 整个表单所有项宽度 // The width of all items in the entire form
labelWidth?: number | string; labelWidth?: number | string;
// 重置时提交 // Submit form on reset
submitOnReset?: boolean; submitOnReset?: boolean;
// 整个表单通用Col配置 // Col configuration for the entire form
labelCol?: Partial<ColEx>; labelCol?: Partial<ColEx>;
// 整个表单通用Col配置 // Col configuration for the entire form
wrapperCol?: Partial<ColEx>; wrapperCol?: Partial<ColEx>;
// 通用col配置 // General col configuration
baseColProps?: Partial<ColEx>; baseColProps?: Partial<ColEx>;
// 表单配置规则 // Form configuration rules
schemas?: FormSchema[]; schemas?: FormSchema[];
// 用于合并到动态控制表单项的 函数values // Function values used to merge into dynamic control form items
mergeDynamicData?: any; mergeDynamicData?: any;
// 紧凑模式,用于搜索表单 // Compact mode for search forms
compact?: boolean; compact?: boolean;
// 空白行span // Blank line span
emptySpan?: number | Partial<ColEx>; emptySpan?: number | Partial<ColEx>;
// 表单内部组件大小 // Internal component size of the form
size?: 'default' | 'small' | 'large'; size?: 'default' | 'small' | 'large';
// 是否禁用 // Whether to disable
disabled?: boolean; disabled?: boolean;
// 时间区间字段映射成多个 // Time interval fields are mapped into multiple
fieldMapToTime?: FieldMapToTime; fieldMapToTime?: FieldMapToTime;
// 自动设置placeholder // Placeholder is set automatically
autoSetPlaceHolder?: boolean; autoSetPlaceHolder?: boolean;
// 校验信息是否加入label // Check whether the information is added to the label
rulesMessageJoinLabel?: boolean; rulesMessageJoinLabel?: boolean;
// 是否显示收起展开按钮 // Whether to show collapse and expand buttons
showAdvancedButton?: boolean; showAdvancedButton?: boolean;
// 超过指定行数自动收起 // Automatically collapse over the specified number of rows
autoAdvancedLine?: number; autoAdvancedLine?: number;
// 是否显示操作按钮 // Whether to show the operation button
showActionButtonGroup?: boolean; showActionButtonGroup?: boolean;
// 重置按钮配置 // Reset button configuration
resetButtonOptions?: Partial<ButtonProps>; resetButtonOptions?: Partial<ButtonProps>;
// 确认按钮配置 // Confirm button configuration
submitButtonOptions?: Partial<ButtonProps>; submitButtonOptions?: Partial<ButtonProps>;
// 操作列配置 // Operation column configuration
actionColOptions?: Partial<ColEx>; actionColOptions?: Partial<ColEx>;
// 显示重置按钮 // Show reset button
showResetButton?: boolean; showResetButton?: boolean;
// 显示确认按钮 // Show confirmation button
showSubmitButton?: boolean; showSubmitButton?: boolean;
resetFunc?: () => Promise<void>; resetFunc?: () => Promise<void>;
@@ -101,27 +101,27 @@ export interface FormProps {
colon?: boolean; colon?: boolean;
} }
export interface FormSchema { export interface FormSchema {
// 字段名 // Field name
field: string; field: string;
// 内部值更改触发的事件名,默认 change // Event name triggered by internal value change, default change
changeEvent?: string; changeEvent?: string;
// v-model绑定的变量名 默认 value // Variable name bound to v-model Default value
valueField?: string; valueField?: string;
// 标签名 // Label name
label: string; label: string;
// 辅助文本 // Auxiliary text
subLabel?: string; subLabel?: string;
// 文本右侧帮助文本 // Help text on the right side of the text
helpMessage?: string | string[]; helpMessage?: string | string[];
// BaseHelp组件props // BaseHelp component props
helpComponentProps?: Partial<HelpComponentProps>; helpComponentProps?: Partial<HelpComponentProps>;
// label宽度,有传的话 itemProps配置的 labelCol WrapperCol会失效 // Label width, if it is passed, the labelCol and WrapperCol configured by itemProps will be invalid
labelWidth?: string | number; labelWidth?: string | number;
// 禁用调有formModel全局设置的labelWidth,自己手动设置 labelColwrapperCol // Disable the adjustment of labelWidth with global settings of formModel, and manually set labelCol and wrapperCol by yourself
disabledLabelWidth?: boolean; disabledLabelWidth?: boolean;
// 组件 // render component
component: ComponentType; component: ComponentType;
// 组件参数 // Component parameters
componentProps?: componentProps?:
| ((opt: { | ((opt: {
schema: FormSchema; schema: FormSchema;
@@ -130,35 +130,35 @@ export interface FormSchema {
formModel: any; formModel: any;
}) => any) }) => any)
| object; | object;
// 必填 // Required
required?: boolean; required?: boolean;
// 校验规则 // Validation rules
rules?: Rule[]; rules?: Rule[];
// 校验信息是否加入label // Check whether the information is added to the label
rulesMessageJoinLabel?: boolean; rulesMessageJoinLabel?: boolean;
// 参考formModelItem // Reference formModelItem
itemProps?: Partial<FormItem>; itemProps?: Partial<FormItem>;
// formModelItem外层的col配置 // col configuration outside formModelItem
colProps?: Partial<ColEx>; colProps?: Partial<ColEx>;
// 默认值 // 默认值
defaultValue?: any; defaultValue?: any;
isAdvanced?: boolean; isAdvanced?: boolean;
// 配合详情组件 // Matching details components
span?: number; span?: number;
ifShow?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); ifShow?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
show?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); show?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
// 渲染form-item标签内的内容 // Render the content in the form-item tag
render?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string; render?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string;
// 渲染 col内容,需要外层包裹 form-item // Rendering col content requires outer wrapper form-item
renderColContent?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string; renderColContent?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string;
renderComponentContent?: renderComponentContent?:
@@ -167,10 +167,10 @@ export interface FormSchema {
| VNode[] | VNode[]
| string; | string;
// 自定义slot, from-item // Custom slot, in from-item
slot?: string; slot?: string;
// 自定义slot,类似renderColContent // Custom slot, similar to renderColContent
colSlot?: string; colSlot?: string;
dynamicDisabled?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); dynamicDisabled?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
@@ -179,16 +179,16 @@ export interface FormSchema {
} }
export interface HelpComponentProps { export interface HelpComponentProps {
maxWidth: string; maxWidth: string;
// 是否显示序号 // Whether to display the serial number
showIndex: boolean; showIndex: boolean;
// 文本列表 // Text list
text: any; text: any;
// 颜色 // colour
color: string; color: string;
// 字体大小 // font size
fontSize: string; fontSize: string;
icon: string; icon: string;
absolute: boolean; absolute: boolean;
// 定位 // Positioning
position: any; position: any;
} }

View File

@@ -6,7 +6,8 @@ import { Menu } from 'ant-design-vue';
import SearchInput from './SearchInput.vue'; import SearchInput from './SearchInput.vue';
import MenuContent from './MenuContent'; import MenuContent from './MenuContent';
import { MenuModeEnum, MenuThemeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
import { ThemeEnum } from '/@/enums/appEnum';
import { menuStore } from '/@/store/modules/menu'; import { menuStore } from '/@/store/modules/menu';
import { appStore } from '/@/store/modules/app'; import { appStore } from '/@/store/modules/app';
@@ -254,7 +255,7 @@ export default defineComponent({
{getSlot(slots, 'header')} {getSlot(slots, 'header')}
<SearchInput <SearchInput
class={!props.search ? 'hidden' : ''} class={!props.search ? 'hidden' : ''}
theme={props.theme as MenuThemeEnum} theme={props.theme as ThemeEnum}
onChange={handleInputChange} onChange={handleInputChange}
onClick={handleInputClick} onClick={handleInputClick}
collapsed={getCollapsedState} collapsed={getCollapsedState}

View File

@@ -11,7 +11,7 @@
<script lang="ts"> <script lang="ts">
import type { PropType } from 'vue'; import type { PropType } from 'vue';
import { defineComponent, computed } from 'vue'; import { defineComponent, computed } from 'vue';
import { MenuThemeEnum } from '/@/enums/menuEnum'; import { ThemeEnum } from '/@/enums/appEnum';
// hook // hook
import { useDebounce } from '/@/hooks/core/useDebounce'; import { useDebounce } from '/@/hooks/core/useDebounce';
@@ -25,7 +25,7 @@
default: true, default: true,
}, },
theme: { theme: {
type: String as PropType<MenuThemeEnum>, type: String as PropType<ThemeEnum>,
}, },
}, },
setup(props, { emit }) { setup(props, { emit }) {

View File

@@ -1,7 +1,8 @@
import type { Menu } from '/@/router/types'; import type { Menu } from '/@/router/types';
import type { PropType } from 'vue'; import type { PropType } from 'vue';
import { MenuModeEnum, MenuTypeEnum, MenuThemeEnum } from '/@/enums/menuEnum'; import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
import { ThemeEnum } from '/@/enums/appEnum';
export const basicProps = { export const basicProps = {
items: { items: {
type: Array as PropType<Menu[]>, type: Array as PropType<Menu[]>,
@@ -40,7 +41,7 @@ export const basicProps = {
}, },
theme: { theme: {
type: String as PropType<string>, type: String as PropType<string>,
default: MenuThemeEnum.DARK, default: ThemeEnum.DARK,
}, },
showLogo: { showLogo: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,

View File

@@ -1,3 +1,4 @@
import { ThemeEnum } from '/@/enums/appEnum';
export interface MenuState { export interface MenuState {
// 默认选中的列表 // 默认选中的列表
defaultSelectedKeys: string[]; defaultSelectedKeys: string[];
@@ -6,7 +7,7 @@ export interface MenuState {
mode: MenuModeEnum; mode: MenuModeEnum;
// 主题 // 主题
theme: ComputedRef<MenuThemeEnum> | MenuThemeEnum; theme: ComputedRef<ThemeEnum> | ThemeEnum;
// 缩进 // 缩进
inlineIndent?: number; inlineIndent?: number;

View File

@@ -208,8 +208,8 @@
padding: 16px; padding: 16px;
.ant-form { .ant-form {
padding: 12px 12px 4px 12px; padding: 20px 20px 4px 12px;
margin-bottom: 12px; margin-bottom: 18px;
background: #fff; background: #fff;
border-radius: 2px; border-radius: 2px;
} }

View File

@@ -33,7 +33,7 @@ import {
Result, Result,
Empty, Empty,
} from 'ant-design-vue'; } from 'ant-design-vue';
import { getApp } from '/@/useApp'; import { getApp } from '/@/setup/Application';
const compList = [Icon, Button, AntButton.Group, AppFooter]; const compList = [Icon, Button, AntButton.Group, AppFooter];

View File

@@ -16,4 +16,4 @@
@page-loading-z-index: 10000; @page-loading-z-index: 10000;
// left-menu // left-menu
@app-menu-item-height: 46px; @app-menu-item-height: 44px;

View File

@@ -15,6 +15,13 @@ export enum ThemeModeEnum {
SEMI_DARK = 'semi-dark-mode', SEMI_DARK = 'semi-dark-mode',
} }
// menu theme enum
export enum ThemeEnum {
DARK = 'dark',
LIGHT = 'light',
}
/** /**
* 权限模式 * 权限模式
*/ */

View File

@@ -1 +0,0 @@
export const MENU_DRAG_STATE = 'MENU_DRAG_STATE';

View File

@@ -10,13 +10,6 @@ export enum MenuTypeEnum {
TOP_MENU = 'top-menu', TOP_MENU = 'top-menu',
} }
// menu theme enum
export enum MenuThemeEnum {
DARK = 'dark',
LIGHT = 'light',
}
// 折叠触发器位置 // 折叠触发器位置
export enum TriggerEnum { export enum TriggerEnum {
// 不显示 // 不显示

View File

@@ -1,4 +0,0 @@
export enum PaginationEnum {
// Default number of pages
DEFAULT_PAGE_SIZE = 20,
}

View File

@@ -1,6 +0,0 @@
export enum ResultEnum {
SUCCESS = 0,
ERROR = 1,
TIMEOUT = 401,
TYPE = 'success',
}

View File

@@ -0,0 +1,18 @@
import { nextTick, onMounted, onActivated } from 'vue';
export function onMountedOrActivated(hook: Fn) {
let mounted: boolean;
onMounted(() => {
hook();
nextTick(() => {
mounted = true;
});
});
onActivated(() => {
if (mounted) {
hook();
}
});
}

View File

@@ -0,0 +1,9 @@
import { getCurrentInstance } from 'vue';
// expose public api
export function useExpose(apis: Record<string, any>) {
const instance = getCurrentInstance();
if (instance) {
Object.assign(instance.proxy, apis);
}
}

View File

@@ -0,0 +1,47 @@
import { toRef, Ref, reactive, customRef, SetupContext, watch, UnwrapRef } from 'vue';
export type ModelProps<U> = Readonly<
{ [props: string]: any } & {
modelValue?: U;
}
>;
export function useModel<T>(
props: ModelProps<T>,
context: SetupContext,
callback?: (val: T | undefined, internalState: { value: UnwrapRef<T | undefined> }) => any
) {
const outerModel: Ref<T | undefined> = toRef(props, 'modelValue');
const internalState = reactive({
value: props.modelValue,
});
const internalModel = customRef<UnwrapRef<T> | undefined>((track, trigger) => {
return {
get() {
track();
return internalState.value;
},
set(newVal) {
if (internalState.value === newVal) return;
internalState.value = newVal;
context.emit('update:modelValue', newVal);
trigger();
},
};
});
watch(outerModel, (val, oldVal) => {
if (val === oldVal || val === internalState.value) return;
if (callback) {
callback(val, internalState);
return;
}
internalState.value = val as UnwrapRef<T> | undefined;
});
return {
internalState,
internalModel,
};
}

15
src/hooks/core/useRefs.ts Normal file
View File

@@ -0,0 +1,15 @@
import { ref, onBeforeUpdate } from 'vue';
export function useRefs() {
const refs = ref([] as Element[]);
onBeforeUpdate(() => {
refs.value = [];
});
const setRefs = (index: number) => (el: Element) => {
refs.value[index] = el;
};
return [refs, setRefs];
}

View File

@@ -27,7 +27,7 @@ export function throttle<T extends unknown[]>(
} }
let { immediate = false } = options; let { immediate = false } = options;
const { once = false, debounce = false } = options; const { once = false, debounce = false } = options;
let timeoutId: ReturnType<typeof setTimeout> | undefined; let timeoutId: Nullable<TimeoutHandle>;
// Has it been cancelled // Has it been cancelled
let cancelled: boolean | null = false; let cancelled: boolean | null = false;
/** /**
@@ -36,7 +36,7 @@ export function throttle<T extends unknown[]>(
function clearTimer() { function clearTimer() {
if (timeoutId) { if (timeoutId) {
window.clearTimeout(timeoutId); window.clearTimeout(timeoutId);
timeoutId = undefined; timeoutId = null;
} }
} }
/** cancel exec */ /** cancel exec */
@@ -63,7 +63,7 @@ export function throttle<T extends unknown[]>(
const callNow = !timeoutId; const callNow = !timeoutId;
if (callNow) { if (callNow) {
exec(); exec();
timeoutId = undefined; timeoutId = null;
} }
} else { } else {
debounce && clearTimer(); debounce && clearTimer();

View File

@@ -0,0 +1,20 @@
import { ref, watch, Ref, SetupContext } from 'vue';
export function useToggle(internalModel: Ref<unknown>, { emit }: SetupContext) {
const isActive = ref(!!internalModel.value);
const isToggled = ref(false);
watch(internalModel, (val) => {
isActive.value = !!val;
});
watch(isActive, (value) => {
!!value !== !!internalModel.value && emit('onUpdate:modelValue', value);
});
function toggleIt() {
isToggled.value = !isToggled.value;
}
return {
isActive,
toggleIt,
isToggled,
};
}

View File

@@ -0,0 +1,48 @@
import { Ref, watchEffect, ref } from 'vue';
interface IntersectionObserverProps {
target: Ref<Element | null | undefined>;
root?: Ref<Element | null | undefined>;
onIntersect: IntersectionObserverCallback;
rootMargin?: string;
threshold?: number;
}
export function useIntersectionObserver({
target,
root,
onIntersect,
rootMargin = '0px',
threshold = 0.1,
}: IntersectionObserverProps) {
let cleanup = () => {};
const observer: Ref<Nullable<IntersectionObserver>> = ref(null);
const stopEffect = watchEffect(() => {
cleanup();
observer.value = new IntersectionObserver(onIntersect, {
root: root ? root.value : null,
rootMargin,
threshold,
});
const current = target.value;
current && observer.value.observe(current);
cleanup = () => {
if (observer.value) {
observer.value.disconnect();
target.value && observer.value.unobserve(target.value);
}
};
});
return {
observer,
stop: () => {
cleanup();
stopEffect();
},
};
}

View File

@@ -1,10 +1,15 @@
import { ref, Ref, unref } from 'vue'; import { ref, Ref, unref } from 'vue';
import { useEventListener } from '/@/hooks/event/useEventListener'; import { useEventListener } from '/@/hooks/event/useEventListener';
import { isServer } from '/@/utils/is';
export function useClickOutside<T extends HTMLElement>( export function useClickOutside<T extends HTMLElement>(
containerRef: Ref<T>, containerRef: Ref<T>,
onClickOutside: (e: MouseEvent | TouchEvent) => void onClickOutside: (e: MouseEvent | TouchEvent) => void,
eventName = 'click'
) { ) {
if (isServer) return;
const isTouchRef = ref(false); const isTouchRef = ref(false);
useEventListener({ useEventListener({
el: document, el: document,
name: 'touchend', name: 'touchend',
@@ -13,7 +18,7 @@ export function useClickOutside<T extends HTMLElement>(
}); });
useEventListener({ useEventListener({
el: document, el: document,
name: 'click', name: eventName,
listener: handler, listener: handler,
options: true, options: true,
}); });

View File

@@ -0,0 +1,13 @@
import { Ref, ref, onMounted, nextTick } from 'vue';
import { useRect } from '/@/hooks/web/useRect';
export const useHeight = (element: Element | Ref<Element>) => {
const height = ref();
onMounted(() => {
nextTick(() => {
height.value = useRect(element).height;
});
});
return height;
};

View File

@@ -1,4 +1,4 @@
import { onUnmounted, watchEffect } from 'vue'; import { computed, onUnmounted, watchEffect } from 'vue';
import { useThrottle } from '/@/hooks/core/useThrottle'; import { useThrottle } from '/@/hooks/core/useThrottle';
import { appStore } from '/@/store/modules/app'; import { appStore } from '/@/store/modules/app';
@@ -7,10 +7,11 @@ import { userStore } from '/@/store/modules/user';
export function useLockPage() { export function useLockPage() {
let timeId: ReturnType<typeof setTimeout>; let timeId: ReturnType<typeof setTimeout>;
function clear() { function clear(): void {
window.clearTimeout(timeId); window.clearTimeout(timeId);
} }
function resetCalcLockTimeout() {
function resetCalcLockTimeout(): void {
// not login // not login
if (!userStore.getTokenState) { if (!userStore.getTokenState) {
clear(); clear();
@@ -28,31 +29,37 @@ export function useLockPage() {
}, lockTime * 60 * 1000); }, lockTime * 60 * 1000);
} }
function lockPage() { function lockPage(): void {
appStore.commitLockInfoState({ appStore.commitLockInfoState({
isLock: true, isLock: true,
pwd: undefined, pwd: undefined,
}); });
} }
watchEffect(() => { watchEffect((onClean) => {
if (userStore.getTokenState) { if (userStore.getTokenState) {
resetCalcLockTimeout(); resetCalcLockTimeout();
} else { } else {
clear(); clear();
} }
onClean(() => {
clear();
}); });
});
onUnmounted(() => { onUnmounted(() => {
clear(); clear();
}); });
const [keyupFn] = useThrottle(resetCalcLockTimeout, 2000); const [keyupFn] = useThrottle(resetCalcLockTimeout, 2000);
return { return computed(() => {
registerGlobOnKeyup: keyupFn, const openLockPage = appStore.getProjectConfig.lockTime;
registerGlobOnMouseMove: keyupFn, if (openLockPage) {
on: { return { onKeyup: keyupFn, onMousemove: keyupFn };
onKeyup: keyupFn, } else {
onMousemove: keyupFn, clear();
}, return {};
}; }
});
} }

View File

@@ -1,18 +1,24 @@
import type { RouteRecordRaw } from 'vue-router';
import { appStore } from '/@/store/modules/app'; import { appStore } from '/@/store/modules/app';
import { permissionStore } from '/@/store/modules/permission'; import { permissionStore } from '/@/store/modules/permission';
import { useTabs } from './useTabs';
import { RoleEnum } from '/@/enums/roleEnum';
import router, { resetRouter } from '/@/router';
import { userStore } from '/@/store/modules/user'; import { userStore } from '/@/store/modules/user';
import { isArray } from '/@/utils/is';
import { RootRoute } from '/@/router/routes';
import type { RouteRecordRaw } from 'vue-router';
import { PermissionModeEnum } from '/@/enums/appEnum';
import { intersection } from 'lodash-es';
import { useTabs } from './useTabs';
import router, { resetRouter } from '/@/router';
import { RootRoute } from '/@/router/routes';
import { PermissionModeEnum } from '/@/enums/appEnum';
import { RoleEnum } from '/@/enums/roleEnum';
import { intersection } from 'lodash-es';
import { isArray } from '/@/utils/is';
// User permissions related operations
export function usePermission() { export function usePermission() {
/** /**
* 更换权限模式 * Change permission mode
*/ */
async function togglePermissionMode() { async function togglePermissionMode() {
appStore.commitProjectConfigState({ appStore.commitProjectConfigState({
@@ -25,6 +31,10 @@ export function usePermission() {
// location.reload(); // location.reload();
} }
/**
* Reset and regain authority resource information
* @param id
*/
async function resume(id?: string | number) { async function resume(id?: string | number) {
resetRouter(); resetRouter();
const routes = await permissionStore.buildRoutesAction(id); const routes = await permissionStore.buildRoutesAction(id);
@@ -41,12 +51,12 @@ export function usePermission() {
} }
/** /**
* 角色模式下判断是否显示 * Determine whether there is permission
*/ */
function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean { function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
const permMode = appStore.getProjectConfig.permissionMode; const permMode = appStore.getProjectConfig.permissionMode;
if (PermissionModeEnum.ROLE === permMode) { if (PermissionModeEnum.ROLE === permMode) {
// !不传默认可见 // Visible by default
if (!value) { if (!value) {
return def; return def;
} }
@@ -56,7 +66,7 @@ export function usePermission() {
return (intersection(value, userStore.getRoleListState) as RoleEnum[]).length > 0; return (intersection(value, userStore.getRoleListState) as RoleEnum[]).length > 0;
} }
if (PermissionModeEnum.BACK === permMode) { if (PermissionModeEnum.BACK === permMode) {
// !不传默认可见 // Visible by default
if (!value) { if (!value) {
return def; return def;
} }
@@ -66,17 +76,18 @@ export function usePermission() {
} }
return (intersection(value, allCodeList) as string[]).length > 0; return (intersection(value, allCodeList) as string[]).length > 0;
} }
return true; return true;
} }
/** /**
* 更新角色 * Change roles
* @param roles * @param roles
*/ */
async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> { async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> {
if (appStore.getProjectConfig.permissionMode !== PermissionModeEnum.ROLE) { if (appStore.getProjectConfig.permissionMode !== PermissionModeEnum.ROLE) {
throw new Error('请在配置中将PermissionModeEnum切换为ROLE模式在进行操作!'); throw new Error(
'Please switch PermissionModeEnum to ROLE mode in the configuration to operate!'
);
} }
if (!isArray(roles)) { if (!isArray(roles)) {
roles = [roles]; roles = [roles];
@@ -86,10 +97,10 @@ export function usePermission() {
} }
/** /**
* * Change menu
*/ */
async function changeMenu(id?: string | number) { async function changeMenu(id?: string | number) {
// 这里传入id是为测试实际可以不用传会自动获取登录人的id // TODO The id passed in here is for testing. Actually, you dont need to pass it. The id of the login person will be automatically obtained.
resume(id); resume(id);
} }

33
src/hooks/web/useRect.ts Normal file
View File

@@ -0,0 +1,33 @@
import { Ref, unref } from 'vue';
import { isWindow } from '/@/utils/is';
export const useRect = (elementRef: (Element | Window) | Ref<Element | Window | undefined>) => {
const element = unref(elementRef);
if (isWindow(element)) {
const width = element.innerWidth;
const height = element.innerHeight;
return {
top: 0,
left: 0,
right: width,
bottom: height,
width,
height,
};
}
if (element && element.getBoundingClientRect) {
return element.getBoundingClientRect();
}
return {
top: 0,
left: 0,
right: 0,
bottom: 0,
width: 0,
height: 0,
};
};

View File

@@ -35,7 +35,7 @@ interface SwitchOptions {
} }
interface SelectConfig { interface SelectConfig {
options?: SelectOptions; options?: LabelValueOptions;
def?: any; def?: any;
disabled?: boolean; disabled?: boolean;
handler?: Fn; handler?: Fn;

View File

@@ -1,5 +1,5 @@
import { ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum'; import { ContentEnum, RouterTransitionEnum, ThemeEnum } from '/@/enums/appEnum';
import { MenuThemeEnum, TopMenuAlignEnum, TriggerEnum } from '/@/enums/menuEnum'; import { TopMenuAlignEnum, TriggerEnum } from '/@/enums/menuEnum';
export enum HandlerEnum { export enum HandlerEnum {
CHANGE_LAYOUT, CHANGE_LAYOUT,
@@ -40,11 +40,11 @@ export enum HandlerEnum {
export const themeOptions = [ export const themeOptions = [
{ {
value: MenuThemeEnum.LIGHT, value: ThemeEnum.LIGHT,
label: '亮色', label: '亮色',
}, },
{ {
value: MenuThemeEnum.DARK, value: ThemeEnum.DARK,
label: '暗色', label: '暗色',
}, },
]; ];

View File

@@ -4,34 +4,40 @@ import router, { setupRouter } from '/@/router';
import { setupStore } from '/@/store'; import { setupStore } from '/@/store';
import { setupAntd } from '/@/setup/ant-design-vue'; import { setupAntd } from '/@/setup/ant-design-vue';
import { setupErrorHandle } from '/@/setup/error-handle'; import { setupErrorHandle } from '/@/setup/error-handle';
import { setupDirectives } from '/@/setup/directives'; import { setupGlobDirectives } from '/@/setup/directives';
import { isDevMode, isProdMode, isUseMock } from '/@/utils/env';
import { setupProdMockServer } from '../mock/_createProductionServer'; import { setupProdMockServer } from '../mock/_createProductionServer';
import { setApp } from './useApp'; import { setApp } from '/@/setup/Application';
import App from './App.vue'; import App from './App.vue';
import { isDevMode, isProdMode, isUseMock } from '/@/utils/env';
import '/@/design/index.less'; import '/@/design/index.less';
const app = createApp(App); const app = createApp(App);
// ui // Configure component library
setupAntd(app); setupAntd(app);
// router
// Configure routing
setupRouter(app); setupRouter(app);
// store
// Configure vuex store
setupStore(app); setupStore(app);
// Directives // Register global directive
setupDirectives(app); setupGlobDirectives(app);
// error-handle // Configure global error handling
setupErrorHandle(app); setupErrorHandle(app);
// Mount when the route is ready
router.isReady().then(() => { router.isReady().then(() => {
app.mount('#app'); app.mount('#app');
}); });
// The development environment takes effect
if (isDevMode()) { if (isDevMode()) {
app.config.performance = true; app.config.performance = true;
window.__APP__ = app; window.__APP__ = app;

View File

@@ -1,7 +1,7 @@
import type { ProjectConfig } from '/@/types/config'; import type { ProjectConfig } from '/@/types/config';
import { MenuTypeEnum, MenuThemeEnum, MenuModeEnum, TriggerEnum } from '/@/enums/menuEnum'; import { MenuTypeEnum, MenuModeEnum, TriggerEnum } from '/@/enums/menuEnum';
import { ContentEnum, PermissionModeEnum, RouterTransitionEnum } from '/@/enums/appEnum'; import { ContentEnum, PermissionModeEnum, ThemeEnum, RouterTransitionEnum } from '/@/enums/appEnum';
import { primaryColor } from '../../build/config/lessModifyVars'; import { primaryColor } from '../../build/config/lessModifyVars';
import { isProdMode } from '/@/utils/env'; import { isProdMode } from '/@/utils/env';
@@ -39,7 +39,7 @@ const setting: ProjectConfig = {
// 是否显示顶部 // 是否显示顶部
show: true, show: true,
// theme // theme
theme: MenuThemeEnum.LIGHT, theme: ThemeEnum.LIGHT,
// 开启锁屏功能 // 开启锁屏功能
useLockPage: true, useLockPage: true,
// 显示刷新按钮 // 显示刷新按钮
@@ -74,7 +74,7 @@ const setting: ProjectConfig = {
// 菜单类型 // 菜单类型
type: MenuTypeEnum.SIDEBAR, type: MenuTypeEnum.SIDEBAR,
// 菜单主题 // 菜单主题
theme: MenuThemeEnum.DARK, theme: ThemeEnum.DARK,
// 分割菜单 // 分割菜单
split: false, split: false,
// 顶部菜单布局 // 顶部菜单布局

View File

@@ -1,4 +1,7 @@
// Application related functions /**
* Application configuration
*/
import type { ProjectConfig } from '/@/types/config'; import type { ProjectConfig } from '/@/types/config';
import type { App } from 'vue'; import type { App } from 'vue';
import { computed, ref } from 'vue'; import { computed, ref } from 'vue';
@@ -18,7 +21,9 @@ import {
import { appStore } from '/@/store/modules/app'; import { appStore } from '/@/store/modules/app';
// Used to share global app instances
let app: App; let app: App;
export function setApp(_app: App): void { export function setApp(_app: App): void {
app = _app; app = _app;
} }
@@ -27,7 +32,7 @@ export function getApp(): App {
return app; return app;
} }
// TODO 主题切换 // TODO Theme switching
export function useThemeMode(mode: ThemeModeEnum) { export function useThemeMode(mode: ThemeModeEnum) {
const modeRef = ref(mode); const modeRef = ref(mode);
const html = document.documentElement; const html = document.documentElement;
@@ -43,7 +48,7 @@ export function useThemeMode(mode: ThemeModeEnum) {
} }
// Initial project configuration // Initial project configuration
export function useInitAppConfigStore() { export function initAppConfigStore() {
let projCfg: ProjectConfig = getLocal(PROJ_CFG_KEY) as ProjectConfig; let projCfg: ProjectConfig = getLocal(PROJ_CFG_KEY) as ProjectConfig;
if (!projCfg) { if (!projCfg) {
projCfg = projectSetting; projCfg = projectSetting;
@@ -67,8 +72,8 @@ export function useInitAppConfigStore() {
appStore.commitProjectConfigState(projCfg); appStore.commitProjectConfigState(projCfg);
} }
// Config Provider // antdv Config Provider
export function useConfigProvider() { export function getConfigProvider() {
function transformCellText({ text }: { text: string }) { function transformCellText({ text }: { text: string }) {
if (isNull(text) || isUnDef(text)) { if (isNull(text) || isUnDef(text)) {
return ' - '; return ' - ';

View File

@@ -1,5 +1,5 @@
// Load on demand // Load on demand
// This module only introduces components globally before login
import type { App } from 'vue'; import type { App } from 'vue';
import { import {

View File

@@ -1,14 +0,0 @@
@import (reference) '../../design/index.less';
.app-svg-loading {
position: relative;
width: auto;
&__tip {
display: block;
margin-top: 4px;
font-size: 13px;
color: #303133;
text-align: center;
}
}

View File

@@ -1,11 +1,16 @@
import { Spin } from 'ant-design-vue'; import { Spin } from 'ant-design-vue';
import svgImg from '/@/assets/images/loading.svg'; import svgImg from '/@/assets/images/loading.svg';
import './spin.less';
Spin.setDefaultIndicator({ Spin.setDefaultIndicator({
indicator: () => { indicator: () => {
return ( return (
<div class="app-svg-loading"> <div
class="app-svg-loading"
style={{
position: 'relative',
width: 'auto',
}}
>
<img src={svgImg} alt="" height="32" width="32" class="g-loading" /> <img src={svgImg} alt="" height="32" width="32" class="g-loading" />
</div> </div>
); );

86
src/setup/application.ts Normal file
View File

@@ -0,0 +1,86 @@
/**
* Application configuration
*/
import type { ProjectConfig } from '/@/types/config';
import type { App } from 'vue';
import { computed, ref } from 'vue';
import { ThemeModeEnum } from '/@/enums/appEnum';
import { PROJ_CFG_KEY } from '/@/enums/cacheEnum';
import projectSetting from '/@/settings/projectSetting';
import { getLocal } from '/@/utils/helper/persistent';
import { isUnDef, isNull } from '/@/utils/is';
import {
updateGrayMode,
updateColorWeak,
updateHeaderBgColor,
updateSidebarBgColor,
} from '/@/setup/theme';
import { appStore } from '/@/store/modules/app';
// Used to share global app instances
let app: App;
export function setApp(_app: App): void {
app = _app;
}
export function getApp(): App {
return app;
}
// TODO Theme switching
export function useThemeMode(mode: ThemeModeEnum) {
const modeRef = ref(mode);
const html = document.documentElement;
const clsList = html.classList;
const change = () => {
clsList.contains(mode) ? clsList.remove(mode) : clsList.add(mode);
};
return {
runChangeThemeMode: change,
mode: computed(() => modeRef.value),
};
}
// Initial project configuration
export function initAppConfigStore() {
let projCfg: ProjectConfig = getLocal(PROJ_CFG_KEY) as ProjectConfig;
if (!projCfg) {
projCfg = projectSetting;
}
const { colorWeak, grayMode, headerBgColor, menuBgColor } = projCfg;
try {
// if (
// themeColor !== primaryColor &&
// themeColor &&
// process.env.VUE_APP_USE_THEME_REPLACER !== 'TRUE'
// ) {
// updateTheme(themeColor);
// }
headerBgColor && updateHeaderBgColor(headerBgColor);
menuBgColor && updateSidebarBgColor(menuBgColor);
grayMode && updateGrayMode(grayMode);
colorWeak && updateColorWeak(colorWeak);
} catch (error) {
console.log(error);
}
appStore.commitProjectConfigState(projCfg);
}
// antdv Config Provider
export function getConfigProvider() {
function transformCellText({ text }: { text: string }) {
if (isNull(text) || isUnDef(text)) {
return ' - ';
}
return text;
}
return {
transformCellText,
};
}

View File

@@ -1,5 +1,9 @@
/**
* Configure and register global directives
*/
import type { App } from 'vue'; import type { App } from 'vue';
import { setupPermissionDirective } from './permission'; import { setupPermissionDirective } from './permission';
export function setupDirectives(app: App) {
export function setupGlobDirectives(app: App) {
setupPermissionDirective(app); setupPermissionDirective(app);
} }

View File

@@ -1,5 +1,11 @@
/**
* Global authority directive
* Used for fine-grained control of component permissions
* @Example v-auth="RoleEnum.TEST"
*/
import type { App, Directive, DirectiveBinding } from 'vue';
import { appStore } from '/@/store/modules/app'; import { appStore } from '/@/store/modules/app';
import type { App } from 'vue';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import { PermissionModeEnum } from '/@/enums/appEnum'; import { PermissionModeEnum } from '/@/enums/appEnum';
const { hasPermission } = usePermission(); const { hasPermission } = usePermission();
@@ -13,18 +19,28 @@ function isAuth(el: Element, binding: any) {
} }
} }
} }
function isBackMode() { function isBackMode() {
return appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK; return appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK;
} }
export function setupPermissionDirective(app: App) {
app.directive('auth', { const mounted = (el: Element, binding: DirectiveBinding<any>) => {
mounted(el: Element, binding) {
if (isBackMode()) return; if (isBackMode()) return;
isAuth(el, binding); isAuth(el, binding);
}, };
updated(el: Element, binding) {
const updated = (el: Element, binding: DirectiveBinding<any>) => {
if (!isBackMode()) return; if (!isBackMode()) return;
isAuth(el, binding); isAuth(el, binding);
}, };
});
const authDirective: Directive = {
mounted,
updated,
};
export function setupPermissionDirective(app: App) {
app.directive('auth', authDirective);
} }
export default authDirective;

View File

@@ -1,11 +1,16 @@
/**
* Prevent repeated clicks
* @Example v-repeat-click="()=>{}"
*/
import { on, once } from '/@/utils/domUtils'; import { on, once } from '/@/utils/domUtils';
import type { Directive, DirectiveBinding } from 'vue';
export default { const repeatDirective: Directive = {
beforeMount(el: Element, binding: any) { beforeMount(el: Element, binding: DirectiveBinding<any>) {
let interval: ReturnType<typeof setInterval> | null = null; let interval: Nullable<IntervalHandle> = null;
let startTime = 0; let startTime = 0;
const handler = () => binding.value && binding.value(); const handler = (): void => binding.value && binding.value();
const clear = () => { const clear = (): void => {
if (Date.now() - startTime < 100) { if (Date.now() - startTime < 100) {
handler(); handler();
} }
@@ -13,7 +18,7 @@ export default {
interval = null; interval = null;
}; };
on(el, 'mousedown', (e) => { on(el, 'mousedown', (e: MouseEvent): void => {
if ((e as any).button !== 0) return; if ((e as any).button !== 0) return;
startTime = Date.now(); startTime = Date.now();
once(document as any, 'mouseup', clear); once(document as any, 'mouseup', clear);
@@ -22,3 +27,5 @@ export default {
}); });
}, },
}; };
export default repeatDirective;

View File

@@ -1,19 +1,28 @@
/**
* Used to configure the global error handling function, which can monitor vue errors, script errors, static resource errors and Promise errors
*/
import { errorStore, ErrorInfo } from '/@/store/modules/error'; import { errorStore, ErrorInfo } from '/@/store/modules/error';
import { useSetting } from '/@/hooks/core/useSetting'; import { useSetting } from '/@/hooks/core/useSetting';
import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; import { ErrorTypeEnum } from '/@/enums/exceptionEnum';
import { App } from 'vue'; import { App } from 'vue';
/**
* Handling error stack information
* @param error
*/
function processStackMsg(error: Error) { function processStackMsg(error: Error) {
if (!error.stack) { if (!error.stack) {
return ''; return '';
} }
let stack = error.stack let stack = error.stack
.replace(/\n/gi, '') // 去掉换行,节省传输内容大小 .replace(/\n/gi, '') // Remove line breaks to save the size of the transmitted content
.replace(/\bat\b/gi, '@') // chrome中是atff中是@ .replace(/\bat\b/gi, '@') // At in chrome, @ in ff
.split('@') // 以@分割信息 .split('@') // Split information with @
.slice(0, 9) // 最大堆栈长度Error.stackTraceLimit = 10所以只取前10 .slice(0, 9) // The maximum stack length (Error.stackTraceLimit = 10), so only take the first 10
.map((v) => v.replace(/^\s*|\s*$/g, '')) // 去除多余空格 .map((v) => v.replace(/^\s*|\s*$/g, '')) // Remove extra spaces
.join('~') // 手动添加分隔符,便于后期展示 .join('~') // Manually add separators for later display
.replace(/\?[^:]+/gi, ''); // 去除js文件链接的多余参数(?x=1之类) .replace(/\?[^:]+/gi, ''); // Remove redundant parameters of js file links (?x=1 and the like)
const msg = error.toString(); const msg = error.toString();
if (stack.indexOf(msg) < 0) { if (stack.indexOf(msg) < 0) {
stack = msg + '@' + stack; stack = msg + '@' + stack;
@@ -21,6 +30,10 @@ function processStackMsg(error: Error) {
return stack; return stack;
} }
/**
* get comp name
* @param vm
*/
function formatComponentName(vm: any) { function formatComponentName(vm: any) {
if (vm.$root === vm) { if (vm.$root === vm) {
return { return {
@@ -43,6 +56,10 @@ function formatComponentName(vm: any) {
}; };
} }
/**
* Configure Vue error handling function
*/
function vueErrorHandler(err: Error, vm: any, info: string) { function vueErrorHandler(err: Error, vm: any, info: string) {
const { name, path } = formatComponentName(vm); const { name, path } = formatComponentName(vm);
errorStore.commitErrorInfoState({ errorStore.commitErrorInfoState({
@@ -56,6 +73,9 @@ function vueErrorHandler(err: Error, vm: any, info: string) {
}); });
} }
/**
* Configure script error handling function
*/
export function scriptErrorHandler( export function scriptErrorHandler(
event: Event | string, event: Event | string,
source?: string, source?: string,
@@ -86,6 +106,9 @@ export function scriptErrorHandler(
return true; return true;
} }
/**
* Configure Promise error handling function
*/
function registerPromiseErrorHandler() { function registerPromiseErrorHandler() {
window.addEventListener( window.addEventListener(
'unhandledrejection', 'unhandledrejection',
@@ -104,8 +127,11 @@ function registerPromiseErrorHandler() {
); );
} }
/**
* Configure monitoring resource loading error handling function
*/
function registerResourceErrorHandler() { function registerResourceErrorHandler() {
// 监控资源加载错误(img,script,css,以及jsonp) // Monitoring resource loading error(img,script,css,and jsonp)
window.addEventListener( window.addEventListener(
'error', 'error',
function (e: Event) { function (e: Event) {
@@ -129,19 +155,23 @@ function registerResourceErrorHandler() {
); );
} }
/**
* Configure global error handling
* @param app
*/
export function setupErrorHandle(app: App) { export function setupErrorHandle(app: App) {
const { projectSetting } = useSetting(); const { projectSetting } = useSetting();
const { useErrorHandle } = projectSetting; const { useErrorHandle } = projectSetting;
if (!useErrorHandle) { if (!useErrorHandle) return;
return; // Vue exception monitoring;
}
// Vue异常监控;
app.config.errorHandler = vueErrorHandler; app.config.errorHandler = vueErrorHandler;
// js错误
// script error
window.onerror = scriptErrorHandler; window.onerror = scriptErrorHandler;
// promise 异常
// promise exception
registerPromiseErrorHandler(); registerPromiseErrorHandler();
// 静态资源异常 // Static resource exception
registerResourceErrorHandler(); registerResourceErrorHandler();
} }

View File

@@ -1,6 +1,6 @@
import { isHexColor, colorIsDark, lighten, darken } from '/@/utils/color'; import { isHexColor, colorIsDark, lighten, darken } from '/@/utils/color';
import { appStore } from '/@/store/modules/app'; import { appStore } from '/@/store/modules/app';
import { MenuThemeEnum } from '/@/enums/menuEnum'; import { ThemeEnum } from '/@/enums/appEnum';
const HEADER_BG_COLOR_VAR = '--header-bg-color'; const HEADER_BG_COLOR_VAR = '--header-bg-color';
const HEADER_BG_HOVER_COLOR_VAR = '--header-bg-hover-color'; const HEADER_BG_HOVER_COLOR_VAR = '--header-bg-hover-color';
@@ -22,14 +22,26 @@ function toggleClass(flag: boolean, clsName: string) {
document.body.className = flag ? `${className} ${clsName} ` : className; document.body.className = flag ? `${className} ${clsName} ` : className;
} }
/**
* Change the status of the project's color weakness mode
* @param gray
*/
export const updateColorWeak = (colorWeak: boolean) => { export const updateColorWeak = (colorWeak: boolean) => {
toggleClass(colorWeak, 'color-weak'); toggleClass(colorWeak, 'color-weak');
}; };
/**
* Change project gray mode status
* @param gray
*/
export const updateGrayMode = (gray: boolean) => { export const updateGrayMode = (gray: boolean) => {
toggleClass(gray, 'gray-mode'); toggleClass(gray, 'gray-mode');
}; };
/**
* Change the background color of the top header
* @param color
*/
export function updateHeaderBgColor(color: string) { export function updateHeaderBgColor(color: string) {
if (!isHexColor(color)) return; if (!isHexColor(color)) return;
// bg color // bg color
@@ -40,15 +52,20 @@ export function updateHeaderBgColor(color: string) {
setCssVar(HEADER_BG_HOVER_COLOR_VAR, hoverColor); setCssVar(HEADER_BG_HOVER_COLOR_VAR, hoverColor);
setCssVar(HEADER_MENU_ACTIVE_BG_COLOR_VAR, hoverColor); setCssVar(HEADER_MENU_ACTIVE_BG_COLOR_VAR, hoverColor);
// Determine the depth of the color value and automatically switch the theme
const isDark = colorIsDark(color); const isDark = colorIsDark(color);
appStore.commitProjectConfigState({ appStore.commitProjectConfigState({
headerSetting: { headerSetting: {
theme: isDark ? MenuThemeEnum.DARK : MenuThemeEnum.LIGHT, theme: isDark ? ThemeEnum.DARK : ThemeEnum.LIGHT,
}, },
}); });
} }
/**
* Change the background color of the left menu
* @param color bg color
*/
export function updateSidebarBgColor(color: string) { export function updateSidebarBgColor(color: string) {
if (!isHexColor(color)) return; if (!isHexColor(color)) return;
@@ -58,11 +75,12 @@ export function updateSidebarBgColor(color: string) {
setCssVar(SIDER_LIGHTEN_2_BG_COLOR, lighten(color, 8)); setCssVar(SIDER_LIGHTEN_2_BG_COLOR, lighten(color, 8));
// only #ffffff is light // only #ffffff is light
// Only when the background color is #fff, the theme of the menu will be changed to light
const isLight = ['#fff', '#ffffff'].includes(color.toLowerCase()); const isLight = ['#fff', '#ffffff'].includes(color.toLowerCase());
appStore.commitProjectConfigState({ appStore.commitProjectConfigState({
menuSetting: { menuSetting: {
theme: isLight ? MenuThemeEnum.LIGHT : MenuThemeEnum.DARK, theme: isLight ? ThemeEnum.LIGHT : ThemeEnum.DARK,
}, },
}); });
} }

View File

@@ -1,19 +1,16 @@
import type { App } from 'vue'; import type { App } from 'vue';
import { import { createStore, createLogger, Plugin } from 'vuex';
createStore,
// createLogger, Plugin
} from 'vuex';
import { config } from 'vuex-module-decorators'; import { config } from 'vuex-module-decorators';
import { isDevMode } from '/@/utils/env'; import { isDevMode } from '/@/utils/env';
config.rawError = true; config.rawError = true;
const isDev = isDevMode(); const isDev = isDevMode();
// const plugins: Plugin<any>[] = isDev ? [createLogger()] : []; const plugins: Plugin<any>[] = isDev ? [createLogger()] : [];
const store = createStore({ const store = createStore({
modules: {}, // modules: {},
strict: isDev, strict: isDev,
// plugins, plugins,
}); });
export function setupStore(app: App<Element>) { export function setupStore(app: App<Element>) {

View File

@@ -1,6 +1,6 @@
// 左侧菜单, 顶部菜单 // 左侧菜单, 顶部菜单
import { MenuTypeEnum, MenuModeEnum, MenuThemeEnum, TriggerEnum } from '/@/enums/menuEnum'; import { MenuTypeEnum, MenuModeEnum, TriggerEnum } from '/@/enums/menuEnum';
import { ContentEnum, PermissionModeEnum, RouterTransitionEnum } from '/@/enums/appEnum'; import { ContentEnum, PermissionModeEnum, ThemeEnum, RouterTransitionEnum } from '/@/enums/appEnum';
export interface MessageSetting { export interface MessageSetting {
title: string; title: string;
@@ -20,7 +20,7 @@ export interface MenuSetting {
menuWidth: number; menuWidth: number;
mode: MenuModeEnum; mode: MenuModeEnum;
type: MenuTypeEnum; type: MenuTypeEnum;
theme: MenuThemeEnum; theme: ThemeEnum;
topMenuAlign: 'start' | 'center' | 'end'; topMenuAlign: 'start' | 'center' | 'end';
collapsedShowSearch: boolean; collapsedShowSearch: boolean;
trigger: TriggerEnum; trigger: TriggerEnum;
@@ -41,7 +41,7 @@ export interface MultiTabsSetting {
export interface HeaderSetting { export interface HeaderSetting {
fixed: boolean; fixed: boolean;
show: boolean; show: boolean;
theme: MenuThemeEnum; theme: ThemeEnum;
// 显示刷新按钮 // 显示刷新按钮
showRedo: boolean; showRedo: boolean;
// 显示全屏按钮 // 显示全屏按钮

View File

@@ -1,9 +1,7 @@
/**
* @description: 输入框事件
*/
declare interface ChangeEvent extends Event { declare interface ChangeEvent extends Event {
target: HTMLInputElement; target: HTMLInputElement;
} }
interface WheelEvent {
declare interface WheelEvent {
path?: EventTarget[]; path?: EventTarget[];
} }

15
src/types/global.d.ts vendored
View File

@@ -6,7 +6,6 @@ declare interface PromiseFn<T = any, R = T> {
(...arg: T[]): Promise<R>; (...arg: T[]): Promise<R>;
} }
// 任意对象
declare interface IObj<T = any> { declare interface IObj<T = any> {
[key: string]: T; [key: string]: T;
[key: number]: T; [key: number]: T;
@@ -34,19 +33,11 @@ declare type Indexable<T = any> = {
declare type Hash<T> = Indexable<T>; declare type Hash<T> = Indexable<T>;
// declare type DeepPartial<T> = {
// [P in keyof T]?: T[P] extends (infer U)[]
// ? RecursivePartial<U>[]
// : T[P] extends object
// ? RecursivePartial<T[P]>
// : T[P];
// };
declare type DeepPartial<T> = { declare type DeepPartial<T> = {
[P in keyof T]?: DeepPartial<T[P]>; [P in keyof T]?: DeepPartial<T[P]>;
}; };
declare type SelectOptions = { declare type LabelValueOptions = {
label: string; label: string;
value: any; value: any;
}[]; }[];
@@ -54,3 +45,7 @@ declare type SelectOptions = {
declare type EmitType = (event: string, ...args: any[]) => void; declare type EmitType = (event: string, ...args: any[]) => void;
declare type TargetContext = '_self' | '_blank'; declare type TargetContext = '_self' | '_blank';
declare type TimeoutHandle = ReturnType<typeof setTimeout>;
declare type IntervalHandle = ReturnType<typeof setInterval>;

View File

@@ -2,6 +2,7 @@ import type { App } from 'vue';
declare global { declare global {
declare interface Window { declare interface Window {
// Global vue app instance
__APP__: App<Element>; __APP__: App<Element>;
} }
} }

View File

@@ -1,9 +1,8 @@
import { userStore } from '/@/store/modules/user'; import { userStore } from '/@/store/modules/user';
// import { permissionStore } from '@/store/modules/permission';
// import { RoleEnum } from '@/enums/roleEnum';
/** /**
* @description: 获取token * @description: Get token
* @return jwt token
*/ */
export function getToken(): string { export function getToken(): string {
return userStore.getTokenState; return userStore.getTokenState;

View File

@@ -4,6 +4,6 @@
export function triggerWindowResize() { export function triggerWindowResize() {
const event = document.createEvent('HTMLEvents'); const event = document.createEvent('HTMLEvents');
event.initEvent('resize', true, true); event.initEvent('resize', true, true);
(event as any).eventType = 'message'; (event as ChangeEvent).eventType = 'message';
window.dispatchEvent(event); window.dispatchEvent(event);
} }

View File

@@ -50,10 +50,6 @@ export function isArray(val: unknown): val is Array<any> {
return val && Array.isArray(val); return val && Array.isArray(val);
} }
export const isClient = () => {
return typeof window !== 'undefined';
};
export const isWindow = (val: any): val is Window => { export const isWindow = (val: any): val is Window => {
return typeof window !== 'undefined' && is(val, 'Window'); return typeof window !== 'undefined' && is(val, 'Window');
}; };
@@ -64,6 +60,8 @@ export const isElement = (val: unknown): val is Element => {
export const isServer = typeof window === 'undefined'; export const isServer = typeof window === 'undefined';
export const isClient = typeof window !== 'undefined';
export function isImageDom(o: Element) { export function isImageDom(o: Element) {
return o && ['IMAGE', 'IMG'].includes(o.tagName); return o && ['IMAGE', 'IMG'].includes(o.tagName);
} }

View File

@@ -1,4 +1,5 @@
const projectName = import.meta.env.VITE_GLOB_APP_TITLE; const projectName = import.meta.env.VITE_GLOB_APP_TITLE;
export function warn(message: string) { export function warn(message: string) {
console.warn(`[${projectName} warn]:${message}`); console.warn(`[${projectName} warn]:${message}`);
} }

View File

@@ -9,9 +9,6 @@
export default defineComponent({ export default defineComponent({
name: 'Welcome', name: 'Welcome',
components: { House }, components: { House },
setup() {
return {};
},
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>

View File

@@ -1,6 +1,6 @@
import { FormSchema } from '/@/components/Form'; import { FormSchema } from '/@/components/Form';
const basicOptions: SelectOptions = [ const basicOptions: LabelValueOptions = [
{ {
label: '付晓晓', label: '付晓晓',
value: '1', value: '1',
@@ -11,7 +11,7 @@ const basicOptions: SelectOptions = [
}, },
]; ];
const storeTypeOptions: SelectOptions = [ const storeTypeOptions: LabelValueOptions = [
{ {
label: '私密', label: '私密',
value: '1', value: '1',

View File

@@ -58,7 +58,7 @@
import { Alert, Divider } from 'ant-design-vue'; import { Alert, Divider } from 'ant-design-vue';
import CurrentPermissionMode from '../CurrentPermissionMode.vue'; import CurrentPermissionMode from '../CurrentPermissionMode.vue';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import Authority from '/@/components/Authority'; import { Authority } from '/@/components/Authority';
import { getPermCodeByUserId } from '/@/api/sys/user'; import { getPermCodeByUserId } from '/@/api/sys/user';
import { permissionStore } from '/@/store/modules/permission'; import { permissionStore } from '/@/store/modules/permission';
import { PermissionModeEnum } from '/@/enums/appEnum'; import { PermissionModeEnum } from '/@/enums/appEnum';

View File

@@ -65,7 +65,7 @@
import { userStore } from '/@/store/modules/user'; import { userStore } from '/@/store/modules/user';
import { RoleEnum } from '/@/enums/roleEnum'; import { RoleEnum } from '/@/enums/roleEnum';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import Authority from '/@/components/Authority'; import { Authority } from '/@/components/Authority';
export default defineComponent({ export default defineComponent({
components: { Alert, CurrentPermissionMode, Divider, Authority }, components: { Alert, CurrentPermissionMode, Divider, Authority },

493
yarn.lock
View File

@@ -1050,10 +1050,10 @@
resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.2.tgz#c4a95ddc06ca9b9496df03604e66fdefb39f4c4b" resolved "https://registry.npmjs.org/@iconify/iconify/-/iconify-2.0.0-rc.2.tgz#c4a95ddc06ca9b9496df03604e66fdefb39f4c4b"
integrity sha512-BybEHU5/I9EQ0CcwKAqmreZ2bMnAXrqLCTptAc6vPetHMbrXdZfejP5mt57e/8PNSt/qE7BHniU5PCYA+PGIHw== integrity sha512-BybEHU5/I9EQ0CcwKAqmreZ2bMnAXrqLCTptAc6vPetHMbrXdZfejP5mt57e/8PNSt/qE7BHniU5PCYA+PGIHw==
"@iconify/json@^1.1.258": "@iconify/json@^1.1.260":
version "1.1.259" version "1.1.260"
resolved "https://registry.npmjs.org/@iconify/json/-/json-1.1.259.tgz#433ccff8572e42c3abab1cdbac872af0e8340419" resolved "https://registry.npmjs.org/@iconify/json/-/json-1.1.260.tgz#75bfcdcaf01f1a0092bb26f4ce7aebf357da431a"
integrity sha512-tDL4IgKtj3LA2lI+IoZfylBtKWNpV5I9BLj7WGMI/SvGkkYo+9DUap3Ho6iUbQLtu9GmHwpE/cA8mwEBkj/otw== integrity sha512-gpRn0o55mvBTCcZRb8jBtqxV/5Av01BnnVn7/FyboBNdGkEQ8EMTqJL10SDUf9TLM8s63KKSg/ZeCJj870THtA==
"@koa/cors@^3.1.0": "@koa/cors@^3.1.0":
version "3.1.0" version "3.1.0"
@@ -1227,13 +1227,13 @@
dependencies: dependencies:
"@babel/core" ">=7.9.0" "@babel/core" ">=7.9.0"
"@stylelint/postcss-markdown@^0.36.1": "@stylelint/postcss-markdown@^0.36.2":
version "0.36.1" version "0.36.2"
resolved "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz#829b87e6c0f108014533d9d7b987dc9efb6632e8" resolved "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz#0a540c4692f8dcdfc13c8e352c17e7bfee2bb391"
integrity sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw== integrity sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==
dependencies: dependencies:
remark "^12.0.0" remark "^13.0.0"
unist-util-find-all-after "^3.0.1" unist-util-find-all-after "^3.0.2"
"@surma/rollup-plugin-off-main-thread@^1.1.1": "@surma/rollup-plugin-off-main-thread@^1.1.1":
version "1.4.2" version "1.4.2"
@@ -1280,10 +1280,10 @@
"@types/keygrip" "*" "@types/keygrip" "*"
"@types/node" "*" "@types/node" "*"
"@types/echarts@^4.9.0": "@types/echarts@^4.9.1":
version "4.9.0" version "4.9.1"
resolved "https://registry.npmjs.org/@types/echarts/-/echarts-4.9.0.tgz#e133ea5429ada1d814f9cc1deae855421dcdd2ef" resolved "https://registry.npmjs.org/@types/echarts/-/echarts-4.9.1.tgz#e21ea327af62b1148a7ab69a039f8fa002506de2"
integrity sha512-9QIAUe6cxM5GyGNCIhlEwf7l5oclZDVM0HNRfehPx3dDUt1Jfhbvp/U2wfgwtL/IDqyASBVs1zu4qyaCsuJINA== integrity sha512-tpx/gqJD6oz1ZJnIqDaUppsoRuZdnbhAFPslWlTGk0q8//9l34DLwzOrviHCOE+Oy1R5A1VZ994/CPg1Cl3naw==
dependencies: dependencies:
"@types/zrender" "*" "@types/zrender" "*"
@@ -1396,6 +1396,13 @@
resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03"
integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==
"@types/mdast@^3.0.0":
version "3.0.3"
resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
dependencies:
"@types/unist" "*"
"@types/mime@*": "@types/mime@*":
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a"
@@ -1412,9 +1419,9 @@
integrity sha512-OlwyyyoY81P8f7FU0zILUPxqQQ3/W+CwbqI6dWvOxaH8w948fAl1+hOG9C9ZgJcwzG+aloJcsastY4c4p91R1Q== integrity sha512-OlwyyyoY81P8f7FU0zILUPxqQQ3/W+CwbqI6dWvOxaH8w948fAl1+hOG9C9ZgJcwzG+aloJcsastY4c4p91R1Q==
"@types/node@*": "@types/node@*":
version "14.14.7" version "14.14.8"
resolved "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz#8ea1e8f8eae2430cf440564b98c6dfce1ec5945d" resolved "https://registry.npmjs.org/@types/node/-/node-14.14.8.tgz#2127bd81949a95c8b7d3240f3254352d72563aec"
integrity sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg== integrity sha512-z/5Yd59dCKI5kbxauAJgw6dLPzW+TNOItNE00PkpzNwUIEwdj/Lsqwq94H5DdYBX7C13aRA0CY32BK76+neEUA==
"@types/normalize-package-data@^2.4.0": "@types/normalize-package-data@^2.4.0":
version "2.4.0" version "2.4.0"
@@ -1471,14 +1478,14 @@
rollup "^0.63.4" rollup "^0.63.4"
"@types/serve-static@*": "@types/serve-static@*":
version "1.13.7" version "1.13.8"
resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.7.tgz#e51b51a0becda910f9fd04c718044da69d6c492e" resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz#851129d434433c7082148574ffec263d58309c46"
integrity sha512-3diZWucbR+xTmbDlU+FRRxBf+31OhFew7cJXML/zh9NmvSPTNoFecAwHB66BUqFgENJtqMiyl7JAwUE/siqdLw== integrity sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==
dependencies: dependencies:
"@types/mime" "*" "@types/mime" "*"
"@types/node" "*" "@types/node" "*"
"@types/unist@^2.0.0", "@types/unist@^2.0.2": "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
@@ -1488,10 +1495,10 @@
resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@^15.0.9": "@types/yargs@^15.0.10":
version "15.0.9" version "15.0.10"
resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19" resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz#0fe3c8173a0d5c3e780b389050140c3f5ea6ea74"
integrity sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g== integrity sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==
dependencies: dependencies:
"@types/yargs-parser" "*" "@types/yargs-parser" "*"
@@ -1505,61 +1512,61 @@
resolved "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.0.tgz#fbc1d941cc6d9d37d18405c513ba6b294f89b609" resolved "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.0.tgz#fbc1d941cc6d9d37d18405c513ba6b294f89b609"
integrity sha512-GQLOT+SN20a+AI51y3fAimhyTF4Y0RG+YP3gf91OibIZ7CJmPFgoZi+ZR5a+vRbS01LbQosITWum4ATmJ1Z6Pg== integrity sha512-GQLOT+SN20a+AI51y3fAimhyTF4Y0RG+YP3gf91OibIZ7CJmPFgoZi+ZR5a+vRbS01LbQosITWum4ATmJ1Z6Pg==
"@typescript-eslint/eslint-plugin@^4.6.1": "@typescript-eslint/eslint-plugin@^4.8.1":
version "4.7.0" version "4.8.1"
resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.7.0.tgz#85c9bbda00c0cb604d3c241f7bc7fb171a2d3479" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz#b362abe0ee478a6c6d06c14552a6497f0b480769"
integrity sha512-li9aiSVBBd7kU5VlQlT1AqP0uWGDK6JYKUQ9cVDnOg34VNnd9t4jr0Yqc/bKxJr/tDCPDaB4KzoSFN9fgVxe/Q== integrity sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ==
dependencies: dependencies:
"@typescript-eslint/experimental-utils" "4.7.0" "@typescript-eslint/experimental-utils" "4.8.1"
"@typescript-eslint/scope-manager" "4.7.0" "@typescript-eslint/scope-manager" "4.8.1"
debug "^4.1.1" debug "^4.1.1"
functional-red-black-tree "^1.0.1" functional-red-black-tree "^1.0.1"
regexpp "^3.0.0" regexpp "^3.0.0"
semver "^7.3.2" semver "^7.3.2"
tsutils "^3.17.1" tsutils "^3.17.1"
"@typescript-eslint/experimental-utils@4.7.0": "@typescript-eslint/experimental-utils@4.8.1":
version "4.7.0" version "4.8.1"
resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.7.0.tgz#8d1058c38bec3d3bbd9c898a1c32318d80faf3c5" resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz#27275c20fa4336df99ebcf6195f7d7aa7aa9f22d"
integrity sha512-cymzovXAiD4EF+YoHAB5Oh02MpnXjvyaOb+v+BdpY7lsJXZQN34oIETeUwVT2XfV9rSNpXaIcknDLfupO/tUoA== integrity sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==
dependencies: dependencies:
"@types/json-schema" "^7.0.3" "@types/json-schema" "^7.0.3"
"@typescript-eslint/scope-manager" "4.7.0" "@typescript-eslint/scope-manager" "4.8.1"
"@typescript-eslint/types" "4.7.0" "@typescript-eslint/types" "4.8.1"
"@typescript-eslint/typescript-estree" "4.7.0" "@typescript-eslint/typescript-estree" "4.8.1"
eslint-scope "^5.0.0" eslint-scope "^5.0.0"
eslint-utils "^2.0.0" eslint-utils "^2.0.0"
"@typescript-eslint/parser@^4.6.1": "@typescript-eslint/parser@^4.8.1":
version "4.7.0" version "4.8.1"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.7.0.tgz#44bdab0f788b478178368baa65d3365fdc63da1c" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.8.1.tgz#4fe2fbdbb67485bafc4320b3ae91e34efe1219d1"
integrity sha512-+meGV8bMP1sJHBI2AFq1GeTwofcGiur8LoIr6v+rEmD9knyCqDlrQcFHR0KDDfldHIFDU/enZ53fla6ReF4wRw== integrity sha512-QND8XSVetATHK9y2Ltc/XBl5Ro7Y62YuZKnPEwnNPB8E379fDsvzJ1dMJ46fg/VOmk0hXhatc+GXs5MaXuL5Uw==
dependencies: dependencies:
"@typescript-eslint/scope-manager" "4.7.0" "@typescript-eslint/scope-manager" "4.8.1"
"@typescript-eslint/types" "4.7.0" "@typescript-eslint/types" "4.8.1"
"@typescript-eslint/typescript-estree" "4.7.0" "@typescript-eslint/typescript-estree" "4.8.1"
debug "^4.1.1" debug "^4.1.1"
"@typescript-eslint/scope-manager@4.7.0": "@typescript-eslint/scope-manager@4.8.1":
version "4.7.0" version "4.8.1"
resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.7.0.tgz#2115526085fb72723ccdc1eeae75dec7126220ed" resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz#e343c475f8f1d15801b546cb17d7f309b768fdce"
integrity sha512-ILITvqwDJYbcDCROj6+Ob0oCKNg3SH46iWcNcTIT9B5aiVssoTYkhKjxOMNzR1F7WSJkik4zmuqve5MdnA0DyA== integrity sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==
dependencies: dependencies:
"@typescript-eslint/types" "4.7.0" "@typescript-eslint/types" "4.8.1"
"@typescript-eslint/visitor-keys" "4.7.0" "@typescript-eslint/visitor-keys" "4.8.1"
"@typescript-eslint/types@4.7.0": "@typescript-eslint/types@4.8.1":
version "4.7.0" version "4.8.1"
resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.7.0.tgz#5e95ef5c740f43d942542b35811f87b62fccca69" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz#23829c73c5fc6f4fcd5346a7780b274f72fee222"
integrity sha512-uLszFe0wExJc+I7q0Z/+BnP7wao/kzX0hB5vJn4LIgrfrMLgnB2UXoReV19lkJQS1a1mHWGGODSxnBx6JQC3Sg== integrity sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==
"@typescript-eslint/typescript-estree@4.7.0": "@typescript-eslint/typescript-estree@4.8.1":
version "4.7.0" version "4.8.1"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.7.0.tgz#539531167f05ba20eb0b6785567076679e29d393" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz#7307e3f2c9e95df7daa8dc0a34b8c43b7ec0dd32"
integrity sha512-5XZRQznD1MfUmxu1t8/j2Af4OxbA7EFU2rbo0No7meb46eHgGkSieFdfV6omiC/DGIBhH9H9gXn7okBbVOm8jw== integrity sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==
dependencies: dependencies:
"@typescript-eslint/types" "4.7.0" "@typescript-eslint/types" "4.8.1"
"@typescript-eslint/visitor-keys" "4.7.0" "@typescript-eslint/visitor-keys" "4.8.1"
debug "^4.1.1" debug "^4.1.1"
globby "^11.0.1" globby "^11.0.1"
is-glob "^4.0.1" is-glob "^4.0.1"
@@ -1567,12 +1574,12 @@
semver "^7.3.2" semver "^7.3.2"
tsutils "^3.17.1" tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@4.7.0": "@typescript-eslint/visitor-keys@4.8.1":
version "4.7.0" version "4.8.1"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.7.0.tgz#6783824f22acfc49e754970ed21b88ac03b80e6f" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz#794f68ee292d1b2e3aa9690ebedfcb3a8c90e3c3"
integrity sha512-aDJDWuCRsf1lXOtignlfiPODkzSxxop7D0rZ91L6ZuMlcMCSh0YyK+gAfo5zN/ih6WxMwhoXgJWC3cWQdaKC+A== integrity sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==
dependencies: dependencies:
"@typescript-eslint/types" "4.7.0" "@typescript-eslint/types" "4.8.1"
eslint-visitor-keys "^2.0.0" eslint-visitor-keys "^2.0.0"
"@vue/compiler-core@*", "@vue/compiler-core@3.0.2", "@vue/compiler-core@^3.0.0-rc.5": "@vue/compiler-core@*", "@vue/compiler-core@3.0.2", "@vue/compiler-core@^3.0.0-rc.5":
@@ -1725,7 +1732,7 @@
vscode-languageserver-textdocument "^1.0.1" vscode-languageserver-textdocument "^1.0.1"
vscode-uri "^2.1.2" vscode-uri "^2.1.2"
"@vueuse/core@^4.0.0-beta.41": "@vueuse/core@4.0.0-beta.41":
version "4.0.0-beta.41" version "4.0.0-beta.41"
resolved "https://registry.npmjs.org/@vueuse/core/-/core-4.0.0-beta.41.tgz#0058aed5ade75ae2866283498009ad5172cbae84" resolved "https://registry.npmjs.org/@vueuse/core/-/core-4.0.0-beta.41.tgz#0058aed5ade75ae2866283498009ad5172cbae84"
integrity sha512-CgUih65PzYScorm1S4F93e6XXm+qxA8GrRLOSB1kXaqtP6vXedwkBxKkNEYNACx4reL4VEHqM/BrM6FajXkQUg== integrity sha512-CgUih65PzYScorm1S4F93e6XXm+qxA8GrRLOSB1kXaqtP6vXedwkBxKkNEYNACx4reL4VEHqM/BrM6FajXkQUg==
@@ -1850,10 +1857,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
dependencies: dependencies:
color-convert "^2.0.1" color-convert "^2.0.1"
ant-design-vue@^2.0.0-rc.1: ant-design-vue@2.0.0-beta.15:
version "2.0.0-rc.1" version "2.0.0-beta.15"
resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-rc.1.tgz#2ef02475f3aa4c1474f2fe3cf44a52c34787be02" resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-beta.15.tgz#3c787dabb70a33885d0e751e58f9a5610ed06134"
integrity sha512-iKXkFtTHarvLHV7LWmYh6g/Cmkv+xK+vS621A1Qvg37Z6lCGg3K9BGAizmklAYzOTiPz0Ltt63eSiNqYMGh52g== integrity sha512-OxZy+ZYU3LauIL4Rhqwy441K/iD++Cit6upnQy5+LVUrX0PSObPqPqMWVpncbAmJJYTEz88gkvgGeYqBdzouWA==
dependencies: dependencies:
"@ant-design-vue/use" "^0.0.1-0" "@ant-design-vue/use" "^0.0.1-0"
"@ant-design/icons-vue" "^5.1.5" "@ant-design/icons-vue" "^5.1.5"
@@ -2301,11 +2308,6 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157:
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001158.tgz#fce86d321369603c2bc855ee0e901a7f49f8310b" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001158.tgz#fce86d321369603c2bc855ee0e901a7f49f8310b"
integrity sha512-s5loVYY+yKpuVA3HyW8BarzrtJvwHReuzugQXlv1iR3LKSReoFXRm86mT6hT7PEF5RxW+XQZg+6nYjlywYzQ+g== integrity sha512-s5loVYY+yKpuVA3HyW8BarzrtJvwHReuzugQXlv1iR3LKSReoFXRm86mT6hT7PEF5RxW+XQZg+6nYjlywYzQ+g==
ccount@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043"
integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==
cfb@^1.1.4: cfb@^1.1.4:
version "1.2.0" version "1.2.0"
resolved "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz#6a4d0872b525ed60349e1ef51fb4b0bf73eca9a8" resolved "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz#6a4d0872b525ed60349e1ef51fb4b0bf73eca9a8"
@@ -2349,11 +2351,6 @@ chalk@^3.0.0:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
character-entities-html4@^1.0.0:
version "1.1.4"
resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==
character-entities-legacy@^1.0.0: character-entities-legacy@^1.0.0:
version "1.1.4" version "1.1.4"
resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
@@ -2522,11 +2519,6 @@ codepage@~1.14.0:
commander "~2.14.1" commander "~2.14.1"
exit-on-epipe "~1.0.1" exit-on-epipe "~1.0.1"
collapse-white-space@^1.0.2:
version "1.0.6"
resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"
integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==
collection-visit@^1.0.0: collection-visit@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
@@ -3001,7 +2993,7 @@ debug@^3.1.0, debug@^3.1.1:
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
@@ -3263,9 +3255,9 @@ ejs@^2.6.1:
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
electron-to-chromium@^1.3.591: electron-to-chromium@^1.3.591:
version "1.3.596" version "1.3.598"
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.596.tgz#c7ed98512c7ff36ddcbfed9e54e6355335c35257" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.598.tgz#8f757018902ab6190323a8c5f6124d854893a35b"
integrity sha512-nLO2Wd2yU42eSoNJVQKNf89CcEGqeFZd++QsnN2XIgje1s/19AgctfjLIbPORlvcCO8sYjLwX4iUgDdusOY8Sg== integrity sha512-G5Ztk23/ubLYVPxPXnB1uu105uzIPd4xB/D8ld8x1GaSC9+vU9NZL16nYZya8H77/7CCKKN7dArzJL3pBs8N7A==
emoji-regex@^7.0.1: emoji-regex@^7.0.1:
version "7.0.3" version "7.0.3"
@@ -3698,6 +3690,13 @@ file-entry-cache@^5.0.1:
dependencies: dependencies:
flat-cache "^2.0.1" flat-cache "^2.0.1"
file-entry-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a"
integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==
dependencies:
flat-cache "^3.0.4"
fill-range@^4.0.0: fill-range@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -3792,11 +3791,24 @@ flat-cache@^2.0.1:
rimraf "2.6.3" rimraf "2.6.3"
write "1.0.3" write "1.0.3"
flat-cache@^3.0.4:
version "3.0.4"
resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
dependencies:
flatted "^3.1.0"
rimraf "^3.0.2"
flatted@^2.0.0: flatted@^2.0.0:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
flatted@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067"
integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==
follow-redirects@^1.0.0, follow-redirects@^1.10.0: follow-redirects@^1.0.0, follow-redirects@^1.10.0:
version "1.13.0" version "1.13.0"
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
@@ -4415,7 +4427,7 @@ inflight@^1.0.4:
once "^1.3.0" once "^1.3.0"
wrappy "1" wrappy "1"
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
version "2.0.4" version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -4483,11 +4495,6 @@ is-alphabetical@^1.0.0:
resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
is-alphanumeric@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"
integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
is-alphanumerical@^1.0.0: is-alphanumerical@^1.0.0:
version "1.0.4" version "1.0.4"
resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
@@ -4719,21 +4726,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1:
resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
is-whitespace-character@^1.0.0:
version "1.0.4"
resolved "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7"
integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==
is-windows@^1.0.1, is-windows@^1.0.2: is-windows@^1.0.1, is-windows@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
is-word-character@^1.0.0:
version "1.0.4"
resolved "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230"
integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==
is-wsl@^2.1.1: is-wsl@^2.1.1:
version "2.2.0" version "2.2.0"
resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@@ -4933,10 +4930,10 @@ klona@^2.0.4:
resolved "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" resolved "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
known-css-properties@^0.19.0: known-css-properties@^0.20.0:
version "0.19.0" version "0.20.0"
resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.19.0.tgz#5d92b7fa16c72d971bda9b7fe295bdf61836ee5b" resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.20.0.tgz#0570831661b47dd835293218381166090ff60e96"
integrity sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA== integrity sha512-URvsjaA9ypfreqJ2/ylDr5MUERhJZ+DhguoWRr2xgS5C7aGCalXo+ewL+GixgKBfhT2vuL02nbIgNGqVWgTOYw==
koa-bodyparser@^4.3.0: koa-bodyparser@^4.3.0:
version "4.3.0" version "4.3.0"
@@ -5227,7 +5224,7 @@ log-update@^4.0.0:
slice-ansi "^4.0.0" slice-ansi "^4.0.0"
wrap-ansi "^6.2.0" wrap-ansi "^6.2.0"
longest-streak@^2.0.1: longest-streak@^2.0.0:
version "2.0.4" version "2.0.4"
resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
@@ -5320,29 +5317,37 @@ map-visit@^1.0.0:
dependencies: dependencies:
object-visit "^1.0.0" object-visit "^1.0.0"
markdown-escapes@^1.0.0:
version "1.0.4"
resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
markdown-table@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
dependencies:
repeat-string "^1.0.0"
mathml-tag-names@^2.1.3: mathml-tag-names@^2.1.3:
version "2.1.3" version "2.1.3"
resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
mdast-util-compact@^2.0.0: mdast-util-from-markdown@^0.8.0:
version "2.0.1" version "0.8.1"
resolved "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490" resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz#781371d493cac11212947226190270c15dc97116"
integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA== integrity sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==
dependencies: dependencies:
unist-util-visit "^2.0.0" "@types/mdast" "^3.0.0"
mdast-util-to-string "^1.0.0"
micromark "~2.10.0"
parse-entities "^2.0.0"
mdast-util-to-markdown@^0.5.0:
version "0.5.3"
resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz#e05c54a3ccd239bab63c48a1e5b5747f0dcd5aca"
integrity sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA==
dependencies:
"@types/unist" "^2.0.0"
longest-streak "^2.0.0"
mdast-util-to-string "^1.0.0"
parse-entities "^2.0.0"
repeat-string "^1.0.0"
zwitch "^1.0.0"
mdast-util-to-string@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527"
integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==
media-typer@0.3.0: media-typer@0.3.0:
version "0.3.0" version "0.3.0"
@@ -5380,23 +5385,6 @@ meow@^4.0.0:
redent "^2.0.0" redent "^2.0.0"
trim-newlines "^2.0.0" trim-newlines "^2.0.0"
meow@^7.1.1:
version "7.1.1"
resolved "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306"
integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==
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 "^2.5.0"
read-pkg-up "^7.0.1"
redent "^3.0.0"
trim-newlines "^3.0.0"
type-fest "^0.13.1"
yargs-parser "^18.1.3"
meow@^8.0.0: meow@^8.0.0:
version "8.0.0" version "8.0.0"
resolved "https://registry.npmjs.org/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a" resolved "https://registry.npmjs.org/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a"
@@ -5436,6 +5424,14 @@ merge@^1.2.1:
resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" resolved "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
micromark@~2.10.0:
version "2.10.1"
resolved "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz#cd73f54e0656f10e633073db26b663a221a442a7"
integrity sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==
dependencies:
debug "^4.0.0"
parse-entities "^2.0.0"
micromatch@^3.0.4: micromatch@^3.0.4:
version "3.1.10" version "3.1.10"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
@@ -5658,9 +5654,9 @@ node-modules-regexp@^1.0.0:
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
node-releases@^1.1.66: node-releases@^1.1.66:
version "1.1.66" version "1.1.67"
resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.66.tgz#609bd0dc069381015cd982300bae51ab4f1b1814" resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12"
integrity sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg== integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==
normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
version "2.5.0" version "2.5.0"
@@ -6309,7 +6305,7 @@ postcss-value-parser@^4.1.0:
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6:
version "7.0.35" version "7.0.35"
resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
@@ -6626,63 +6622,35 @@ relateurl@^0.2.7:
resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
remark-parse@^8.0.0: remark-parse@^9.0.0:
version "8.0.3" version "9.0.0"
resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640"
integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==
dependencies: dependencies:
ccount "^1.0.0" mdast-util-from-markdown "^0.8.0"
collapse-white-space "^1.0.2"
is-alphabetical "^1.0.0"
is-decimal "^1.0.0"
is-whitespace-character "^1.0.0"
is-word-character "^1.0.0"
markdown-escapes "^1.0.0"
parse-entities "^2.0.0"
repeat-string "^1.5.4"
state-toggle "^1.0.0"
trim "0.0.1"
trim-trailing-lines "^1.0.0"
unherit "^1.0.4"
unist-util-remove-position "^2.0.0"
vfile-location "^3.0.0"
xtend "^4.0.1"
remark-stringify@^8.0.0: remark-stringify@^9.0.0:
version "8.1.1" version "9.0.0"
resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5" resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.0.tgz#8ba0c9e4167c42733832215a81550489759e3793"
integrity sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A== integrity sha512-8x29DpTbVzEc6Dwb90qhxCtbZ6hmj3BxWWDpMhA+1WM4dOEGH5U5/GFe3Be5Hns5MvPSFAr1e2KSVtKZkK5nUw==
dependencies: dependencies:
ccount "^1.0.0" mdast-util-to-markdown "^0.5.0"
is-alphanumeric "^1.0.0"
is-decimal "^1.0.0"
is-whitespace-character "^1.0.0"
longest-streak "^2.0.1"
markdown-escapes "^1.0.0"
markdown-table "^2.0.0"
mdast-util-compact "^2.0.0"
parse-entities "^2.0.0"
repeat-string "^1.5.4"
state-toggle "^1.0.0"
stringify-entities "^3.0.0"
unherit "^1.0.4"
xtend "^4.0.1"
remark@^12.0.0: remark@^13.0.0:
version "12.0.1" version "13.0.0"
resolved "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz#f1ddf68db7be71ca2bad0a33cd3678b86b9c709f" resolved "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425"
integrity sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw== integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==
dependencies: dependencies:
remark-parse "^8.0.0" remark-parse "^9.0.0"
remark-stringify "^8.0.0" remark-stringify "^9.0.0"
unified "^9.0.0" unified "^9.1.0"
repeat-element@^1.1.2: repeat-element@^1.1.2:
version "1.1.3" version "1.1.3"
resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
repeat-string@^1.0.0, repeat-string@^1.5.4, repeat-string@^1.6.1: repeat-string@^1.0.0, repeat-string@^1.6.1:
version "1.6.1" version "1.6.1"
resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
@@ -7186,16 +7154,16 @@ source-map-url@^0.4.0:
resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.5.0, source-map@^0.5.6: source-map@^0.5.0, source-map@^0.5.6:
version "0.5.7" version "0.5.7"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.7.3, source-map@~0.7.2: source-map@^0.7.3, source-map@~0.7.2:
version "0.7.3" version "0.7.3"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
@@ -7270,11 +7238,6 @@ ssf@~0.11.2:
dependencies: dependencies:
frac "~1.1.2" frac "~1.1.2"
state-toggle@^1.0.0:
version "1.0.3"
resolved "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==
static-extend@^0.1.1: static-extend@^0.1.1:
version "0.1.2" version "0.1.2"
resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -7343,15 +7306,6 @@ string_decoder@~1.1.1:
dependencies: dependencies:
safe-buffer "~5.1.0" safe-buffer "~5.1.0"
stringify-entities@^3.0.0:
version "3.1.0"
resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903"
integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==
dependencies:
character-entities-html4 "^1.0.0"
character-entities-legacy "^1.0.0"
xtend "^4.0.0"
stringify-object@^3.3.0: stringify-object@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
@@ -7472,22 +7426,22 @@ stylelint-order@^4.1.0:
postcss "^7.0.31" postcss "^7.0.31"
postcss-sorting "^5.0.1" postcss-sorting "^5.0.1"
stylelint@^13.7.2: stylelint@^13.8.0:
version "13.7.2" version "13.8.0"
resolved "https://registry.npmjs.org/stylelint/-/stylelint-13.7.2.tgz#6f3c58eea4077680ed0ceb0d064b22b100970486" resolved "https://registry.npmjs.org/stylelint/-/stylelint-13.8.0.tgz#446765dbe25e3617f819a0165956faf2563ddc23"
integrity sha512-mmieorkfmO+ZA6CNDu1ic9qpt4tFvH2QUB7vqXgrMVHe5ENU69q7YDq0YUg/UHLuCsZOWhUAvcMcLzLDIERzSg== integrity sha512-iHH3dv3UI23SLDrH4zMQDjLT9/dDIz/IpoFeuNxZmEx86KtfpjDOscxLTFioQyv+2vQjPlRZnK0UoJtfxLICXQ==
dependencies: dependencies:
"@stylelint/postcss-css-in-js" "^0.37.2" "@stylelint/postcss-css-in-js" "^0.37.2"
"@stylelint/postcss-markdown" "^0.36.1" "@stylelint/postcss-markdown" "^0.36.2"
autoprefixer "^9.8.6" autoprefixer "^9.8.6"
balanced-match "^1.0.0" balanced-match "^1.0.0"
chalk "^4.1.0" chalk "^4.1.0"
cosmiconfig "^7.0.0" cosmiconfig "^7.0.0"
debug "^4.1.1" debug "^4.2.0"
execall "^2.0.0" execall "^2.0.0"
fast-glob "^3.2.4" fast-glob "^3.2.4"
fastest-levenshtein "^1.0.12" fastest-levenshtein "^1.0.12"
file-entry-cache "^5.0.1" file-entry-cache "^6.0.0"
get-stdin "^8.0.0" get-stdin "^8.0.0"
global-modules "^2.0.0" global-modules "^2.0.0"
globby "^11.0.1" globby "^11.0.1"
@@ -7496,14 +7450,14 @@ stylelint@^13.7.2:
ignore "^5.1.8" ignore "^5.1.8"
import-lazy "^4.0.0" import-lazy "^4.0.0"
imurmurhash "^0.1.4" imurmurhash "^0.1.4"
known-css-properties "^0.19.0" known-css-properties "^0.20.0"
lodash "^4.17.20" lodash "^4.17.20"
log-symbols "^4.0.0" log-symbols "^4.0.0"
mathml-tag-names "^2.1.3" mathml-tag-names "^2.1.3"
meow "^7.1.1" meow "^8.0.0"
micromatch "^4.0.2" micromatch "^4.0.2"
normalize-selector "^0.2.0" normalize-selector "^0.2.0"
postcss "^7.0.32" postcss "^7.0.35"
postcss-html "^0.36.0" postcss-html "^0.36.0"
postcss-less "^3.1.4" postcss-less "^3.1.4"
postcss-media-query-parser "^0.2.3" postcss-media-query-parser "^0.2.3"
@@ -7511,7 +7465,7 @@ stylelint@^13.7.2:
postcss-safe-parser "^4.0.2" postcss-safe-parser "^4.0.2"
postcss-sass "^0.4.4" postcss-sass "^0.4.4"
postcss-scss "^2.1.1" postcss-scss "^2.1.1"
postcss-selector-parser "^6.0.2" postcss-selector-parser "^6.0.4"
postcss-syntax "^0.36.2" postcss-syntax "^0.36.2"
postcss-value-parser "^4.1.0" postcss-value-parser "^4.1.0"
resolve-from "^5.0.0" resolve-from "^5.0.0"
@@ -7522,8 +7476,8 @@ stylelint@^13.7.2:
style-search "^0.1.0" style-search "^0.1.0"
sugarss "^2.0.0" sugarss "^2.0.0"
svg-tags "^1.0.0" svg-tags "^1.0.0"
table "^6.0.1" table "^6.0.3"
v8-compile-cache "^2.1.1" v8-compile-cache "^2.2.0"
write-file-atomic "^3.0.3" write-file-atomic "^3.0.3"
sugarss@^2.0.0: sugarss@^2.0.0:
@@ -7631,7 +7585,7 @@ table@^5.2.3:
slice-ansi "^2.1.0" slice-ansi "^2.1.0"
string-width "^3.0.0" string-width "^3.0.0"
table@^6.0.1: table@^6.0.3:
version "6.0.3" version "6.0.3"
resolved "https://registry.npmjs.org/table/-/table-6.0.3.tgz#e5b8a834e37e27ad06de2e0fda42b55cfd8a0123" resolved "https://registry.npmjs.org/table/-/table-6.0.3.tgz#e5b8a834e37e27ad06de2e0fda42b55cfd8a0123"
integrity sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw== integrity sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==
@@ -7687,9 +7641,9 @@ terser@^4.6.2, terser@^4.6.3, terser@^4.7.0:
source-map-support "~0.5.12" source-map-support "~0.5.12"
terser@^5.0.0: terser@^5.0.0:
version "5.3.8" version "5.4.0"
resolved "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz#991ae8ba21a3d990579b54aa9af11586197a75dd" resolved "https://registry.npmjs.org/terser/-/terser-5.4.0.tgz#9815c0839072d5c894e22c6fc508fbe9f5e7d7e8"
integrity sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ== integrity sha512-3dZunFLbCJis9TAF2VnX+VrQLctRUmt1p3W2kCsJuZE4ZgWqh//+1MZ62EanewrqKoUf4zIaDGZAvml4UDc0OQ==
dependencies: dependencies:
commander "^2.20.0" commander "^2.20.0"
source-map "~0.7.2" source-map "~0.7.2"
@@ -7813,16 +7767,6 @@ trim-off-newlines@^1.0.0:
resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
trim-trailing-lines@^1.0.0:
version "1.1.4"
resolved "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0"
integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==
trim@0.0.1:
version "0.0.1"
resolved "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
trough@^1.0.0: trough@^1.0.0:
version "1.0.5" version "1.0.5"
resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
@@ -7868,11 +7812,6 @@ type-fest@^0.11.0:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
type-fest@^0.13.1:
version "0.13.1"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
type-fest@^0.18.0: type-fest@^0.18.0:
version "0.18.1" version "0.18.1"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
@@ -7923,14 +7862,6 @@ uglify-js@^3.1.4:
resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.6.tgz#144b50d3e05eadd3ad4dd047c60ca541a8cd4e9c" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.6.tgz#144b50d3e05eadd3ad4dd047c60ca541a8cd4e9c"
integrity sha512-oASI1FOJ7BBFkSCNDZ446EgkSuHkOZBuqRFrwXIKWCoXw8ZXQETooTQjkAcBS03Acab7ubCKsXnwuV2svy061g== integrity sha512-oASI1FOJ7BBFkSCNDZ446EgkSuHkOZBuqRFrwXIKWCoXw8ZXQETooTQjkAcBS03Acab7ubCKsXnwuV2svy061g==
unherit@^1.0.4:
version "1.1.3"
resolved "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==
dependencies:
inherits "^2.0.0"
xtend "^4.0.0"
unicode-canonical-property-names-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -7954,7 +7885,7 @@ unicode-property-aliases-ecmascript@^1.0.4:
resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
unified@^9.0.0: unified@^9.1.0:
version "9.2.0" version "9.2.0"
resolved "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" resolved "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8"
integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==
@@ -7988,7 +7919,7 @@ unique-string@^1.0.0:
dependencies: dependencies:
crypto-random-string "^1.0.0" crypto-random-string "^1.0.0"
unist-util-find-all-after@^3.0.1: unist-util-find-all-after@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6" resolved "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6"
integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ== integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==
@@ -8000,13 +7931,6 @@ unist-util-is@^4.0.0:
resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz#e8b44db55fc20c43752b3346c116344d45d7c91d" resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz#e8b44db55fc20c43752b3346c116344d45d7c91d"
integrity sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw== integrity sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw==
unist-util-remove-position@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"
integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==
dependencies:
unist-util-visit "^2.0.0"
unist-util-stringify-position@^2.0.0: unist-util-stringify-position@^2.0.0:
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
@@ -8014,23 +7938,6 @@ unist-util-stringify-position@^2.0.0:
dependencies: dependencies:
"@types/unist" "^2.0.2" "@types/unist" "^2.0.2"
unist-util-visit-parents@^3.0.0:
version "3.1.1"
resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6"
integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==
dependencies:
"@types/unist" "^2.0.0"
unist-util-is "^4.0.0"
unist-util-visit@^2.0.0:
version "2.0.3"
resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==
dependencies:
"@types/unist" "^2.0.0"
unist-util-is "^4.0.0"
unist-util-visit-parents "^3.0.0"
universalify@^0.1.0: universalify@^0.1.0:
version "0.1.2" version "0.1.2"
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -8091,7 +7998,7 @@ uuid@^3.3.2:
resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==
@@ -8116,11 +8023,6 @@ vditor@^3.6.2:
dependencies: dependencies:
diff-match-patch "^1.0.5" diff-match-patch "^1.0.5"
vfile-location@^3.0.0:
version "3.2.0"
resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c"
integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==
vfile-message@^2.0.0: vfile-message@^2.0.0:
version "2.0.4" version "2.0.4"
resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
@@ -8265,12 +8167,12 @@ vue-eslint-parser@^7.1.1:
esquery "^1.0.1" esquery "^1.0.1"
lodash "^4.17.15" lodash "^4.17.15"
vue-i18n@^9.0.0-beta.6: vue-i18n@^9.0.0-beta.7:
version "9.0.0-beta.6" version "9.0.0-beta.7"
resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.0.0-beta.6.tgz#ea89cee5ade18f2a2d0f2ead0ac4a6bedccade6e" resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.0.0-beta.7.tgz#f6fad5b4be218018aab4797f80dd2a95ee5236f9"
integrity sha512-6WWNumUYOnoFi50szUxhxNjTntWlL3SSb6DCoDQW3aKIGK6xTKj9bLI1gnSPfFn54dTYlJtzxEHuY8C/kvm7kg== integrity sha512-hFl0XnV91P/4UyWvHYvdYxuk3GRnKIW9zXAm6hrUU4mOIwpqchi7jVQva2TJLr52Mpsu4zYXmzL1h5pgrKmCfQ==
dependencies: dependencies:
source-map "^0.6.1" source-map "0.6.1"
vue-router@^4.0.0-rc.3: vue-router@^4.0.0-rc.3:
version "4.0.0-rc.3" version "4.0.0-rc.3"
@@ -8571,7 +8473,7 @@ xlsx@^0.16.8:
wmf "~1.0.1" wmf "~1.0.1"
word "~0.3.0" word "~0.3.0"
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: xtend@~4.0.1:
version "4.0.2" version "4.0.2"
resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -8609,7 +8511,7 @@ yargs-parser@^13.1.2:
camelcase "^5.0.0" camelcase "^5.0.0"
decamelize "^1.2.0" decamelize "^1.2.0"
yargs-parser@^18.1.2, yargs-parser@^18.1.3: yargs-parser@^18.1.2:
version "18.1.3" version "18.1.3"
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
@@ -8683,6 +8585,11 @@ zrender@4.3.2:
resolved "https://registry.npmjs.org/zrender/-/zrender-4.3.2.tgz#ec7432f9415c82c73584b6b7b8c47e1b016209c6" resolved "https://registry.npmjs.org/zrender/-/zrender-4.3.2.tgz#ec7432f9415c82c73584b6b7b8c47e1b016209c6"
integrity sha512-bIusJLS8c4DkIcdiK+s13HiQ/zjQQVgpNohtd8d94Y2DnJqgM1yjh/jpDb8DoL6hd7r8Awagw8e3qK/oLaWr3g== integrity sha512-bIusJLS8c4DkIcdiK+s13HiQ/zjQQVgpNohtd8d94Y2DnJqgM1yjh/jpDb8DoL6hd7r8Awagw8e3qK/oLaWr3g==
zwitch@^1.0.0:
version "1.0.5"
resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
zxcvbn@^4.4.2: zxcvbn@^4.4.2:
version "4.4.2" version "4.4.2"
resolved "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30" resolved "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30"