无人机管理后台前端(已迁走)
shuishen
2024-09-10 1dd7827ff9c42a016a1e45913ce2fd78a79f4983
远程调试相关内容调整,依赖下载
8 files modified
18 files added
4906 ■■■■ changed files
package-lock.json 12 ●●●●● patch | view | raw | blame | history
package.json 4 ●●● patch | view | raw | blame | history
src/api/device-cmd/index.js 9 ●●●●● patch | view | raw | blame | history
src/event-bus/index.js 14 ●●●●● patch | view | raw | blame | history
src/hooks/use-connect-websocket.js 20 ●●●●● patch | view | raw | blame | history
src/store/getters.js 11 ●●●●● patch | view | raw | blame | history
src/store/index.js 20 ●●●●● patch | view | raw | blame | history
src/store/modules/device.js 216 ●●●●● patch | view | raw | blame | history
src/types/airport-tsa.js 83 ●●●●● patch | view | raw | blame | history
src/types/device-cmd.js 246 ●●●●● patch | view | raw | blame | history
src/types/device.js 328 ●●●●● patch | view | raw | blame | history
src/types/enums.js 178 ●●●●● patch | view | raw | blame | history
src/types/index.js 1 ●●●● patch | view | raw | blame | history
src/utils/color.js 8 ●●●●● patch | view | raw | blame | history
src/utils/constants.js 14 ●●●●● patch | view | raw | blame | history
src/utils/device-cmd.js 577 ●●●●● patch | view | raw | blame | history
src/views/device/airport.vue 38 ●●●●● patch | view | raw | blame | history
src/views/device/components/DeviceSettingBox.vue 425 ●●●●● patch | view | raw | blame | history
src/views/device/components/DeviceSettingPopover.vue 110 ●●●●● patch | view | raw | blame | history
src/views/device/components/DockControlPanel.vue 261 ●●●●● patch | view | raw | blame | history
src/views/device/components/use-dock-control.js 78 ●●●●● patch | view | raw | blame | history
src/views/device/index.vue 35 ●●●●● patch | view | raw | blame | history
src/websocket/index.js 77 ●●●●● patch | view | raw | blame | history
src/websocket/util/config.js 19 ●●●●● patch | view | raw | blame | history
vite.config.mjs 31 ●●●●● patch | view | raw | blame | history
yarn.lock 2091 ●●●● patch | view | raw | blame | history
package-lock.json
@@ -20,7 +20,9 @@
        "js-base64": "^3.7.4",
        "js-cookie": "^3.0.0",
        "js-md5": "^0.7.3",
        "mitt": "^3.0.1",
        "nprogress": "^0.2.0",
        "reconnecting-websocket": "^4.4.0",
        "sm-crypto": "^0.3.13",
        "vue": "^3.4.27",
        "vue-i18n": "^9.1.9",
@@ -2102,6 +2104,11 @@
        "min-dash": "^4.0.0"
      }
    },
    "node_modules/mitt": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
    },
    "node_modules/mlly": {
      "version": "1.4.2",
      "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.4.2.tgz",
@@ -2328,6 +2335,11 @@
        "node": ">=8.10.0"
      }
    },
    "node_modules/reconnecting-websocket": {
      "version": "4.4.0",
      "resolved": "https://registry.npmmirror.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz",
      "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng=="
    },
    "node_modules/regenerator-runtime": {
      "version": "0.14.1",
      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
package.json
@@ -21,7 +21,9 @@
    "js-base64": "^3.7.4",
    "js-cookie": "^3.0.0",
    "js-md5": "^0.7.3",
    "mitt": "^3.0.1",
    "nprogress": "^0.2.0",
    "reconnecting-websocket": "^4.4.0",
    "sm-crypto": "^0.3.13",
    "vue": "^3.4.27",
    "vue-i18n": "^9.1.9",
@@ -33,8 +35,8 @@
    "@vue/compiler-sfc": "^3.4.27",
    "prettier": "^2.8.7",
    "sass": "^1.77.2",
    "unplugin-auto-import": "^0.11.2",
    "terser": "^5.31.1",
    "unplugin-auto-import": "^0.11.2",
    "vite": "^5.2.12",
    "vite-plugin-compression": "^0.5.1",
    "vite-plugin-vue-setup-extend": "^0.4.0"
src/api/device-cmd/index.js
New file
@@ -0,0 +1,9 @@
import request from '@/axios';
export const postSendCmd = (params, data) => {
  return request({
    url: `/drone-yw/control/api/v1/devices/${params.dock_sn}/jobs/${params.device_cmd}`,
    method: 'post',
    data,
  });
};
src/event-bus/index.js
New file
@@ -0,0 +1,14 @@
/*
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-09-10 11:43:39
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-09-10 11:44:09
 * @FilePath: \drone-web-manage\src\event-bus\index.js
 * @Description:
 *
 * Copyright (c) 2024 by shuishen, All Rights Reserved.
 */
import mitt from 'mitt';
const emitter = mitt();
export default emitter;
src/hooks/use-connect-websocket.js
New file
@@ -0,0 +1,20 @@
import { onMounted, onUnmounted } from "vue"
import ConnectWebSocket from "@/websocket"
import { getWebsocketUrl } from "@/websocket/util/config"
/**
 * 接收一个message函数
 * @param messageHandler
 */
export function useConnectWebSocket(messageHandler, url) {
  const webSocket = new ConnectWebSocket(url || getWebsocketUrl())
  onMounted(() => {
    webSocket?.registerMessageHandler(messageHandler)
    webSocket?.initSocket()
  })
  onUnmounted(() => {
    webSocket?.close()
  })
}
src/store/getters.js
@@ -1,3 +1,13 @@
/*
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-09-09 11:40:40
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-09-10 11:59:44
 * @FilePath: \drone-web-manage\src\store\getters.js
 * @Description:
 *
 * Copyright (c) 2024 by shuishen, All Rights Reserved.
 */
const getters = {
  tag: state => state.tags.tag,
  language: state => state.common.language,
@@ -34,5 +44,6 @@
  logsLen: state => state.logs.logsList.length || 0,
  logsFlag: (state, getters) => getters.logsLen === 0,
  flowRoutes: state => state.dict.flowRoutes,
  devicesCmdExecuteInfo: state => state.device.devicesCmdExecuteInfo,
};
export default getters;
src/store/index.js
@@ -1,9 +1,20 @@
import { createStore } from 'vuex';
/*
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-09-09 11:40:40
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-09-10 11:56:26
 * @FilePath: \drone-web-manage\src\store\index.js
 * @Description:
 *
 * Copyright (c) 2024 by shuishen, All Rights Reserved.
 */
import { createStore, useStore } from 'vuex';
import user from './modules/user';
import common from './modules/common';
import tags from './modules/tags';
import logs from './modules/logs';
import dict from './modules/dict';
import device from './modules/device';
import getters from './getters';
const store = createStore({
@@ -13,8 +24,15 @@
    logs,
    tags,
    dict,
    device,
  },
  getters,
});
export default store;
export const storeKey = Symbol('');
export function useMyStore() {
  return useStore(storeKey);
}
src/store/modules/device.js
New file
@@ -0,0 +1,216 @@
import { EDeviceTypeName } from '@/types';
const initStateFunc = () => ({
  Layers: [
    {
      name: 'default',
      id: '',
      is_distributed: true,
      elements: [],
      is_check: false,
      is_select: false,
      type: 1,
    },
    {
      name: 'share',
      id: '',
      is_distributed: true,
      elements: [],
      is_check: false,
      is_select: false,
      type: 2,
    },
  ],
  layerBaseInfo: {},
  drawVisible: false,
  coverList: [],
  wsEvent: {
    mapElementCreat: {},
    mapElementUpdate: {},
    mapElementDelete: {},
  },
  deviceStatusEvent: {
    deviceOnline: {},
    deviceOffline: {},
  },
  markerInfo: {
    coverMap: {},
    pathMap: {},
  },
  deviceState: {
    // remote controller, dock
    gatewayInfo: {},
    // drone
    deviceInfo: {},
    dockInfo: {},
    currentSn: '',
    currentType: -1,
  },
  osdVisible: {
    // osd 显示设备相关信息
    sn: '',
    callsign: '',
    model: '',
    visible: false,
    gateway_sn: '',
    is_dock: false,
    payloads: null,
    device_domain: '',
    device_sub_type: '',
    device_type: '',
  },
  waylineInfo: {},
  dockInfo: {},
  hmsInfo: {},
  hmsInfoDetailSn: '',
  // 机场指令执行状态信息
  devicesCmdExecuteInfo: {},
  mqttState: null, // mqtt 实例
  clientId: '', // mqtt 连接 唯一客户端id,
  waylineTool: {
    isShow: false,
    selectedPoint: undefined,
    selectedAction: undefined,
    kmzPath: '',
  },
});
const mutations = {
  SET_LAYER_INFO(state, info) {
    state.Layers = info;
  },
  SET_DEVICE_INFO(state, info) {
    state.deviceState.deviceInfo[info.sn] = info.host;
    state.deviceState.currentSn = info.sn;
    state.deviceState.currentType = EDeviceTypeName.Aircraft;
  },
  SET_GATEWAY_INFO(state, info) {
    state.deviceState.gatewayInfo[info.sn] = info.host;
    state.deviceState.currentSn = info.sn;
    state.deviceState.currentType = EDeviceTypeName.Gateway;
  },
  SET_DOCK_INFO(state, info) {
    if (Object.keys(info.host).length === 0) {
      return;
    }
    if (!state.deviceState.dockInfo[info.sn]) {
      state.deviceState.dockInfo[info.sn] = {};
    }
    state.deviceState.currentSn = info.sn;
    state.deviceState.currentType = EDeviceTypeName.Dock;
    const dock = state.deviceState.dockInfo[info.sn];
    if (info.host.mode_code !== undefined) {
      dock.basic_osd = info.host;
      return;
    }
    if (info.host.sdr) {
      dock.link_osd = info.host;
      return;
    }
    if (info.host.job_number !== undefined) {
      dock.work_osd = info.host;
    }
  },
  SET_HMSInfo_DetailSn(state, data) {
    state.hmsInfoDetailSn = data;
  },
  SET_DRAW_VISIBLE_INFO(state, bool) {
    state.drawVisible = bool;
  },
  SET_MAP_ELEMENT_CREATE(state, info) {
    state.wsEvent.mapElementCreat = info;
  },
  SET_MAP_ELEMENT_UPDATE(state, info) {
    state.wsEvent.mapElementUpdate = info;
  },
  SET_MAP_ELEMENT_DELETE(state, info) {
    state.wsEvent.mapElementDelete = info;
  },
  SET_DEVICE_ONLINE(state, info) {
    state.deviceStatusEvent.deviceOnline = info;
  },
  SET_DEVICE_OFFLINE(state, info) {
    state.deviceStatusEvent.deviceOffline = info;
    delete state.deviceState.gatewayInfo[info.sn];
    delete state.deviceState.deviceInfo[info.sn];
    delete state.deviceState.dockInfo[info.sn];
    delete state.hmsInfo[info.sn];
    // delete state.markerInfo.coverMap[info.sn]
    // delete state.markerInfo.pathMap[info.sn]
  },
  SET_OSD_VISIBLE_INFO(state, info) {
    state.osdVisible = info;
  },
  SET_SELECT_WAYLINE_INFO(state, info) {
    state.waylineInfo = info;
  },
  SET_SELECT_DOCK_INFO(state, info) {
    state.dockInfo = info;
  },
  SET_DEVICE_HMS_INFO(state, info) {
    const hmsList = state.hmsInfo[info.sn];
    state.hmsInfo[info.sn] = info.host.concat(hmsList ?? []);
  },
  SET_DEVICES_CMD_EXECUTE_INFO(state, info) {
    // 保存设备指令ws消息推送
    if (!info.sn) {
      return;
    }
    if (state.devicesCmdExecuteInfo[info.sn]) {
      const index = state.devicesCmdExecuteInfo[info.sn].findIndex(
        cmdExecuteInfo => cmdExecuteInfo.biz_code === info.biz_code
      );
      if (index >= 0) {
        // 丢弃前面的消息
        if (state.devicesCmdExecuteInfo[info.sn][index].timestamp > info.timestamp) {
          return;
        }
        state.devicesCmdExecuteInfo[info.sn][index] = info;
      } else {
        state.devicesCmdExecuteInfo[info.sn].push(info);
      }
    } else {
      state.devicesCmdExecuteInfo[info.sn] = [info];
    }
  },
  SET_MQTT_STATE(state, mqttState) {
    state.mqttState = mqttState;
  },
  SET_CLIENT_ID(state, clientId) {
    state.clientId = clientId;
  },
  // 设置wayline中的信息
  SET_WAYLINE_INFO(state, { isShow, selectedPoint, selectedAction }) {
    isShow !== undefined && (state.waylineTool.isShow = isShow);
    state.waylineTool.selectedPoint = selectedPoint;
    selectedAction !== undefined && (state.waylineTool.selectedAction = selectedAction);
  },
  SET_WAYLINE_KMZPATH(state, kmzPath) {
    state.waylineTool.kmzPath = kmzPath;
  },
};
const actions = {
  updateElement({ state }, content) {
    const key = content.id.replaceAll('resource__', '');
    const type = content.type;
    const layers = state.Layers;
    const layer = layers.find(item => item.id === key);
    if (layer) {
      layer[type] = content.bool;
    }
  },
  getLayerInfo({ state }, id) {
    return state.layerBaseInfo[id];
  },
};
const device = {
  state: initStateFunc,
  mutations,
  actions,
};
export default device;
src/types/airport-tsa.js
New file
@@ -0,0 +1,83 @@
// 舱盖状态
export let CoverStateEnum;
(function (CoverStateEnum) {
  CoverStateEnum[(CoverStateEnum['Close'] = 0)] = 'Close';
  CoverStateEnum[(CoverStateEnum['Open'] = 1)] = 'Open';
  CoverStateEnum[(CoverStateEnum['HalfOpen'] = 2)] = 'HalfOpen';
  CoverStateEnum[(CoverStateEnum['Failed'] = 3)] = 'Failed';
})(CoverStateEnum || (CoverStateEnum = {}));
// 推杆状态
export let PutterStateEnum;
(function (PutterStateEnum) {
  PutterStateEnum[(PutterStateEnum['Close'] = 0)] = 'Close';
  PutterStateEnum[(PutterStateEnum['Open'] = 1)] = 'Open';
  PutterStateEnum[(PutterStateEnum['HalfOpen'] = 2)] = 'HalfOpen';
  PutterStateEnum[(PutterStateEnum['Failed'] = 3)] = 'Failed';
})(PutterStateEnum || (PutterStateEnum = {}));
// 充电状态
export let ChargeStateEnum;
(function (ChargeStateEnum) {
  ChargeStateEnum[(ChargeStateEnum['NotCharge'] = 0)] = 'NotCharge';
  ChargeStateEnum[(ChargeStateEnum['Charge'] = 1)] = 'Charge';
})(ChargeStateEnum || (ChargeStateEnum = {}));
// 补光灯状态
export let SupplementLightStateEnum;
(function (SupplementLightStateEnum) {
  SupplementLightStateEnum[(SupplementLightStateEnum['Close'] = 0)] = 'Close';
  SupplementLightStateEnum[(SupplementLightStateEnum['Open'] = 1)] = 'Open';
})(SupplementLightStateEnum || (SupplementLightStateEnum = {}));
// 机场声光报警状态
export let AlarmModeEnum;
(function (AlarmModeEnum) {
  AlarmModeEnum[(AlarmModeEnum['CLOSE'] = 0)] = 'CLOSE';
  AlarmModeEnum[(AlarmModeEnum['OPEN'] = 1)] = 'OPEN';
})(AlarmModeEnum || (AlarmModeEnum = {}));
// 电池保养
export let BatteryStoreModeEnum;
(function (BatteryStoreModeEnum) {
  BatteryStoreModeEnum[(BatteryStoreModeEnum['BATTERY_PLAN_STORE'] = 1)] = 'BATTERY_PLAN_STORE';
  BatteryStoreModeEnum[(BatteryStoreModeEnum['BATTERY_EMERGENCY_STORE'] = 2)] =
    'BATTERY_EMERGENCY_STORE';
})(BatteryStoreModeEnum || (BatteryStoreModeEnum = {}));
// 飞行器电池保养
export let DroneBatteryStateEnum;
(function (DroneBatteryStateEnum) {
  DroneBatteryStateEnum[(DroneBatteryStateEnum['NoMaintenanceRequired'] = 0)] =
    'NoMaintenanceRequired';
  DroneBatteryStateEnum[(DroneBatteryStateEnum['MaintenanceRequired'] = 1)] = 'MaintenanceRequired';
  DroneBatteryStateEnum[(DroneBatteryStateEnum['MaintenanceInProgress'] = 2)] =
    'MaintenanceInProgress';
})(DroneBatteryStateEnum || (DroneBatteryStateEnum = {}));
export let DroneBatteryModeEnum;
(function (DroneBatteryModeEnum) {
  DroneBatteryModeEnum[(DroneBatteryModeEnum['CLOSE'] = 0)] = 'CLOSE';
  DroneBatteryModeEnum[(DroneBatteryModeEnum['OPEN'] = 1)] = 'OPEN';
})(DroneBatteryModeEnum || (DroneBatteryModeEnum = {}));
// 4g链路连接状态
export let FourGLinkStateEnum;
(function (FourGLinkStateEnum) {
  FourGLinkStateEnum[(FourGLinkStateEnum['CLOSE'] = 0)] = 'CLOSE';
  FourGLinkStateEnum[(FourGLinkStateEnum['OPEN'] = 1)] = 'OPEN';
})(FourGLinkStateEnum || (FourGLinkStateEnum = {}));
//  Sdr链路连接状态
export let SdrLinkStateEnum;
(function (SdrLinkStateEnum) {
  SdrLinkStateEnum[(SdrLinkStateEnum['CLOSE'] = 0)] = 'CLOSE';
  SdrLinkStateEnum[(SdrLinkStateEnum['OPEN'] = 1)] = 'OPEN';
})(SdrLinkStateEnum || (SdrLinkStateEnum = {}));
// 机场的图传链路模式
export let LinkWorkModeEnum;
(function (LinkWorkModeEnum) {
  LinkWorkModeEnum[(LinkWorkModeEnum['SDR'] = 0)] = 'SDR';
  LinkWorkModeEnum[(LinkWorkModeEnum['FourG_FUSION_MODE'] = 1)] = 'FourG_FUSION_MODE';
})(LinkWorkModeEnum || (LinkWorkModeEnum = {}));
src/types/device-cmd.js
New file
@@ -0,0 +1,246 @@
import {
  AlarmModeEnum,
  BatteryStoreModeEnum,
  DroneBatteryModeEnum,
  LinkWorkModeEnum,
} from '@/types/airport-tsa';
// 机场指令集
export let DeviceCmd;
(function (DeviceCmd) {
  DeviceCmd['DebugModeOpen'] = 'debug_mode_open';
  DeviceCmd['DebugModeClose'] = 'debug_mode_close';
  DeviceCmd['SupplementLightOpen'] = 'supplement_light_open';
  DeviceCmd['SupplementLightClose'] = 'supplement_light_close';
  DeviceCmd['ReturnHome'] = 'return_home';
  DeviceCmd['DeviceReboot'] = 'device_reboot';
  DeviceCmd['DroneOpen'] = 'drone_open';
  DeviceCmd['DroneClose'] = 'drone_close';
  DeviceCmd['DeviceFormat'] = 'device_format';
  DeviceCmd['DroneFormat'] = 'drone_format';
  DeviceCmd['CoverOpen'] = 'cover_open';
  DeviceCmd['CoverClose'] = 'cover_close';
  DeviceCmd['PutterOpen'] = 'putter_open';
  DeviceCmd['PutterClose'] = 'putter_close';
  DeviceCmd['ChargeOpen'] = 'charge_open';
  DeviceCmd['ChargeClose'] = 'charge_close';
  DeviceCmd['AlarmStateSwitch'] = 'alarm_state_switch';
  DeviceCmd['BatteryStoreModeSwitch'] = 'battery_store_mode_switch';
  DeviceCmd['DroneBatteryModeSwitch'] = 'battery_maintenance_switch';
  DeviceCmd['SdrWorkModeSwitch'] = 'sdr_workmode_switch';
})(DeviceCmd || (DeviceCmd = {}));
export const noDebugCmdList = [
  {
    label: '返航',
    status: '--',
    operateText: '返航',
    cmdKey: DeviceCmd.ReturnHome,
    func: 'returnHome',
    loading: false,
  },
];
// 机场指令
export const cmdList = [
  {
    // iconName: ,
    label: '机场系统',
    status: '工作中',
    operateText: '重启',
    cmdKey: DeviceCmd.DeviceReboot,
    func: 'deviceReboot',
    loading: false,
    // btnAnimationIconName: '',
    // operateTips: '',
    // statusColor: '',
  },
  {
    label: '飞行器',
    status: '关机',
    operateText: '开机',
    cmdKey: DeviceCmd.DroneOpen,
    oppositeCmdKey: DeviceCmd.DroneClose,
    func: 'droneStatus',
    loading: false,
  },
  {
    label: '舱盖',
    status: '关',
    operateText: '开启',
    cmdKey: DeviceCmd.CoverOpen,
    oppositeCmdKey: DeviceCmd.CoverClose,
    func: 'coverStatus',
    loading: false,
  },
  {
    label: '推杆',
    status: '闭合',
    operateText: '展开',
    cmdKey: DeviceCmd.PutterOpen,
    oppositeCmdKey: DeviceCmd.PutterClose,
    func: 'putterStatus',
    loading: false,
  },
  {
    label: '充电状态',
    status: '未充电',
    operateText: '充电',
    cmdKey: DeviceCmd.ChargeOpen,
    oppositeCmdKey: DeviceCmd.ChargeClose,
    func: 'chargeStatus',
    loading: false,
  },
  {
    label: '机场存储',
    status: '--',
    operateText: '格式化',
    cmdKey: DeviceCmd.DeviceFormat,
    func: 'deviceFormat',
    loading: false,
  },
  {
    label: '飞行器存储',
    status: '--',
    operateText: '格式化',
    cmdKey: DeviceCmd.DroneFormat,
    func: 'droneFormat',
    loading: false,
  },
  {
    label: '补光灯',
    status: '关',
    operateText: '打开',
    cmdKey: DeviceCmd.SupplementLightOpen,
    oppositeCmdKey: DeviceCmd.SupplementLightClose,
    func: 'supplementLightStatus',
    loading: false,
  },
  {
    label: '机场声光报警',
    status: '关',
    operateText: '打开',
    cmdKey: DeviceCmd.AlarmStateSwitch,
    action: AlarmModeEnum.OPEN,
    func: 'alarmState',
    loading: false,
  },
  {
    label: '机场电池存储模式',
    status: '计划',
    operateText: '应急',
    cmdKey: DeviceCmd.BatteryStoreModeSwitch,
    action: BatteryStoreModeEnum.BATTERY_EMERGENCY_STORE,
    func: 'batteryStoreMode',
    loading: false,
  },
  {
    label: '飞机电池保养',
    status: '--',
    operateText: '保养',
    cmdKey: DeviceCmd.DroneBatteryModeSwitch,
    action: DroneBatteryModeEnum.OPEN,
    func: 'droneBatteryMode',
    loading: false,
    disabled: true,
  },
  {
    label: '4g 增强',
    status: '--',
    operateText: '开启',
    cmdKey: DeviceCmd.SdrWorkModeSwitch,
    action: LinkWorkModeEnum.FourG_FUSION_MODE,
    func: 'sdrWorkMode',
    loading: false,
  },
];
export let DeviceCmdStatusText;
(function (DeviceCmdStatusText) {
  DeviceCmdStatusText['DeviceRebootNormalText'] = '工作中';
  DeviceCmdStatusText['DeviceRebootInProgressText'] = '重启中...';
  DeviceCmdStatusText['DeviceRebootFailedText'] = '重启失败';
  DeviceCmdStatusText['DroneStatusOpenNormalText'] = '开';
  DeviceCmdStatusText['DroneStatusOpenInProgressText'] = '开机中...';
  DeviceCmdStatusText['DroneStatusOpenFailedText'] = '关';
  DeviceCmdStatusText['DroneStatusOpenBtnText'] = '关机';
  DeviceCmdStatusText['DroneStatusCloseNormalText'] = '关';
  DeviceCmdStatusText['DroneStatusCloseInProgressText'] = '关机中...';
  DeviceCmdStatusText['DroneStatusCloseFailedText'] = '开';
  DeviceCmdStatusText['DroneStatusCloseBtnText'] = '开机';
  DeviceCmdStatusText['DeviceCoverOpenNormalText'] = '开';
  DeviceCmdStatusText['DeviceCoverOpenInProgressText'] = '开启中...';
  DeviceCmdStatusText['DeviceCoverOpenFailedText'] = '关';
  DeviceCmdStatusText['DeviceCoverOpenBtnText'] = '关闭';
  DeviceCmdStatusText['DeviceCoverCloseNormalText'] = '关';
  DeviceCmdStatusText['DeviceCoverCloseInProgressText'] = '关闭中...';
  DeviceCmdStatusText['DeviceCoverCloseFailedText'] = '开';
  DeviceCmdStatusText['DeviceCoverCloseBtnText'] = '开启';
  DeviceCmdStatusText['DevicePutterOpenNormalText'] = '展开';
  DeviceCmdStatusText['DevicePutterOpenBtnText'] = '闭合';
  DeviceCmdStatusText['DevicePutterOpenInProgressText'] = '推杆展开中';
  DeviceCmdStatusText['DevicePutterOpenFailedText'] = '闭合';
  DeviceCmdStatusText['DevicePutterCloseNormalText'] = '闭合';
  DeviceCmdStatusText['DevicePutterCloseInProgressText'] = '推杆闭合中';
  DeviceCmdStatusText['DevicePutterCloseFailedText'] = '展开';
  DeviceCmdStatusText['DevicePutterCloseBtnText'] = '展开';
  DeviceCmdStatusText['DeviceChargeOpenNormalText'] = '充电';
  DeviceCmdStatusText['DeviceChargeOpenInProgressText'] = '充电中...';
  DeviceCmdStatusText['DeviceChargeOpenFailedText'] = '未充电';
  DeviceCmdStatusText['DeviceChargeOpenBtnText'] = '断电';
  DeviceCmdStatusText['DeviceChargeCloseNormalText'] = '断电';
  DeviceCmdStatusText['DeviceChargeCloseInProgressText'] = '断电中...';
  DeviceCmdStatusText['DeviceChargeCloseFailedText'] = '充电';
  DeviceCmdStatusText['DeviceChargeCloseBtnText'] = '充电';
  DeviceCmdStatusText['DeviceFormatInProgressText'] = '格式化...';
  DeviceCmdStatusText['DeviceFormatFailedText'] = '格式化失败';
  DeviceCmdStatusText['DroneFormatInProgressText'] = '格式化...';
  DeviceCmdStatusText['DroneFormatFailedText'] = '格式化失败';
  DeviceCmdStatusText['DeviceSupplementLightOpenNormalText'] = '开';
  DeviceCmdStatusText['DeviceSupplementLightOpenInProgressText'] = '开启中...';
  DeviceCmdStatusText['DeviceSupplementLightOpenFailedText'] = '关';
  DeviceCmdStatusText['DeviceSupplementLightOpenBtnText'] = '关闭';
  DeviceCmdStatusText['DeviceSupplementLightCloseNormalText'] = '关';
  DeviceCmdStatusText['DeviceSupplementLightCloseText'] = '关闭中...';
  DeviceCmdStatusText['DeviceSupplementLightCloseFailedText'] = '开';
  DeviceCmdStatusText['DeviceSupplementLightCloseBtnText'] = '打开';
  DeviceCmdStatusText['AlarmStateOpenNormalText'] = '开';
  DeviceCmdStatusText['AlarmStateOpenText'] = '开启中...';
  DeviceCmdStatusText['AlarmStateOpenFailedText'] = '关';
  DeviceCmdStatusText['AlarmStateOpenBtnText'] = '关闭';
  DeviceCmdStatusText['AlarmStateCloseNormalText'] = '关';
  DeviceCmdStatusText['AlarmStateCloseText'] = '关闭中...';
  DeviceCmdStatusText['AlarmStateCloseFailedText'] = '开';
  DeviceCmdStatusText['AlarmStateCloseBtnText'] = '打开';
  DeviceCmdStatusText['BatteryStoreModePlanNormalText'] = '计划';
  DeviceCmdStatusText['BatteryStoreModePlanText'] = '切换中...';
  DeviceCmdStatusText['BatteryStoreModePlanFailedText'] = '应急';
  DeviceCmdStatusText['BatteryStoreModePlanBtnText'] = '应急';
  DeviceCmdStatusText['BatteryStoreModeEmergencyNormalText'] = '应急';
  DeviceCmdStatusText['BatteryStoreModeEmergencyText'] = '切换中...';
  DeviceCmdStatusText['BatteryStoreModeEmergencyFailedText'] = '计划';
  DeviceCmdStatusText['BatteryStoreModeEmergencyBtnText'] = '计划';
  DeviceCmdStatusText['DroneBatteryModeMaintenanceInProgressText'] = '保养中';
  DeviceCmdStatusText['DroneBatteryModeMaintenanceNotNeedText'] = '无需保养';
  DeviceCmdStatusText['DroneBatteryModeMaintenanceNeedText'] = '需保养';
  DeviceCmdStatusText['DroneBatteryModeOpenBtnText'] = '保养';
  DeviceCmdStatusText['DroneBatteryModeCloseBtnText'] = '关闭保养';
  DeviceCmdStatusText['SdrWorkModeFourGOpenNormalText'] = '开';
  DeviceCmdStatusText['SdrWorkModeFourGOpenText'] = '开启中...';
  DeviceCmdStatusText['SdrWorkModeFourGOpenFailedText'] = '--';
  DeviceCmdStatusText['SdrWorkModeFourGOpenBtnText'] = '关闭';
  DeviceCmdStatusText['SdrWorkModeFourGCloseNormalText'] = '--';
  DeviceCmdStatusText['SdrWorkModeFourGCloseText'] = '关闭中...';
  DeviceCmdStatusText['SdrWorkModeFourGCloseFailedText'] = '开';
  DeviceCmdStatusText['SdrWorkModeFourCloseBtnText'] = '开启';
})(DeviceCmdStatusText || (DeviceCmdStatusText = {}));
// cmd ws 消息状态
export let DeviceCmdExecuteStatus;
(function (DeviceCmdExecuteStatus) {
  DeviceCmdExecuteStatus['Sent'] = 'sent';
  DeviceCmdExecuteStatus['InProgress'] = 'in_progress';
  DeviceCmdExecuteStatus['OK'] = 'ok';
  DeviceCmdExecuteStatus['Failed'] = 'failed';
  DeviceCmdExecuteStatus['Canceled'] = 'canceled';
  DeviceCmdExecuteStatus['Timeout'] = 'timeout';
})(DeviceCmdExecuteStatus || (DeviceCmdExecuteStatus = {}));
src/types/device.js
New file
@@ -0,0 +1,328 @@
import { commonColor } from "@/utils/color"
// domain
export let DOMAIN
;(function(DOMAIN) {
  DOMAIN["DRONE"] = "0"
  DOMAIN["PAYLOAD"] = "1"
  DOMAIN["RC"] = "2"
  DOMAIN["DOCK"] = "3"
})(DOMAIN || (DOMAIN = {}))
// DJI飞机类型
export let DRONE_TYPE
;(function(DRONE_TYPE) {
  DRONE_TYPE[(DRONE_TYPE["M30"] = 67)] = "M30"
  DRONE_TYPE[(DRONE_TYPE["M300"] = 60)] = "M300"
  DRONE_TYPE[(DRONE_TYPE["Mavic3EnterpriseAdvanced"] = 77)] =
    "Mavic3EnterpriseAdvanced"
  DRONE_TYPE[(DRONE_TYPE["M350"] = 89)] = "M350"
})(DRONE_TYPE || (DRONE_TYPE = {}))
// DJI负载类型枚举值
export let PAYLOAD_TYPE
;(function(PAYLOAD_TYPE) {
  PAYLOAD_TYPE[(PAYLOAD_TYPE["FPV"] = 39)] = "FPV"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["H20"] = 42)] = "H20"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["H20T"] = 43)] = "H20T"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["H20N"] = 61)] = "H20N"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["EP600"] = 50)] = "EP600"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["EP800"] = 90742)] = "EP800"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["M30D"] = 52)] = "M30D"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["M30T"] = 53)] = "M30T"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["XT2"] = 26)] = "XT2"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["XTS"] = 41)] = "XTS"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["Z30"] = 20)] = "Z30"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["DockTopCamera"] = 165)] = "DockTopCamera"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["M3E"] = 66)] = "M3E"
  PAYLOAD_TYPE[(PAYLOAD_TYPE["M3T"] = 67)] = "M3T"
})(PAYLOAD_TYPE || (PAYLOAD_TYPE = {}))
// RC type
export let RC_TYPE
;(function(RC_TYPE) {
  RC_TYPE[(RC_TYPE["RC"] = 56)] = "RC"
  RC_TYPE[(RC_TYPE["RCPlus"] = 119)] = "RCPlus"
  RC_TYPE[(RC_TYPE["RC144"] = 144)] = "RC144"
})(RC_TYPE || (RC_TYPE = {}))
// DOCK type
export let DOCK_TYPE
;(function(DOCK_TYPE) {
  DOCK_TYPE[(DOCK_TYPE["Dock"] = 1)] = "Dock"
})(DOCK_TYPE || (DOCK_TYPE = {}))
// 设备sub_type 从0升序
export let DEVICE_SUB_TYPE
;(function(DEVICE_SUB_TYPE) {
  DEVICE_SUB_TYPE[(DEVICE_SUB_TYPE["ZERO"] = 0)] = "ZERO"
  DEVICE_SUB_TYPE[(DEVICE_SUB_TYPE["ONE"] = 1)] = "ONE"
  DEVICE_SUB_TYPE[(DEVICE_SUB_TYPE["TWO"] = 2)] = "TWO"
  DEVICE_SUB_TYPE[(DEVICE_SUB_TYPE["THREE"] = 3)] = "THREE"
  DEVICE_SUB_TYPE[(DEVICE_SUB_TYPE["UNKNOWN"] = 65535)] = "UNKNOWN"
})(DEVICE_SUB_TYPE || (DEVICE_SUB_TYPE = {}))
export const DEVICE_MODEL_KEY = {
  M30: `${DOMAIN.DRONE}-${DRONE_TYPE.M30}-${DEVICE_SUB_TYPE.ZERO}`,
  M30T: `${DOMAIN.DRONE}-${DRONE_TYPE.M30}-${DEVICE_SUB_TYPE.ONE}`,
  M3E: `${DOMAIN.DRONE}-${DRONE_TYPE.Mavic3EnterpriseAdvanced}-${DEVICE_SUB_TYPE.ZERO}`,
  M3T: `${DOMAIN.DRONE}-${DRONE_TYPE.Mavic3EnterpriseAdvanced}-${DEVICE_SUB_TYPE.ONE}`,
  M300: `${DOMAIN.DRONE}-${DRONE_TYPE.M300}-${DEVICE_SUB_TYPE.ZERO}`,
  M350: `${DOMAIN.DRONE}-${DRONE_TYPE.M350}-${DEVICE_SUB_TYPE.ZERO}`,
  FPV: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.FPV}-${DEVICE_SUB_TYPE.ZERO}`,
  H20: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.H20}-${DEVICE_SUB_TYPE.ZERO}`,
  H20T: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.H20T}-${DEVICE_SUB_TYPE.ZERO}`,
  H20N: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.H20N}-${DEVICE_SUB_TYPE.ZERO}`,
  EP600: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.EP600}-${DEVICE_SUB_TYPE.UNKNOWN}`,
  EP800: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.EP800}-${DEVICE_SUB_TYPE.ZERO}`,
  M30Camera: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.M30D}-${DEVICE_SUB_TYPE.ZERO}`,
  M30TCamera: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.M30T}-${DEVICE_SUB_TYPE.ZERO}`,
  M3ECamera: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.M3E}-${DEVICE_SUB_TYPE.ZERO}`,
  M3TCamera: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.M3T}-${DEVICE_SUB_TYPE.ZERO}`,
  // M3MCamera: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.M3M}-${DEVICE_SUB_TYPE.ZERO}`,
  XT2: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.XT2}-${DEVICE_SUB_TYPE.ZERO}`,
  XTS: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.XTS}-${DEVICE_SUB_TYPE.ZERO}`,
  Z30: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.Z30}-${DEVICE_SUB_TYPE.ZERO}`,
  DockTopCamera: `${DOMAIN.PAYLOAD}-${PAYLOAD_TYPE.DockTopCamera}-${DEVICE_SUB_TYPE.ZERO}`,
  RC: `${DOMAIN.RC}-${RC_TYPE.RC}-${DEVICE_SUB_TYPE.ZERO}`,
  RCPlus: `${DOMAIN.RC}-${RC_TYPE.RCPlus}-${DEVICE_SUB_TYPE.ZERO}`,
  Dock: `${DOMAIN.DOCK}-${DOCK_TYPE.Dock}-${DEVICE_SUB_TYPE.ZERO}`
}
export const DEVICE_NAME = {
  // drone
  [DEVICE_MODEL_KEY.M30]: "M30",
  [DEVICE_MODEL_KEY.M30T]: "M30T",
  [DEVICE_MODEL_KEY.M3E]: "Mavic 3E",
  [DEVICE_MODEL_KEY.M3T]: "Mavic 3T",
  // [DEVICE_MODEL_KEY.M3M]: 'Mavic 3M',
  [DEVICE_MODEL_KEY.M300]: "M300 RTK",
  [DEVICE_MODEL_KEY.M350]: "M350 RTK",
  // payload
  [DEVICE_MODEL_KEY.FPV]: "FPV",
  [DEVICE_MODEL_KEY.H20]: "H20",
  [DEVICE_MODEL_KEY.H20T]: "H20T",
  [DEVICE_MODEL_KEY.H20N]: "H20N",
  [DEVICE_MODEL_KEY.EP600]: "P1",
  [DEVICE_MODEL_KEY.EP800]: "L1",
  [DEVICE_MODEL_KEY.M30Camera]: "M30 Camera",
  [DEVICE_MODEL_KEY.M30TCamera]: "M30T Camera",
  [DEVICE_MODEL_KEY.M3ECamera]: "Mavic 3E",
  [DEVICE_MODEL_KEY.M3TCamera]: "Mavic 3T",
  // [DEVICE_MODEL_KEY.M3MCamera]: 'Mavic 3M',
  [DEVICE_MODEL_KEY.XT2]: "XT2",
  [DEVICE_MODEL_KEY.XTS]: "XTS",
  [DEVICE_MODEL_KEY.Z30]: "Z30",
  [DEVICE_MODEL_KEY.DockTopCamera]: "Dock Camera",
  // rc
  [DEVICE_MODEL_KEY.RC]: "RC",
  [DEVICE_MODEL_KEY.RCPlus]: "RC Plus",
  // dock
  [DEVICE_MODEL_KEY.Dock]: "Dock"
}
// 控制权
export let ControlSource
;(function(ControlSource) {
  ControlSource["A"] = "A"
  ControlSource["B"] = "B"
})(ControlSource || (ControlSource = {}))
// 固件升级类型
export let DeviceFirmwareTypeEnum
;(function(DeviceFirmwareTypeEnum) {
  DeviceFirmwareTypeEnum[(DeviceFirmwareTypeEnum["ToUpgraded"] = 3)] =
    "ToUpgraded"
  DeviceFirmwareTypeEnum[(DeviceFirmwareTypeEnum["ConsistencyUpgrade"] = 2)] =
    "ConsistencyUpgrade"
})(DeviceFirmwareTypeEnum || (DeviceFirmwareTypeEnum = {}))
// 固件升级状态
export let DeviceFirmwareStatusEnum
;(function(DeviceFirmwareStatusEnum) {
  DeviceFirmwareStatusEnum[(DeviceFirmwareStatusEnum["None"] = 1)] = "None"
  DeviceFirmwareStatusEnum[(DeviceFirmwareStatusEnum["ToUpgraded"] = 2)] =
    "ToUpgraded"
  DeviceFirmwareStatusEnum[
    (DeviceFirmwareStatusEnum["ConsistencyUpgrade"] = 3)
  ] = "ConsistencyUpgrade"
  DeviceFirmwareStatusEnum[(DeviceFirmwareStatusEnum["DuringUpgrade"] = 4)] =
    "DuringUpgrade"
})(DeviceFirmwareStatusEnum || (DeviceFirmwareStatusEnum = {}))
export const DeviceFirmwareStatus = {
  [DeviceFirmwareStatusEnum.None]: "",
  [DeviceFirmwareStatusEnum.ToUpgraded]: "待升级",
  [DeviceFirmwareStatusEnum.ConsistencyUpgrade]: "一致性升级",
  [DeviceFirmwareStatusEnum.DuringUpgrade]: "升级中"
}
export const DeviceFirmwareStatusColor = {
  [DeviceFirmwareStatusEnum.None]: commonColor.WHITE,
  [DeviceFirmwareStatusEnum.ToUpgraded]: commonColor.BLUE,
  [DeviceFirmwareStatusEnum.ConsistencyUpgrade]: commonColor.WARN,
  [DeviceFirmwareStatusEnum.DuringUpgrade]: commonColor.NORMAL
}
export let NetworkStateTypeEnum
;(function(NetworkStateTypeEnum) {
  NetworkStateTypeEnum[(NetworkStateTypeEnum["FOUR_G"] = 1)] = "FOUR_G"
  NetworkStateTypeEnum[(NetworkStateTypeEnum["ETHERNET"] = 2)] = "ETHERNET"
})(NetworkStateTypeEnum || (NetworkStateTypeEnum = {}))
export let NetworkStateQualityEnum
;(function(NetworkStateQualityEnum) {
  NetworkStateQualityEnum[(NetworkStateQualityEnum["BAD"] = 0)] = "BAD"
  NetworkStateQualityEnum[(NetworkStateQualityEnum["MEDIUM"] = 1)] = "MEDIUM"
  NetworkStateQualityEnum[(NetworkStateQualityEnum["GOOD"] = 2)] = "GOOD"
})(NetworkStateQualityEnum || (NetworkStateQualityEnum = {}))
export let RainfallEnum
;(function(RainfallEnum) {
  RainfallEnum[(RainfallEnum["正常"] = 0)] = "正常"
  RainfallEnum[(RainfallEnum["小雨"] = 1)] = "小雨"
  RainfallEnum[(RainfallEnum["中雨"] = 2)] = "中雨"
  RainfallEnum[(RainfallEnum["大雨"] = 3)] = "大雨"
})(RainfallEnum || (RainfallEnum = {}))
export let DroneInDockEnum
;(function(DroneInDockEnum) {
  DroneInDockEnum[(DroneInDockEnum["舱外"] = 0)] = "舱外"
  DroneInDockEnum[(DroneInDockEnum["舱内"] = 1)] = "舱内"
})(DroneInDockEnum || (DroneInDockEnum = {}))
export let DrcStateEnum
;(function(DrcStateEnum) {
  DrcStateEnum[(DrcStateEnum["DISCONNECT"] = 0)] = "DISCONNECT"
  DrcStateEnum[(DrcStateEnum["CONNECTING"] = 1)] = "CONNECTING"
  DrcStateEnum[(DrcStateEnum["CONNECTED"] = 2)] = "CONNECTED"
})(DrcStateEnum || (DrcStateEnum = {}))
export let EModeText
;(function(EModeText) {
  EModeText[(EModeText["待机"] = 0)] = "待机"
  EModeText[(EModeText["起飞准备"] = 1)] = "起飞准备"
  EModeText[(EModeText["起飞准备完毕"] = 2)] = "起飞准备完毕"
  EModeText[(EModeText["手动飞行"] = 3)] = "手动飞行"
  EModeText[(EModeText["自动起飞"] = 4)] = "自动起飞"
  EModeText[(EModeText["航线飞行"] = 5)] = "航线飞行"
  EModeText[(EModeText["全景拍照"] = 6)] = "全景拍照"
  EModeText[(EModeText["智能跟随"] = 7)] = "智能跟随"
  EModeText[(EModeText["ADS-B躲避"] = 8)] = "ADS-B躲避"
  EModeText[(EModeText["自动返航"] = 9)] = "自动返航"
  EModeText[(EModeText["自动降落"] = 10)] = "自动降落"
  EModeText[(EModeText["强制降落"] = 11)] = "强制降落"
  EModeText[(EModeText["三桨叶降落"] = 12)] = "三桨叶降落"
  EModeText[(EModeText["升级中"] = 13)] = "升级中"
  EModeText[(EModeText["未连接"] = 14)] = "未连接"
  EModeText[(EModeText["APAS"] = 15)] = "APAS"
  EModeText[(EModeText["虚拟摇杆状态"] = 16)] = "虚拟摇杆状态"
  EModeText[(EModeText["指令飞行"] = 17)] = "指令飞行"
})(EModeText || (EModeText = {}))
export let EModeCode
;(function(EModeCode) {
  EModeCode[(EModeCode["Standby"] = 0)] = "Standby"
  EModeCode[(EModeCode["Preparing"] = 1)] = "Preparing"
  EModeCode[(EModeCode["Ready"] = 2)] = "Ready"
  EModeCode[(EModeCode["Manual"] = 3)] = "Manual"
  EModeCode[(EModeCode["Automatic"] = 4)] = "Automatic"
  EModeCode[(EModeCode["Waypoint"] = 5)] = "Waypoint"
  EModeCode[(EModeCode["Panoramic"] = 6)] = "Panoramic"
  EModeCode[(EModeCode["Active_Track"] = 7)] = "Active_Track"
  EModeCode[(EModeCode["ADS_B"] = 8)] = "ADS_B"
  EModeCode[(EModeCode["Return_To_Home"] = 9)] = "Return_To_Home"
  EModeCode[(EModeCode["Landing"] = 10)] = "Landing"
  EModeCode[(EModeCode["Forced_Landing"] = 11)] = "Forced_Landing"
  EModeCode[(EModeCode["Three_Blades_Landing"] = 12)] = "Three_Blades_Landing"
  EModeCode[(EModeCode["Upgrading"] = 13)] = "Upgrading"
  EModeCode[(EModeCode["Disconnected"] = 14)] = "Disconnected"
})(EModeCode || (EModeCode = {}))
export let EGear
;(function(EGear) {
  EGear[(EGear["A"] = 0)] = "A"
  EGear[(EGear["P"] = 1)] = "P"
  EGear[(EGear["NAV"] = 2)] = "NAV"
  EGear[(EGear["FPV"] = 3)] = "FPV"
  EGear[(EGear["FARM"] = 4)] = "FARM"
  EGear[(EGear["S"] = 5)] = "S"
  EGear[(EGear["F"] = 6)] = "F"
  EGear[(EGear["M"] = 7)] = "M"
  EGear[(EGear["G"] = 8)] = "G"
  EGear[(EGear["T"] = 9)] = "T"
})(EGear || (EGear = {}))
export let EDeviceType
;(function(EDeviceType) {
  EDeviceType[(EDeviceType["M30"] = "0-67-0")] = "M30"
  EDeviceType[(EDeviceType["M30T"] = "0-67-1")] = "M30T"
  EDeviceType[(EDeviceType["M300"] = "0-60-0")] = "M300"
  EDeviceType[(EDeviceType["M350"] = DEVICE_MODEL_KEY.M350)] = "M350"
  EDeviceType[(EDeviceType["Z30"] = "1-20-0")] = "Z30"
  EDeviceType[(EDeviceType["XT2"] = "1-26-0")] = "XT2"
  EDeviceType[(EDeviceType["FPV"] = "1-39-0")] = "FPV"
  EDeviceType[(EDeviceType["XTS"] = "1-41-0")] = "XTS"
  EDeviceType[(EDeviceType["H20"] = "1-42-0")] = "H20"
  EDeviceType[(EDeviceType["H20T"] = "1-43-0")] = "H20T"
  EDeviceType[(EDeviceType["P1"] = "1-50-65535")] = "P1"
  EDeviceType[(EDeviceType["M30_Camera"] = "1-52-0")] = "M30_Camera"
  EDeviceType[(EDeviceType["M30T_Camera"] = "1-53-0")] = "M30T_Camera"
  EDeviceType[(EDeviceType["H20N"] = "1-61-0")] = "H20N"
  EDeviceType[(EDeviceType["DJI_Dock_Camera"] = "1-165-0")] = "DJI_Dock_Camera"
  EDeviceType[(EDeviceType["L1"] = "1-90742-0")] = "L1"
  EDeviceType[(EDeviceType["M3E"] = "0-77-0")] = "M3E"
  EDeviceType[(EDeviceType["M3D"] = "0-77-1")] = "M3D"
  EDeviceType[(EDeviceType["M3E_Camera"] = "1-66-0")] = "M3E_Camera"
  EDeviceType[(EDeviceType["M3T_Camera"] = "1-67-0")] = "M3T_Camera"
})(EDeviceType || (EDeviceType = {}))
export let EDockModeText
;(function(EDockModeText) {
  EDockModeText[(EDockModeText["已断开连接"] = -1)] = "已断开连接"
  EDockModeText[(EDockModeText["设备空闲中"] = 0)] = "设备空闲中"
  EDockModeText[(EDockModeText["现场调试"] = 1)] = "现场调试"
  EDockModeText[(EDockModeText["远程调试"] = 2)] = "远程调试"
  EDockModeText[(EDockModeText["固件升级中"] = 3)] = "固件升级中"
  EDockModeText[(EDockModeText["设备工作中"] = 4)] = "设备工作中"
})(EDockModeText || (EDockModeText = {}))
export let EDockModeCode
;(function(EDockModeCode) {
  EDockModeCode[(EDockModeCode["Disconnected"] = -1)] = "Disconnected"
  EDockModeCode[(EDockModeCode["Idle"] = 0)] = "Idle"
  EDockModeCode[(EDockModeCode["Debugging"] = 1)] = "Debugging"
  EDockModeCode[(EDockModeCode["Remote_Debugging"] = 2)] = "Remote_Debugging"
  EDockModeCode[(EDockModeCode["Upgrading"] = 3)] = "Upgrading"
  EDockModeCode[(EDockModeCode["Working"] = 4)] = "Working"
})(EDockModeCode || (EDockModeCode = {}))
src/types/enums.js
New file
@@ -0,0 +1,178 @@
export let ERouterName;
(function (ERouterName) {
  ERouterName['ELEMENT'] = 'element';
  ERouterName['LOGIN'] = 'login';
  ERouterName['PROJECT'] = 'project';
  ERouterName['ADD_PROJECT'] = 'add_project';
  ERouterName['EDIT_PROJECT'] = 'edit_project';
  ERouterName['PROJECT_LIST'] = 'project_list';
  ERouterName['HOME'] = 'home';
  ERouterName['TSA'] = 'tsa';
  ERouterName['LAYER'] = 'layer';
  ERouterName['MEDIA'] = 'media';
  ERouterName['WAYLINE'] = 'wayline';
  ERouterName['LIVESTREAM'] = 'livestream';
  ERouterName['LIVING'] = 'living';
  ERouterName['WORKSPACE'] = 'workspace';
  ERouterName['MEMBERS'] = 'members';
  ERouterName['DEVICES'] = 'devices';
  ERouterName['TASK'] = 'task';
  ERouterName['CREATE_PLAN'] = 'create-plan';
  ERouterName['SELECT_PLAN'] = 'select-plan';
  ERouterName['FIRMWARES'] = 'firmwares';
  ERouterName['PILOT'] = 'pilot-login';
  ERouterName['PILOT_HOME'] = 'pilot-home';
  ERouterName['PILOT_MEDIA'] = 'pilot-media';
  ERouterName['PILOT_LIVESHARE'] = 'pilot-liveshare';
  ERouterName['PILOT_BIND'] = 'pilot-bind';
  ERouterName['IMPLEMENT'] = 'implement';
  ERouterName['ROUTE_HISTORY'] = 'route-history';
})(ERouterName || (ERouterName = {}));
export let EStorageKey;
(function (EStorageKey) {
  EStorageKey['LANG_CODE'] = 'DJI_CREATE_VITE_H5_APP:lang_code';
  EStorageKey['TEST_TOOLS_POSITION_STORAGE_KEY'] = 'DJI_CREATE_VITE_H5_APP:test_tools_position';
  EStorageKey['SESSION_ID'] = 'DJI_CREATE_VITE_H5_APP:sess';
})(EStorageKey || (EStorageKey = {}));
export let EStatusValue;
(function (EStatusValue) {
  EStatusValue['CONNECTED'] = 'Connected';
  EStatusValue['DISCONNECT'] = 'Disconnect';
  EStatusValue['LIVING'] = 'Living';
})(EStatusValue || (EStatusValue = {}));
export let ELiveStatusValue;
(function (ELiveStatusValue) {
  ELiveStatusValue[(ELiveStatusValue['DISCONNECT'] = 0)] = 'DISCONNECT';
  ELiveStatusValue[(ELiveStatusValue['CONNECTED'] = 1)] = 'CONNECTED';
  ELiveStatusValue[(ELiveStatusValue['LIVING'] = 2)] = 'LIVING';
})(ELiveStatusValue || (ELiveStatusValue = {}));
export let EComponentName;
(function (EComponentName) {
  EComponentName['Thing'] = 'thing';
  EComponentName['Liveshare'] = 'liveshare';
  EComponentName['Api'] = 'api';
  EComponentName['Ws'] = 'ws';
  EComponentName['Map'] = 'map';
  EComponentName['Tsa'] = 'tsa';
  EComponentName['Media'] = 'media';
  EComponentName['Mission'] = 'mission';
})(EComponentName || (EComponentName = {}));
export let ELocalStorageKey;
(function (ELocalStorageKey) {
  ELocalStorageKey['Username'] = 'username';
  ELocalStorageKey['WorkspaceId'] = 'workspace_id';
  ELocalStorageKey['Token'] = 'x-auth-token';
  ELocalStorageKey['PlatformName'] = 'platform_name';
  ELocalStorageKey['WorkspaceName'] = 'workspace_name';
  ELocalStorageKey['WorkspaceDesc'] = 'workspace_desc';
  ELocalStorageKey['Flag'] = 'flag';
  ELocalStorageKey['UserId'] = 'user_id';
  ELocalStorageKey['Device'] = 'device';
  ELocalStorageKey['GatewayOnline'] = 'gateway_online';
  ELocalStorageKey['UserInfo'] = 'user_info';
})(ELocalStorageKey || (ELocalStorageKey = {}));
export let EPhotoType;
(function (EPhotoType) {
  EPhotoType[(EPhotoType['Original'] = 0)] = 'Original';
  EPhotoType[(EPhotoType['Preview'] = 1)] = 'Preview';
  EPhotoType[(EPhotoType['Unknown'] = -1)] = 'Unknown';
})(EPhotoType || (EPhotoType = {}));
export let EDownloadOwner;
(function (EDownloadOwner) {
  EDownloadOwner[(EDownloadOwner['Mine'] = 0)] = 'Mine';
  EDownloadOwner[(EDownloadOwner['Others'] = 1)] = 'Others';
  EDownloadOwner[(EDownloadOwner['Unknown'] = -1)] = 'Unknown';
})(EDownloadOwner || (EDownloadOwner = {}));
export let EUserType;
(function (EUserType) {
  EUserType[(EUserType['Web'] = 1)] = 'Web';
  EUserType[(EUserType['Pilot'] = 2)] = 'Pilot';
})(EUserType || (EUserType = {}));
export let EBizCode;
(function (EBizCode) {
  EBizCode['GatewayOsd'] = 'gateway_osd';
  EBizCode['DeviceOsd'] = 'device_osd';
  EBizCode['DockOsd'] = 'dock_osd';
  EBizCode['MapElementCreate'] = 'map_element_create';
  EBizCode['MapElementUpdate'] = 'map_element_update';
  EBizCode['MapElementDelete'] = 'map_element_delete';
  EBizCode['DeviceOnline'] = 'device_online';
  EBizCode['DeviceOffline'] = 'device_offline';
  EBizCode['DeviceHms'] = 'device_hms';
  EBizCode['FlightTaskProgress'] = 'flighttask_progress';
  EBizCode['FlightTaskMediaProgress'] = 'file_upload_callback';
  EBizCode['FlightTaskMediaHighestPriority'] = 'highest_priority_upload_flighttask_media';
  EBizCode['DeviceReboot'] = 'device_reboot';
  EBizCode['DroneOpen'] = 'drone_open';
  EBizCode['DroneClose'] = 'drone_close';
  EBizCode['DeviceFormat'] = 'device_format';
  EBizCode['DroneFormat'] = 'drone_format';
  EBizCode['CoverOpen'] = 'cover_open';
  EBizCode['CoverClose'] = 'cover_close';
  EBizCode['PutterOpen'] = 'putter_open';
  EBizCode['PutterClose'] = 'putter_close';
  EBizCode['ChargeOpen'] = 'charge_open';
  EBizCode['ChargeClose'] = 'charge_close';
  EBizCode['DeviceUpgrade'] = 'ota_progress';
  EBizCode['DeviceLogUploadProgress'] = 'fileupload_progress';
  EBizCode['ControlSourceChange'] = 'control_source_change';
  EBizCode['FlyToPointProgress'] = 'fly_to_point_progress';
  EBizCode['TakeoffToPointProgress'] = 'takeoff_to_point_progress';
  EBizCode['JoystickInvalidNotify'] = 'joystick_invalid_notify';
  EBizCode['DrcStatusNotify'] = 'drc_status_notify';
})(EBizCode || (EBizCode = {}));
export const EBizCodeMessage = {
  [EBizCode.DeviceOnline]: '设备在线',
  [EBizCode.DeviceOffline]: '设备离线',
  [EBizCode.DeviceOsd]: '设备osd',
  [EBizCode.GatewayOsd]: '网关osd',
  [EBizCode.DockOsd]: '机场osd',
  [EBizCode.MapElementCreate]: '地图元素创建',
  [EBizCode.MapElementUpdate]: '地图元素更新',
  [EBizCode.MapElementDelete]: '地图元素删除',
  [EBizCode.FlightTaskProgress]: '机场任务执行进度',
  [EBizCode.DeviceHms]: '设备hms',
  [EBizCode.DeviceReboot]: '设备重启',
  [EBizCode.DroneOpen]: '机场打开',
  [EBizCode.DroneClose]: '机场关闭',
  [EBizCode.PutterOpen]: '推杆展开',
  [EBizCode.PutterClose]: '推杆闭合',
  [EBizCode.ChargeOpen]: '打开充电',
  [EBizCode.ChargeClose]: '关闭充电',
  [EBizCode.ControlSourceChange]: '控制权更新',
  [EBizCode.FlyToPointProgress]: '飞向目标点',
  [EBizCode.TakeoffToPointProgress]: '一键起飞',
  [EBizCode.DrcStatusNotify]: '飞行控制模式状态',
  [EBizCode.JoystickInvalidNotify]: '设备端退出drc模式',
};
export let EDeviceTypeName;
(function (EDeviceTypeName) {
  EDeviceTypeName[(EDeviceTypeName['Aircraft'] = 0)] = 'Aircraft';
  EDeviceTypeName[(EDeviceTypeName['Gateway'] = 2)] = 'Gateway';
  EDeviceTypeName[(EDeviceTypeName['Dock'] = 3)] = 'Dock';
})(EDeviceTypeName || (EDeviceTypeName = {}));
export let EHmsLevel;
(function (EHmsLevel) {
  EHmsLevel[(EHmsLevel['NOTICE'] = 0)] = 'NOTICE';
  EHmsLevel[(EHmsLevel['CAUTION'] = 1)] = 'CAUTION';
  EHmsLevel[(EHmsLevel['WARN'] = 2)] = 'WARN';
})(EHmsLevel || (EHmsLevel = {}));
src/types/index.js
New file
@@ -0,0 +1 @@
export * from './enums'
src/utils/color.js
New file
@@ -0,0 +1,8 @@
export const commonColor = {
  WARN: '#FF9900', // 黄色
  FAIL: '#E02020', // 红色
  WHITE: '#FFFFFF', // 白色
  NORMAL: '#19BE6B', // 绿色
  BLUE: '#2B85E4', // 蓝色
  PINK: '#F7C0BA', // 粉
};
src/utils/constants.js
New file
@@ -0,0 +1,14 @@
export const DEFAULT_PLACEHOLDER = '--'; // 默认占位符
// 全局日期格式
export const DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';
export const DATE_FORMAT_MINUTE = 'YYYY-MM-DD HH:mm';
export const DATE_FORMAT_DAY = 'YYYY-MM-DD';
export const TIME_FORMAT = 'HH:mm:ss';
export const TIME_FORMAT_MINUTE = 'HH:mm';
export const DATE_FORMAT_MM = 'MM-DD HH:mm';
export const SIZES = ['B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
export const BYTE_SIZES = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
export const PAGE_SIZE_OPTIONS = ['20', '50', '100'];
export const PAGE_SIZE = 50;
src/utils/device-cmd.js
New file
@@ -0,0 +1,577 @@
import { DeviceCmd, DeviceCmdStatusText } from '@/types/device-cmd';
import {
  CoverStateEnum,
  PutterStateEnum,
  SupplementLightStateEnum,
  AlarmModeEnum,
  BatteryStoreModeEnum,
  DroneBatteryStateEnum,
  LinkWorkModeEnum,
} from '@/types/airport-tsa';
import { DEFAULT_PLACEHOLDER } from './constants';
/**
 * 根据osd 更新信息
 * @param cmdList
 * @param deviceInfo
 * @returns
 */
export function updateDeviceCmdInfoByOsd(cmdList, deviceInfo) {
  const { device, dock, gateway } = deviceInfo || {};
  if (!cmdList || cmdList.length < 1) {
    return;
  }
  cmdList.forEach(cmdItem => {
    if (cmdItem.loading) {
      return;
    }
    if (cmdItem.cmdKey === DeviceCmd.DeviceReboot) {
      // 重启
      // console.log('DeviceReboot')
    } else if (cmdItem.cmdKey === DeviceCmd.DroneOpen || cmdItem.cmdKey === DeviceCmd.DroneClose) {
      // 飞行器开关机
      getDroneState(cmdItem, device);
    } else if (cmdItem.cmdKey === DeviceCmd.CoverOpen || cmdItem.cmdKey === DeviceCmd.CoverClose) {
      // 舱盖开关
      getCoverState(cmdItem, dock);
    } else if (
      cmdItem.cmdKey === DeviceCmd.PutterOpen ||
      cmdItem.cmdKey === DeviceCmd.PutterClose
    ) {
      // 推杆闭合展开
      getPutterState(cmdItem, dock);
    } else if (
      cmdItem.cmdKey === DeviceCmd.ChargeOpen ||
      cmdItem.cmdKey === DeviceCmd.ChargeClose
    ) {
      // 充电状态
      getChargeState(cmdItem, dock);
    } else if (cmdItem.cmdKey === DeviceCmd.DeviceFormat) {
      // 机场存储
      deviceFormat(cmdItem, dock);
    } else if (cmdItem.cmdKey === DeviceCmd.DroneFormat) {
      // 飞行器存储
      droneFormat(cmdItem, device);
    } else if (
      cmdItem.cmdKey === DeviceCmd.SupplementLightOpen ||
      cmdItem.cmdKey === DeviceCmd.SupplementLightClose
    ) {
      // 补光灯开关
      getSupplementLightState(cmdItem, dock);
    } else if (cmdItem.cmdKey === DeviceCmd.AlarmStateSwitch) {
      // 声光报警
      getAlarmState(cmdItem, dock);
    } else if (cmdItem.cmdKey === DeviceCmd.BatteryStoreModeSwitch) {
      // 电池保养
      getBatteryStoreMode(cmdItem, dock);
    } else if (cmdItem.cmdKey === DeviceCmd.DroneBatteryModeSwitch) {
      // 飞行器电池保养
      getDroneBatteryMode(cmdItem, dock);
    } else if (cmdItem.cmdKey === DeviceCmd.SdrWorkModeSwitch) {
      // 增强图传开关
      getSdrWorkNode(cmdItem, dock);
    }
  });
}
// 推杆状态
function getPutterState(cmdItem, airportProperties) {
  const putterState = airportProperties?.basic_osd?.putter_state;
  if (putterState === PutterStateEnum.Close || putterState === PutterStateEnum.Failed) {
    cmdItem.status = DeviceCmdStatusText.DevicePutterCloseNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DevicePutterCloseBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.PutterOpen) {
      exchangeDeviceCmd(cmdItem);
    }
  } else if (putterState === PutterStateEnum.Open || putterState === PutterStateEnum.HalfOpen) {
    cmdItem.status = DeviceCmdStatusText.DevicePutterOpenNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DevicePutterOpenBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.PutterClose) {
      exchangeDeviceCmd(cmdItem);
    }
  }
}
// 飞行器开关机
function getDroneState(cmdItem, droneProperties) {
  if (!droneProperties) {
    cmdItem.status = DeviceCmdStatusText.DroneStatusCloseNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DroneStatusCloseBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.DroneOpen) {
      exchangeDeviceCmd(cmdItem);
    }
  } else {
    cmdItem.status = DeviceCmdStatusText.DroneStatusOpenNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DroneStatusOpenBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.DroneClose) {
      exchangeDeviceCmd(cmdItem);
    }
  }
}
// 舱盖开关
function getCoverState(cmdItem, airportProperties) {
  const coverState = airportProperties?.basic_osd?.cover_state;
  if (coverState === CoverStateEnum.Close || coverState === CoverStateEnum.Failed) {
    cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DeviceCoverCloseBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.CoverOpen) {
      exchangeDeviceCmd(cmdItem);
    }
  } else if (coverState === CoverStateEnum.Open || coverState === CoverStateEnum.HalfOpen) {
    cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DeviceCoverOpenBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.CoverClose) {
      exchangeDeviceCmd(cmdItem);
    }
  }
}
// 充电状态
function getChargeState(cmdItem, airportProperties) {
  const chargeState = airportProperties?.basic_osd?.drone_charge_state;
  const state = chargeState?.state;
  if (!state) return;
  if (state === ChargeStateEnum.Charge) {
    cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DeviceChargeOpenBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.ChargeClose) {
      exchangeDeviceCmd(cmdItem);
    }
  } else if (state === ChargeStateEnum.NotCharge) {
    cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseNormalText;
    cmdItem.operateText = DeviceCmdStatusText.DeviceChargeCloseBtnText;
    if (cmdItem.cmdKey !== DeviceCmd.ChargeOpen) {
      exchangeDeviceCmd(cmdItem);
    }
  }
}
// 机场存储格式化
function deviceFormat(cmdItem, airportProperties) {
  const airportStorage = airportProperties?.basic_osd?.storage;
  const value = getAirportStorage(airportStorage);
  cmdItem.status = value;
}
// 机场存储格式化
function droneFormat(cmdItem, droneProperties) {
  const droneStorage = droneProperties?.storage;
  const value = getAirportStorage(droneStorage);
  cmdItem.status = value;
}
// 获取机场存储容量
// {
// "total": 10000, // 单位:KB
// "used": 500
// }
export function getAirportStorage(storage) {
  if (!storage) {
    return DEFAULT_PLACEHOLDER;
  }
  const total = storage.total;
  const used = storage.used;
  const byteObj = getBytesObject(total * 1024);
  const _total = byteObj.value;
  const _used = getBytes(used * 1024, byteObj.index);
  return `${_used}/${_total} ${byteObj.size}`;
}
//  获取转化后数据及单位
export function getBytesObject(bytes, holder = DEFAULT_PLACEHOLDER, fix = 1) {
  if (isNaN(bytes) || bytes === 0) {
    return {
      value: holder,
      size: '',
      index: -1,
    };
  }
  // 兼容负数
  let prefix = '';
  if (bytes < 0) {
    bytes = 0 - bytes;
    prefix = '-';
  }
  const k = 1024;
  const sizes = byteSizes; // ['B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']
  const i = Math.floor(Math.log(bytes) / Math.log(k));
  return {
    value: prefix + (bytes / Math.pow(k, i)).toFixed(fix),
    size: sizes[i],
    index: i,
  };
}
function getBytes(bytes, index, fixed = 1) {
  return (bytes / Math.pow(1024, index)).toFixed(fixed);
}
// 补光灯状态
function getSupplementLightState(cmdItem, airportProperties) {
  const supplementLightState = airportProperties?.basic_osd?.supplement_light_state;
  if (supplementLightState === SupplementLightStateEnum.Close) {
    cmdItem.operateText = DeviceCmdStatusText.DeviceSupplementLightCloseBtnText;
    cmdItem.status = DeviceCmdStatusText.DeviceSupplementLightCloseNormalText;
    if (cmdItem.cmdKey !== DeviceCmd.SupplementLightOpen) {
      exchangeDeviceCmd(cmdItem);
    }
  } else if (supplementLightState === SupplementLightStateEnum.Open) {
    cmdItem.operateText = DeviceCmdStatusText.DeviceSupplementLightOpenBtnText;
    cmdItem.status = DeviceCmdStatusText.DeviceSupplementLightOpenNormalText;
    if (cmdItem.cmdKey !== DeviceCmd.SupplementLightClose) {
      exchangeDeviceCmd(cmdItem);
    }
  }
}
// 声光报警
function getAlarmState(cmdItem, airportProperties) {
  const alarmState = airportProperties?.basic_osd?.alarm_state;
  if (alarmState === AlarmModeEnum.CLOSE) {
    cmdItem.operateText = DeviceCmdStatusText.AlarmStateCloseBtnText;
    cmdItem.status = DeviceCmdStatusText.AlarmStateCloseNormalText;
    cmdItem.action = AlarmModeEnum.OPEN;
  } else if (alarmState === AlarmModeEnum.OPEN) {
    cmdItem.operateText = DeviceCmdStatusText.AlarmStateOpenBtnText;
    cmdItem.status = DeviceCmdStatusText.AlarmStateOpenNormalText;
    cmdItem.action = AlarmModeEnum.CLOSE;
  }
}
// 机场电池模式
function getBatteryStoreMode(cmdItem, airportProperties) {
  const batteryStoreMode = airportProperties?.basic_osd?.battery_store_mode;
  if (batteryStoreMode === BatteryStoreModeEnum.BATTERY_PLAN_STORE) {
    cmdItem.operateText = DeviceCmdStatusText.BatteryStoreModePlanBtnText;
    cmdItem.status = DeviceCmdStatusText.BatteryStoreModePlanNormalText;
    cmdItem.action = BatteryStoreModeEnum.BATTERY_EMERGENCY_STORE;
  } else if (batteryStoreMode === BatteryStoreModeEnum.BATTERY_EMERGENCY_STORE) {
    cmdItem.operateText = DeviceCmdStatusText.BatteryStoreModeEmergencyBtnText;
    cmdItem.status = DeviceCmdStatusText.BatteryStoreModeEmergencyNormalText;
    cmdItem.action = BatteryStoreModeEnum.BATTERY_PLAN_STORE;
  }
}
// 飞行器电池保养
function getDroneBatteryMode(cmdItem, airportProperties) {
  const maintenanceState =
    airportProperties?.work_osd?.drone_battery_maintenance_info?.maintenance_state;
  if (maintenanceState === DroneBatteryStateEnum.MaintenanceInProgress) {
    cmdItem.operateText = DeviceCmdStatusText.DroneBatteryModeCloseBtnText;
    cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText;
    cmdItem.action = DroneBatteryModeEnum.CLOSE;
    cmdItem.disabled = false;
  } else if (maintenanceState === DroneBatteryStateEnum.NoMaintenanceRequired) {
    cmdItem.operateText = DeviceCmdStatusText.DroneBatteryModeOpenBtnText;
    cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNotNeedText;
    cmdItem.action = DroneBatteryModeEnum.OPEN;
    cmdItem.disabled = true;
  } else if (maintenanceState === DroneBatteryStateEnum.MaintenanceRequired) {
    cmdItem.operateText = DeviceCmdStatusText.DroneBatteryModeOpenBtnText;
    cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNeedText;
    cmdItem.action = DroneBatteryModeEnum.OPEN;
    cmdItem.disabled = false;
  }
}
// 增强图传开关
function getSdrWorkNode(cmdItem, airportProperties) {
  const linkWorkMode = airportProperties?.link_osd?.wireless_link?.link_workmode;
  if (linkWorkMode === LinkWorkModeEnum.SDR) {
    cmdItem.operateText = DeviceCmdStatusText.SdrWorkModeFourCloseBtnText;
    cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseNormalText;
    cmdItem.action = LinkWorkModeEnum.FourG_FUSION_MODE;
  } else if (linkWorkMode === LinkWorkModeEnum.FourG_FUSION_MODE) {
    cmdItem.operateText = DeviceCmdStatusText.SdrWorkModeFourGOpenBtnText;
    cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenNormalText;
    cmdItem.action = LinkWorkModeEnum.SDR;
  }
}
/**
 * 根据指令执行消息更新信息
 * @param cmd
 * @param deviceCmdExecuteInfo
 * @returns
 */
export function updateDeviceCmdInfoByExecuteInfo(cmdList, deviceCmdExecuteInfos) {
  if (!deviceCmdExecuteInfos || !cmdList) {
    return;
  }
  cmdList.forEach(cmdItem => {
    // 获取当前设备相应指令信息
    const deviceCmdExecuteInfo = deviceCmdExecuteInfos.find(
      cmdExecuteInfo => cmdExecuteInfo.biz_code === cmdItem.cmdKey
    );
    if (deviceCmdExecuteInfo) {
      if (cmdItem.cmdKey === DeviceCmd.DeviceReboot) {
        // 重启
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DeviceRebootInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DeviceRebootFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DeviceRebootNormalText;
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.DroneOpen) {
        // 飞行器开关机
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DroneStatusOpenInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DroneStatusOpenFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DroneStatusOpenNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DroneStatusOpenBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.DroneClose) {
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DroneStatusCloseInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DroneStatusCloseFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DroneStatusCloseNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DroneStatusCloseBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.CoverOpen) {
        // 舱盖开关
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DeviceCoverOpenBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.CoverClose) {
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DeviceCoverCloseBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.PutterOpen) {
        // 推杆闭合展开
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DevicePutterOpenInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DevicePutterOpenFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DevicePutterOpenNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DevicePutterOpenBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.PutterClose) {
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DevicePutterCloseInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DevicePutterCloseFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DevicePutterCloseNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DevicePutterCloseBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.ChargeOpen) {
        // 充电状态
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DeviceChargeOpenBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.ChargeClose) {
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseNormalText;
          cmdItem.operateText = DeviceCmdStatusText.DeviceChargeCloseBtnText;
          exchangeDeviceCmd(cmdItem);
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.DeviceFormat) {
        // 机场存储
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DeviceFormatInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DeviceFormatFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.DroneFormat) {
        // 飞行器存储
        if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
          cmdItem.status = DeviceCmdStatusText.DroneFormatInProgressText;
          cmdItem.loading = true;
        } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
          cmdItem.status = DeviceCmdStatusText.DroneFormatFailedText;
          cmdItem.loading = false;
        } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
          cmdItem.loading = false;
        }
      } else if (cmdItem.cmdKey === DeviceCmd.AlarmStateSwitch) {
        // 机场声光报警
        if (cmdItem.action === AlarmModeEnum.CLOSE) {
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.AlarmStateCloseText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.AlarmStateCloseFailedText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.loading = false;
          }
        } else if (cmdItem.action === AlarmModeEnum.OPEN) {
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.AlarmStateOpenText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.AlarmStateOpenFailedText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.loading = false;
          }
        }
      } else if (cmdItem.cmdKey === DeviceCmd.BatteryStoreModeSwitch) {
        // 电池保养
        if (cmdItem.action === BatteryStoreModeEnum.BATTERY_PLAN_STORE) {
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.BatteryStoreModePlanText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.BatteryStoreModePlanFailedText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.loading = false;
          }
        } else if (cmdItem.action === BatteryStoreModeEnum.BATTERY_EMERGENCY_STORE) {
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.BatteryStoreModeEmergencyText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.BatteryStoreModeEmergencyFailedText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.loading = false;
          }
        }
      } else if (cmdItem.cmdKey === DeviceCmd.DroneBatteryModeSwitch) {
        // 飞行器电池保养
        if (cmdItem.action === DroneBatteryModeEnum.OPEN) {
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNeedText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNotNeedText;
            cmdItem.loading = false;
          }
        } else if (cmdItem.action === DroneBatteryModeEnum.CLOSE) {
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNeedText;
            cmdItem.loading = false;
          }
        }
      } else if (cmdItem.cmdKey === DeviceCmd.SdrWorkModeSwitch) {
        // 增强图传
        if (cmdItem.action === LinkWorkModeEnum.SDR) {
          // 关闭
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseFailedText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseNormalText;
            cmdItem.loading = false;
          }
        } else if (cmdItem.action === LinkWorkModeEnum.FourG_FUSION_MODE) {
          // 开启
          if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
            cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenText;
            cmdItem.loading = true;
          } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
            cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenFailedText;
            cmdItem.loading = false;
          } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
            cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenNormalText;
            cmdItem.loading = false;
          }
        }
      }
    }
  });
}
/**
 * 交换指令
 * @param cmd
 */
function exchangeDeviceCmd(cmdItem) {
  if (cmdItem.oppositeCmdKey) {
    const oppositeCmdKey = cmdItem.oppositeCmdKey;
    cmdItem.oppositeCmdKey = cmdItem.cmdKey;
    cmdItem.cmdKey = oppositeCmdKey;
  }
}
/**
 * 判断是否执行失败
 * @param status
 * @returns
 */
function isExecuteFailed(status) {
  return [
    DeviceCmdExecuteStatus.Canceled,
    DeviceCmdExecuteStatus.Failed,
    DeviceCmdExecuteStatus.Timeout,
  ].includes(status);
}
src/views/device/airport.vue
@@ -106,12 +106,22 @@
          type="primary"
          text
          icon="el-icon-share"
          v-if="permission.per_share && scope.row.domain==3"
          v-if="permission.per_share && scope.row.domain == 3"
          @click.stop="handleOpenDevicePerShare(scope.row, scope.index)"
          >机场授权
        </el-button>
        <!-- <el-button
          type="primary"
          text
          icon="el-icon-share"
          v-if="permission.per_share && scope.row.domain == 3"
          @click.stop="handleOpenRemoteDebugging(scope.row, scope.index)"
          >远程调试
        </el-button> -->
      </template>
    </avue-crud>
    <el-dialog title="固件升级" append-to-body v-model="firmwareBox" width="455px">
      <div>升级固件版本:{{ firmwareVersion }}</div>
      <template #footer>
@@ -121,6 +131,7 @@
        </span>
      </template>
    </el-dialog>
    <el-drawer
      title="机场授权管理"
      size="60%"
@@ -129,6 +140,15 @@
      :direction="'rtl'"
    >
      <DevicePerShare ref="devicePerShare" />
    </el-drawer>
    <el-drawer title="远程调试" append-to-body v-model="remoteDebuggingShow" size="40%">
      <DockControlPanel
        v-if="remoteDebuggingShow"
        :sn="curDeviceInfo.device_sn"
        :deviceInfo="curDeviceInfo"
      >
      </DockControlPanel>
    </el-drawer>
  </basic-container>
</template>
@@ -149,15 +169,21 @@
import { mapGetters } from 'vuex';
import FirmwareManage from './components/firmwareManage.vue';
import DevicePerShare from './components/devicePerShare.vue';
import DockControlPanel from './components/DockControlPanel.vue';
export default {
  components: {
    FirmwareManage,
    DevicePerShare
    DevicePerShare,
    DockControlPanel,
  },
  data() {
    return {
      devicePerShareVisible: false,
      firmwareManageVisible:false,
      remoteDebuggingShow: false,
      curDeviceInfo: {},
      firmwareManageVisible: false,
      percentageNum: 0,
      firmwareBox: false,
      firmwareInfo: {},
@@ -533,6 +559,12 @@
        that.$refs.devicePerShare.init(row);
      });
    },
    handleOpenRemoteDebugging(row) {
      this.curDeviceInfo = row;
      this.remoteDebuggingShow = true;
    },
    // 打开固件管理页面
    handleOpenFirmwarm(row) {
      var that = this;
src/views/device/components/DeviceSettingBox.vue
New file
@@ -0,0 +1,425 @@
<template>
  <div class="device-setting-wrapper">
    <!-- <div class="device-setting-header">设备属性设置</div> -->
    <!-- 设备状态 -->
    <!-- <div class="device-state-box flex-display flex-justify-between flex-wrap flex-align-center">
      <div class="device-state-item flex-common flex-direction-column">
        <div class="state-item-value">29</div>
        <div class="state-item-label">机场搜星</div>
      </div>
      <div class="device-state-item flex-common flex-direction-column">
        <div class="state-item-value">已指定</div>
        <div class="state-item-label">指定状态</div>
      </div>
      <div class="device-state-item flex-common flex-direction-column">
        <div class="state-item-value">0.0/78.2 GB</div>
        <div class="state-item-label">机场存储</div>
      </div>
      <div class="device-state-item flex-common flex-direction-column">
        <div class="state-item-value">--/-- GB</div>
        <div class="state-item-label">飞行器存储</div>
      </div>
      <div class="device-state-item flex-common flex-direction-column">
        <div class="state-item-value">24.8°C</div>
        <div class="state-item-label">舱内温度</div>
      </div>
      <div class="device-state-item flex-common flex-direction-column">
        <div class="state-item-value">99%</div>
        <div class="state-item-label">舱内湿度</div>
      </div>
      <div class="device-state-item flex-common flex-direction-column">
        <div class="state-item-value">空闲中</div>
        <div class="state-item-label">空调状态</div>
      </div>
    </div> -->
    <div class="device-setting-box">
      <!-- 飞行器夜航灯 -->
      <div class="control-setting-item">
        <div class="control-setting-item-left">
          <div class="item-label">
            {{ deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].label }}
          </div>
          <div class="item-status">
            {{ deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].value }}
          </div>
        </div>
        <div class="control-setting-item-right">
          <DeviceSettingPopover
            :visible="deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].popConfirm.visible"
            :loading="deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].popConfirm.loading"
            @confirm="
              onConfirm(deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].settingKey)
            "
            @cancel="onCancel(deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].settingKey)"
          >
            <template #formContent>
              <div class="form-content">
                <span class="form-label"
                  >{{ deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].label }}:</span
                >
                <a-switch
                  checked-children="开"
                  un-checked-children="关"
                  v-model:checked="deviceSettingFormModel.nightLightsState"
                />
              </div>
            </template>
            <a
              @click="
                onShowPopConfirm(
                  deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].settingKey
                )
              "
              >编辑</a
            >
          </DeviceSettingPopover>
        </div>
      </div>
      <!-- 限高 -->
      <div class="control-setting-item">
        <div class="control-setting-item-left">
          <div class="item-label">
            {{ deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].label }}
          </div>
          <div class="item-status">
            {{ deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].value }}
          </div>
        </div>
        <div class="control-setting-item-right">
          <DeviceSettingPopover
            :visible="deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].popConfirm.visible"
            :loading="deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].popConfirm.loading"
            @confirm="onConfirm(deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].settingKey)"
            @cancel="onCancel(deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].settingKey)"
          >
            <template #formContent>
              <div class="form-content">
                <span class="form-label"
                  >{{ deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].label }}:</span
                >
                <a-input-number
                  v-model:value="deviceSettingFormModel.heightLimit"
                  :min="20"
                  :max="1500"
                />
                m
              </div>
            </template>
            <a
              @click="
                onShowPopConfirm(deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].settingKey)
              "
              >编辑</a
            >
          </DeviceSettingPopover>
        </div>
      </div>
      <!-- 限远 -->
      <div class="control-setting-item">
        <div class="control-setting-item-left">
          <div class="item-label">
            {{ deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].label }}
          </div>
          <div class="item-status">
            {{ deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].value }}
          </div>
        </div>
        <div class="control-setting-item-right">
          <DeviceSettingPopover
            :visible="deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].popConfirm.visible"
            :loading="deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].popConfirm.loading"
            @confirm="onConfirm(deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].settingKey)"
            @cancel="onCancel(deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].settingKey)"
          >
            <template #formContent>
              <div class="form-content">
                <span class="form-label"
                  >{{ deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].label }}:</span
                >
                <a-switch
                  style="margin-right: 10px"
                  checked-children="开"
                  un-checked-children="关"
                  v-model:checked="deviceSettingFormModel.distanceLimitStatus.state"
                />
                <a-input-number
                  v-model:value="deviceSettingFormModel.distanceLimitStatus.distanceLimit"
                  :min="15"
                  :max="8000"
                />
                m
              </div>
            </template>
            <a
              @click="
                onShowPopConfirm(deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].settingKey)
              "
              >编辑</a
            >
          </DeviceSettingPopover>
        </div>
      </div>
      <!-- 水平避障 -->
      <div class="control-setting-item">
        <div class="control-setting-item-left">
          <div class="item-label">
            {{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].label }}
          </div>
          <div class="item-status">
            {{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].value }}
          </div>
        </div>
        <div class="control-setting-item-right">
          <DeviceSettingPopover
            :visible="
              deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].popConfirm.visible
            "
            :loading="
              deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].popConfirm.loading
            "
            @confirm="
              onConfirm(deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].settingKey)
            "
            @cancel="
              onCancel(deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].settingKey)
            "
          >
            <template #formContent>
              <div class="form-content">
                <span class="form-label"
                  >{{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].label }}:</span
                >
                <a-switch
                  checked-children="开"
                  un-checked-children="关"
                  v-model:checked="deviceSettingFormModel.obstacleAvoidanceHorizon"
                />
              </div>
            </template>
            <a
              @click="
                onShowPopConfirm(
                  deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].settingKey
                )
              "
              >编辑</a
            >
          </DeviceSettingPopover>
        </div>
      </div>
      <!-- 上视避障 -->
      <div class="control-setting-item">
        <div class="control-setting-item-left">
          <div class="item-label">
            {{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].label }}
          </div>
          <div class="item-status">
            {{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].value }}
          </div>
        </div>
        <div class="control-setting-item-right">
          <DeviceSettingPopover
            :visible="
              deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].popConfirm.visible
            "
            :loading="
              deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].popConfirm.loading
            "
            @confirm="
              onConfirm(deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].settingKey)
            "
            @cancel="
              onCancel(deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].settingKey)
            "
          >
            <template #formContent>
              <div class="form-content">
                <span class="form-label"
                  >{{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].label }}:</span
                >
                <a-switch
                  checked-children="开"
                  un-checked-children="关"
                  v-model:checked="deviceSettingFormModel.obstacleAvoidanceUpside"
                />
              </div>
            </template>
            <a
              @click="
                onShowPopConfirm(
                  deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].settingKey
                )
              "
              >编辑</a
            >
          </DeviceSettingPopover>
        </div>
      </div>
      <!-- 下视避障 -->
      <div class="control-setting-item">
        <div class="control-setting-item-left">
          <div class="item-label">
            {{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].label }}
          </div>
          <div class="item-status">
            {{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].value }}
          </div>
        </div>
        <div class="control-setting-item-right">
          <DeviceSettingPopover
            :visible="
              deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].popConfirm.visible
            "
            :loading="
              deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].popConfirm.loading
            "
            @confirm="
              onConfirm(deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].settingKey)
            "
            @cancel="
              onCancel(deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].settingKey)
            "
          >
            <template #formContent>
              <div class="form-content">
                <span class="form-label"
                  >{{
                    deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].label
                  }}:</span
                >
                <a-switch
                  checked-children="开"
                  un-checked-children="关"
                  v-model:checked="deviceSettingFormModel.obstacleAvoidanceDownside"
                />
              </div>
            </template>
            <a
              @click="
                onShowPopConfirm(
                  deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].settingKey
                )
              "
              >编辑</a
            >
          </DeviceSettingPopover>
        </div>
      </div>
    </div>
  </div>
</template>
<script setup lang="ts">
import { defineProps, ref, watch } from 'vue';
import { DeviceInfoType } from '@/types/device';
import { useMyStore } from '@/store';
import { cloneDeep } from 'lodash';
import {
  initDeviceSetting,
  initDeviceSettingFormModel,
  DeviceSettingKeyEnum,
} from '@/types/device-setting';
import {
  updateDeviceSettingInfoByOsd,
  updateDeviceSettingFormModelByOsd,
} from '@/utils/device-setting';
import { useDeviceSetting } from './use-device-setting';
import DeviceSettingPopover from './DeviceSettingPopover.vue';
const props = defineProps<{
  sn: string;
  deviceInfo: DeviceInfoType;
}>();
const store = useMyStore();
const deviceSetting = ref(cloneDeep(initDeviceSetting));
const deviceSettingFormModelFromOsd = ref(cloneDeep(initDeviceSettingFormModel));
const deviceSettingFormModel = ref(cloneDeep(initDeviceSettingFormModel)); // 真实使用的formModel
// 根据设备osd信息更新信息
watch(
  () => props.deviceInfo,
  value => {
    updateDeviceSettingInfoByOsd(deviceSetting.value, value);
    updateDeviceSettingFormModelByOsd(deviceSettingFormModelFromOsd.value, value);
    // console.log('deviceInfo', value)
  },
  {
    immediate: true,
    deep: true,
  }
);
function onShowPopConfirm(settingKey: DeviceSettingKeyEnum) {
  deviceSetting.value[settingKey].popConfirm.visible = true;
  deviceSettingFormModel.value = cloneDeep(deviceSettingFormModelFromOsd.value);
}
function onCancel(settingKey: DeviceSettingKeyEnum) {
  deviceSetting.value[settingKey].popConfirm.visible = false;
}
async function onConfirm(settingKey: DeviceSettingKeyEnum) {
  deviceSetting.value[settingKey].popConfirm.loading = true;
  const body = genDevicePropsBySettingKey(settingKey, deviceSettingFormModel.value);
  await setDeviceProps(props.sn, body);
  deviceSetting.value[settingKey].popConfirm.loading = false;
  deviceSetting.value[settingKey].popConfirm.visible = false;
}
// 更新设备属性
const { genDevicePropsBySettingKey, setDeviceProps } = useDeviceSetting();
</script>
<style lang="scss" scoped>
.device-setting-wrapper {
  border-bottom: 1px solid #515151;
  .device-setting-header {
    font-size: 14px;
    font-weight: 600;
    padding: 10px 10px 0px;
  }
  .device-state-box {
    .device-state-item {
      width: 23%;
      .state-item-value {
      }
      .state-item-label {
      }
    }
  }
  .device-state-box::after {
    content: '';
    width: 23%;
  }
  .device-setting-box {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    padding: 4px 10px;
    .control-setting-item {
      width: 220px;
      height: 58px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      border: 1px solid #666;
      margin: 4px 0;
      padding: 0 8px;
      .control-setting-item-left {
        display: flex;
        flex-direction: column;
        .item-label {
          font-weight: 700;
        }
      }
    }
  }
}
</style>
src/views/device/components/DeviceSettingPopover.vue
New file
@@ -0,0 +1,110 @@
<template>
  <a-popover
    :visible="state.sVisible"
    trigger="click"
    v-bind="$attrs"
    :overlay-class-name="overlayClassName"
    placement="bottom"
    @visibleChange=""
    v-on="$attrs"
  >
    <template #content>
      <div class="title-content"></div>
      <slot name="formContent" />
      <div class="uranus-popconfirm-btns">
        <a-button size="sm" @click="onCancel">
          {{ cancelText || '取消' }}
        </a-button>
        <a-button
          size="sm"
          :loading="loading"
          type="primary"
          class="confirm-btn"
          @click="onConfirm"
        >
          {{ okText || '确定' }}
        </a-button>
      </div>
    </template>
    <template v-if="$slots.default">
      <slot></slot>
    </template>
  </a-popover>
</template>
<script lang="ts" setup>
import { defineProps, defineEmits, reactive, watch, computed } from 'vue';
const props = defineProps<{
  visible?: boolean;
  loading?: Boolean;
  disabled?: Boolean;
  title?: String;
  okText?: String;
  cancelText?: String;
  width?: Number;
}>();
const emit = defineEmits(['cancel', 'confirm']);
const state = reactive({
  sVisible: false,
  loading: false,
});
watch(
  () => props.visible,
  val => {
    state.sVisible = val || false;
  }
);
const loading = computed(() => {
  return props.loading;
});
const okLabel = computed(() => {
  return props.loading ? '' : '确定';
});
const overlayClassName = computed(() => {
  const classList = ['device-setting-popconfirm'];
  return classList.join(' ');
});
function onConfirm(e: Event) {
  if (props.disabled) {
    return;
  }
  emit('confirm', e);
}
function onCancel(e: Event) {
  state.sVisible = false;
  emit('cancel', e);
}
</script>
<style lang="scss">
.device-setting-popconfirm {
  min-width: 300px;
  .uranus-popconfirm-btns {
    display: flex;
    padding: 10px 0px;
    justify-content: flex-end;
    .confirm-btn {
      margin-left: 10px;
    }
  }
  .form-content {
    display: inline-flex;
    align-items: center;
    .form-label {
      padding-right: 10px;
    }
  }
}
</style>
src/views/device/components/DockControlPanel.vue
New file
@@ -0,0 +1,261 @@
<template>
  <div class="dock-control-panel">
    <!-- title -->
    <!-- setting -->
    <!-- <DeviceSettingBox :sn="props.sn" :deviceInfo="props.deviceInfo"></DeviceSettingBox> -->
    <!-- cmd -->
    <div class="control-cmd-wrapper">
      <div class="control-cmd-header">
        远程调试
        <el-switch
          v-model:checked="debugStatus"
          @change="onDeviceStatusChange"
          active-text="开"
          inactive-text="关"
          class="debug-btn"
          style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
        />
      </div>
      <div class="control-cmd-box">
        <div v-for="(cmdItem, index) in cmdList" :key="cmdItem.cmdKey" class="control-cmd-item">
          <div class="control-cmd-item-left">
            <div class="item-label">{{ cmdItem.label }}</div>
            <div class="item-status">{{ cmdItem.status }}</div>
          </div>
          <div class="control-cmd-item-right">
            <el-button
              :disabled="!debugStatus || cmdItem.disabled"
              :loading="cmdItem.loading"
              size="small"
              type="primary"
              @click="sendControlCmd(cmdItem, index)"
            >
              {{ cmdItem.operateText }}
            </el-button>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script setup>
import EventBus from '@/event-bus';
import { EBizCode, ELocalStorageKey, ERouterName } from '@/types';
import { useConnectWebSocket } from '@/hooks/use-connect-websocket';
import { getWebsocketUrl } from '@/websocket/util/config';
import { defineProps, ref, watch } from 'vue';
import { cmdList as baseCmdList } from '@/types/device-cmd';
import { useDockControl } from './use-dock-control';
import { EDockModeCode } from '@/types/device';
import { updateDeviceCmdInfoByOsd, updateDeviceCmdInfoByExecuteInfo } from '@/utils/device-cmd';
import Store from '@/store';
const props = defineProps(['sn', 'deviceInfo']);
const initCmdList = baseCmdList.map(cmdItem => Object.assign({}, cmdItem));
const cmdList = ref(initCmdList);
// 根据机场指令执行状态更新信息
watch(
  () => Store.getters.devicesCmdExecuteInfo,
  devicesCmdExecuteInfo => {
    if (props.sn && devicesCmdExecuteInfo[props.sn]) {
      updateDeviceCmdInfoByExecuteInfo(cmdList.value, devicesCmdExecuteInfo[props.sn]);
    }
  },
  {
    immediate: true,
    deep: true,
  }
);
// 根据设备osd信息更新信息
watch(
  () => props.deviceInfo,
  value => {
    updateDeviceCmdInfoByOsd(cmdList.value, value);
    // console.log('deviceInfo', value)
  },
  {
    immediate: true,
    deep: true,
  }
);
// dock 控制指令
const debugStatus = ref(
  props.deviceInfo.dock?.basic_osd.mode_code === EDockModeCode.Remote_Debugging
);
async function onDeviceStatusChange(status) {
  let result = false;
  if (status) {
    result = await dockDebugOnOff(props.sn, true);
  } else {
    result = await dockDebugOnOff(props.sn, false);
  }
  console.log(result, '---1------');
  if (!result) {
    if (status) {
      debugStatus.value = false;
    } else {
      debugStatus.value = true;
    }
  }
}
const { sendDockControlCmd, dockDebugOnOff } = useDockControl();
async function sendControlCmd(cmdItem, index) {
  const params = {
    sn: props.sn,
    cmd: cmdItem.cmdKey,
    action: cmdItem.action,
  };
  const success = await sendDockControlCmd(params, true);
  if (success) {
    // updateDeviceSingleCmdInfo(cmdList.value[index])
  }
}
const messageHandler = async payload => {
  if (!payload) {
    return;
  }
  switch (payload.biz_code) {
    case EBizCode.GatewayOsd: {
      Store.commit('SET_GATEWAY_INFO', payload.data);
      break;
    }
    case EBizCode.DeviceOsd: {
      Store.commit('SET_DEVICE_INFO', payload.data);
      break;
    }
    case EBizCode.DockOsd: {
      // if (payload.data.sn === workspace_id.value) {
      Store.commit('SET_DOCK_INFO', payload.data);
      // console.log(payload.data, 'data')
      // }
      break;
    }
    case EBizCode.MapElementCreate: {
      Store.commit('SET_MAP_ELEMENT_CREATE', payload.data);
      break;
    }
    case EBizCode.MapElementUpdate: {
      Store.commit('SET_MAP_ELEMENT_UPDATE', payload.data);
      break;
    }
    case EBizCode.MapElementDelete: {
      Store.commit('SET_MAP_ELEMENT_DELETE', payload.data);
      break;
    }
    case EBizCode.DeviceOnline: {
      Store.commit('SET_DEVICE_ONLINE', payload.data);
      break;
    }
    case EBizCode.DeviceOffline: {
      Store.commit('SET_DEVICE_OFFLINE', payload.data);
      break;
    }
    case EBizCode.FlightTaskProgress:
    case EBizCode.FlightTaskMediaProgress:
    case EBizCode.FlightTaskMediaHighestPriority: {
      EventBus.emit('flightTaskWs', payload);
      break;
    }
    case EBizCode.DeviceHms: {
      Store.commit('SET_DEVICE_HMS_INFO', payload.data);
      break;
    }
    case EBizCode.DeviceReboot:
    case EBizCode.DroneOpen:
    case EBizCode.DroneClose:
    case EBizCode.CoverOpen:
    case EBizCode.CoverClose:
    case EBizCode.PutterOpen:
    case EBizCode.PutterClose:
    case EBizCode.ChargeOpen:
    case EBizCode.ChargeClose:
    case EBizCode.DeviceFormat:
    case EBizCode.DroneFormat: {
      Store.commit('SET_DEVICES_CMD_EXECUTE_INFO', {
        biz_code: payload.biz_code,
        timestamp: payload.timestamp,
        ...payload.data,
      });
      break;
    }
    case EBizCode.ControlSourceChange:
    case EBizCode.FlyToPointProgress:
    case EBizCode.TakeoffToPointProgress:
    case EBizCode.JoystickInvalidNotify:
    case EBizCode.DrcStatusNotify: {
      EventBus.emit('droneControlWs', payload);
      break;
    }
    default:
      break;
  }
};
const webSorketUrl = getWebsocketUrl() + '&workspace-id=' + props.deviceInfo.workspace_id;
// 监听ws 消息
useConnectWebSocket(messageHandler, webSorketUrl);
</script>
<style lang="scss" scoped>
.dock-control-panel {
  position: relative;
  width: 100%;
  height: 100%;
  padding: 0 !important;
  color: #000;
  border-radius: 2px;
  .control-cmd-wrapper {
    .control-cmd-header {
      font-size: 14px;
      font-weight: 600;
      padding: 10px 10px 0px;
      .debug-btn {
        margin-left: 10px;
        border: 1px solid #585858;
      }
    }
    .control-cmd-box {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      padding: 4px 10px;
      .control-cmd-item {
        width: 220px;
        height: 58px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        border: 1px solid #666;
        margin: 4px 0;
        padding: 0 8px;
        .control-cmd-item-left {
          display: flex;
          flex-direction: column;
          .item-label {
            font-weight: 700;
          }
        }
      }
    }
  }
}
</style>
src/views/device/components/use-dock-control.js
New file
@@ -0,0 +1,78 @@
import { ElMessage } from 'element-plus';
import { ref } from 'vue';
import { postSendCmd } from '@/api/device-cmd';
import { DeviceCmd } from '@/types/device-cmd';
export function useDockControl() {
  const dockControlPanelVisible = ref(false);
  function setDockControlPanelVisible(visible) {
    dockControlPanelVisible.value = visible;
  }
  // 远程调试开关
  async function dockDebugOnOff(sn, on) {
    const result = await sendDockControlCmd(
      {
        sn: sn,
        cmd: on ? DeviceCmd.DebugModeOpen : DeviceCmd.DebugModeClose,
      },
      false
    );
    return result;
  }
  // 发送指令
  async function sendDockControlCmd(params, tip = true) {
    try {
      let body = undefined;
      if (params.action !== undefined) {
        if (params.cmd === DeviceCmd.SdrWorkModeSwitch) {
          body = {
            link_workmode: params.action,
          };
        } else {
          body = {
            action: params.action,
          };
        }
      }
      const { code, message: msg } = await postSendCmd(
        { dock_sn: params.sn, device_cmd: params.cmd },
        body
      );
      if (code === 0) {
        tip &&
          ElMessage({
            message: '指令发送成功',
            type: 'success',
          });
        return true;
        message.error('指令发送失败');
      }
      throw msg;
    } catch (e) {
      tip &&
        ElMessage({
          message: '指令发送失败',
          type: 'error',
        });
      return false;
    }
  }
  // 控制面板关闭
  async function onCloseControlPanel(sn) {
    console.log(dockControlPanelVisible.value, 'value');
    await dockDebugOnOff(sn, false);
    setDockControlPanelVisible(false);
  }
  return {
    dockControlPanelVisible,
    setDockControlPanelVisible,
    sendDockControlCmd,
    dockDebugOnOff,
    onCloseControlPanel,
  };
}
src/views/device/index.vue
@@ -1,11 +1,21 @@
<!--
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-09-09 11:40:40
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-09-09 12:02:50
 * @FilePath: \drone-web-manage\src\views\device\index.vue
 * @Description:
 *
 * Copyright (c) 2024 by shuishen, All Rights Reserved.
-->
<template>
  <basic-container>
    <el-tabs v-model="activeName" @tab-click="handleClick">
      <el-tab-pane label="飞行器" name="1">
        <fly ref="fly"/>
      <el-tab-pane label="机场" name="1">
        <airport ref="airport" />
      </el-tab-pane>
      <el-tab-pane label="机场" name="2">
        <airport ref="airport"/>
      <el-tab-pane label="飞行器" name="2">
        <fly ref="fly" />
      </el-tab-pane>
    </el-tabs>
  </basic-container>
@@ -13,10 +23,10 @@
<script>
import { mapGetters } from 'vuex';
import airport from './airport.vue'
import fly from './fly.vue'
import airport from './airport.vue';
import fly from './fly.vue';
export default {
  components:{airport,fly},
  components: { airport, fly },
  data() {
    return {
      activeName: '1',
@@ -29,8 +39,7 @@
  computed: {
    ...mapGetters(['permission']),
    permissionList() {
      return {
      };
      return {};
    },
    ids() {
      let ids = [];
@@ -42,11 +51,11 @@
  },
  methods: {
    handleClick(tab, event) {
      if(tab.index==0){
        this.$refs.fly.init()
      if (tab.index == 0) {
        this.$refs.fly.init();
      }
      if(tab.index==1){
        this.$refs.airport.init()
      if (tab.index == 1) {
        this.$refs.airport.init();
      }
    },
  },
src/websocket/index.js
New file
@@ -0,0 +1,77 @@
/*
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-09-09 19:13:20
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-09-09 19:14:05
 * @FilePath: \drone-web-manage\src\websocket\index.js
 * @Description:
 *
 * Copyright (c) 2024 by shuishen, All Rights Reserved.
 */
import ReconnectingWebSocket from "reconnecting-websocket"
/**
 * ConnectWebSocket 类
 * TODO: 优化messageHandler: EventEmitter。暂时传入回调函数
 */
class ConnectWebSocket {
  constructor(url) {
    this._url = url
    this._socket = null
    this._hasInit = false
    this._messageHandler = null
  }
  initSocket() {
    if (this._hasInit) {
      return
    }
    if (!this._url) {
      return
    }
    // 会自动重连,无需处理重连逻辑
    this._socket = new ReconnectingWebSocket(this._url, [], {
      maxReconnectionDelay: 20000, // 断开后最大的重连时间: 20s,每多一次重连,会增加 1.3 倍,5 * 1.3 * 1.3 * 1.3...
      minReconnectionDelay: 5000, // 断开后最短的重连时间: 5s
      maxRetries: 5
    })
    this._hasInit = true
    this._socket.addEventListener("open", this._onOpen.bind(this))
    this._socket.addEventListener("close", this._onClose.bind(this))
    this._socket.addEventListener("error", this._onError.bind(this))
    this._socket.addEventListener("message", this._onMessage.bind(this))
  }
  _onOpen() {
    console.log("连接成功")
  }
  _onClose() {
    console.log("连接已断开")
  }
  _onError() {
    console.log("连接 error")
  }
  registerMessageHandler(messageHandler) {
    this._messageHandler = messageHandler
  }
  _onMessage(msg) {
    const data = JSON.parse(msg.data)
    this._messageHandler && this._messageHandler(data)
    // console.log('接受消息', msg)
  }
  sendMessage = message => {
    this._socket?.send(JSON.stringify(message.data))
  }
  close() {
    this._socket?.close()
  }
}
export default ConnectWebSocket
src/websocket/util/config.js
New file
@@ -0,0 +1,19 @@
/*
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-09-09 19:13:20
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-09-09 19:14:36
 * @FilePath: \drone-web-manage\src\websocket\util\config.ts
 * @Description:
 *
 * Copyright (c) 2024 by shuishen, All Rights Reserved.
 */
import { getToken } from '@/utils/auth';
export function getWebsocketUrl() {
  const token = getToken();
  // const url = CURRENT_CONFIG.websocketURL
  const url = 'wss://wrj.shuixiongit.com/drone-api/api/v1/ws?x-auth-token=' + encodeURI(token);
  return url;
}
vite.config.mjs
@@ -1,21 +1,12 @@
import {
  defineConfig,
  loadEnv
} from 'vite';
import { resolve } from 'path'
import { defineConfig, loadEnv } from 'vite';
import { resolve } from 'path';
import createVitePlugins from './vite/plugins';
// https://vitejs.dev/config/
export default ({
  mode,
  command
}) => {
  const env = loadEnv(mode, process.cwd())
  const {
    VITE_APP_ENV,
    VITE_APP_BASE
  } = env
export default ({ mode, command }) => {
  const env = loadEnv(mode, process.cwd());
  const { VITE_APP_ENV, VITE_APP_BASE } = env;
  // 判断是打生产环境包
  const isProd = VITE_APP_ENV === 'production'
  const isProd = VITE_APP_ENV === 'production';
  // 根据是否生产环境,动态设置压缩配置
  const buildConfig = {
@@ -32,8 +23,8 @@
        drop_debugger: true, // 删除 debugger
      },
      format: {
        comments: false // 删除所有注释
      }
        comments: false, // 删除所有注释
      },
    };
  }
  return defineConfig({
@@ -41,14 +32,14 @@
    define: {
      __VUE_I18N_FULL_INSTALL__: true,
      __VUE_I18N_LEGACY_API__: true,
      __INTLIFY_PROD_DEVTOOLS__: false
      __INTLIFY_PROD_DEVTOOLS__: false,
    },
    server: {
      port: 2888,
      proxy: {
        '/api': {
          target: 'http://localhost',
          // target: 'https://wrj.shuixiongit.com/api',
          // target: 'http://localhost',
          target: 'https://wrj.shuixiongit.com/api',
          changeOrigin: true,
          rewrite: path => path.replace(/^\/api/, ''),
        },
yarn.lock
@@ -3,69 +3,69 @@
"@antfu/utils@^0.7.0":
  version "0.7.7"
  resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz"
  integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==
  "integrity" "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg=="
  "resolved" "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz"
  "version" "0.7.7"
"@babel/parser@^7.24.4":
  version "7.24.6"
  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz"
  integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==
  "integrity" "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q=="
  "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz"
  "version" "7.24.6"
"@babel/runtime@^7.12.0":
  version "7.23.7"
  resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.7.tgz"
  integrity sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==
  "integrity" "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA=="
  "resolved" "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.7.tgz"
  "version" "7.23.7"
  dependencies:
    regenerator-runtime "^0.14.0"
    "regenerator-runtime" "^0.14.0"
"@bpmn-io/diagram-js-ui@^0.2.2":
  version "0.2.2"
  resolved "https://registry.npmmirror.com/@bpmn-io/diagram-js-ui/-/diagram-js-ui-0.2.2.tgz"
  integrity sha512-IgOIxOwoqsFB2mMPdXtcbPVPjdYkZ3huW7ipowYLhg5jdRGHlBronQ+LER+lfWro6sPtzEsw7qX8D8Yq9M2S5g==
  "integrity" "sha512-IgOIxOwoqsFB2mMPdXtcbPVPjdYkZ3huW7ipowYLhg5jdRGHlBronQ+LER+lfWro6sPtzEsw7qX8D8Yq9M2S5g=="
  "resolved" "https://registry.npmmirror.com/@bpmn-io/diagram-js-ui/-/diagram-js-ui-0.2.2.tgz"
  "version" "0.2.2"
  dependencies:
    htm "^3.1.1"
    preact "^10.11.2"
    "htm" "^3.1.1"
    "preact" "^10.11.2"
"@ctrl/tinycolor@^3.4.1":
  version "3.6.1"
  resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz"
  integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
  "integrity" "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA=="
  "resolved" "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz"
  "version" "3.6.1"
"@element-plus/icons-vue@^2.0.6", "@element-plus/icons-vue@^2.3.1":
  version "2.3.1"
  resolved "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz"
  integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==
  "integrity" "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg=="
  "resolved" "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz"
  "version" "2.3.1"
"@esbuild/darwin-arm64@0.20.2":
  version "0.20.2"
  resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz"
  integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==
"@esbuild/win32-x64@0.20.2":
  "integrity" "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ=="
  "resolved" "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz"
  "version" "0.20.2"
"@floating-ui/core@^1.5.3":
  version "1.5.3"
  resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.5.3.tgz"
  integrity sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==
  "integrity" "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q=="
  "resolved" "https://registry.npmmirror.com/@floating-ui/core/-/core-1.5.3.tgz"
  "version" "1.5.3"
  dependencies:
    "@floating-ui/utils" "^0.2.0"
"@floating-ui/dom@^1.0.1":
  version "1.5.4"
  resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.5.4.tgz"
  integrity sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==
  "integrity" "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ=="
  "resolved" "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.5.4.tgz"
  "version" "1.5.4"
  dependencies:
    "@floating-ui/core" "^1.5.3"
    "@floating-ui/utils" "^0.2.0"
"@floating-ui/utils@^0.2.0":
  version "0.2.1"
  resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz"
  integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
  "integrity" "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q=="
  "resolved" "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz"
  "version" "0.2.1"
"@intlify/core-base@9.2.2":
  version "9.2.2"
  resolved "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz"
  integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==
  "integrity" "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA=="
  "resolved" "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz"
  "version" "9.2.2"
  dependencies:
    "@intlify/devtools-if" "9.2.2"
    "@intlify/message-compiler" "9.2.2"
@@ -73,352 +73,352 @@
    "@intlify/vue-devtools" "9.2.2"
"@intlify/devtools-if@9.2.2":
  version "9.2.2"
  resolved "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz"
  integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==
  "integrity" "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg=="
  "resolved" "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz"
  "version" "9.2.2"
  dependencies:
    "@intlify/shared" "9.2.2"
"@intlify/message-compiler@9.2.2":
  version "9.2.2"
  resolved "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz"
  integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==
  "integrity" "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA=="
  "resolved" "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz"
  "version" "9.2.2"
  dependencies:
    "@intlify/shared" "9.2.2"
    source-map "0.6.1"
    "source-map" "0.6.1"
"@intlify/shared@9.2.2":
  version "9.2.2"
  resolved "https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz"
  integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==
  "integrity" "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q=="
  "resolved" "https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz"
  "version" "9.2.2"
"@intlify/vue-devtools@9.2.2":
  version "9.2.2"
  resolved "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz"
  integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==
  "integrity" "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg=="
  "resolved" "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz"
  "version" "9.2.2"
  dependencies:
    "@intlify/core-base" "9.2.2"
    "@intlify/shared" "9.2.2"
"@jridgewell/gen-mapping@^0.3.5":
  version "0.3.5"
  resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz"
  integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
  "integrity" "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg=="
  "resolved" "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz"
  "version" "0.3.5"
  dependencies:
    "@jridgewell/set-array" "^1.2.1"
    "@jridgewell/sourcemap-codec" "^1.4.10"
    "@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.1.0":
  version "3.1.2"
  resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
  integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
  "integrity" "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="
  "resolved" "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
  "version" "3.1.2"
"@jridgewell/set-array@^1.2.1":
  version "1.2.1"
  resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz"
  integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
  "integrity" "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="
  "resolved" "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz"
  "version" "1.2.1"
"@jridgewell/source-map@^0.3.3":
  version "0.3.6"
  resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz"
  integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
  "integrity" "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ=="
  "resolved" "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz"
  "version" "0.3.6"
  dependencies:
    "@jridgewell/gen-mapping" "^0.3.5"
    "@jridgewell/trace-mapping" "^0.3.25"
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15":
  version "1.4.15"
  resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
  "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
  "resolved" "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
  "version" "1.4.15"
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
  version "0.3.25"
  resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
  integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
  "integrity" "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="
  "resolved" "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
  "version" "0.3.25"
  dependencies:
    "@jridgewell/resolve-uri" "^3.1.0"
    "@jridgewell/sourcemap-codec" "^1.4.14"
"@nodelib/fs.scandir@2.1.5":
  version "2.1.5"
  resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
  "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
  "resolved" "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
  "version" "2.1.5"
  dependencies:
    "@nodelib/fs.stat" "2.0.5"
    run-parallel "^1.1.9"
    "run-parallel" "^1.1.9"
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
  version "2.0.5"
  resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
  "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
  "resolved" "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
  "version" "2.0.5"
"@nodelib/fs.walk@^1.2.3":
  version "1.2.8"
  resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
  "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
  "resolved" "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
  "version" "1.2.8"
  dependencies:
    "@nodelib/fs.scandir" "2.1.5"
    fastq "^1.6.0"
    "fastq" "^1.6.0"
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
  version "2.11.7"
  resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
  integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
  "integrity" "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
  "resolved" "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
  "version" "2.11.7"
"@rollup/pluginutils@^5.0.2":
  version "5.1.0"
  resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz"
  integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==
  "integrity" "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g=="
  "resolved" "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz"
  "version" "5.1.0"
  dependencies:
    "@types/estree" "^1.0.0"
    estree-walker "^2.0.2"
    picomatch "^2.3.1"
    "estree-walker" "^2.0.2"
    "picomatch" "^2.3.1"
"@rollup/rollup-darwin-arm64@4.18.0":
  version "4.18.0"
  resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz"
  integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==
"@rollup/rollup-win32-x64-msvc@4.18.0":
  "integrity" "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g=="
  "resolved" "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz"
  "version" "4.18.0"
"@saber/nf-design-base-elp@^1.2.0":
  version "1.2.0"
  resolved "https://center.javablade.com/api/packages/blade/npm/%40saber%2Fnf-design-base-elp/-/1.2.0/nf-design-base-elp-1.2.0.tgz"
  integrity sha512-ThpU7EpSIGP8eR3N3hRvI+0g4RU43suSRTHxc8YPBbxlgbN4I26p/cJprYSusuwQS+OZPLivMs+ciuoknCrwBw==
  "integrity" "sha512-ThpU7EpSIGP8eR3N3hRvI+0g4RU43suSRTHxc8YPBbxlgbN4I26p/cJprYSusuwQS+OZPLivMs+ciuoknCrwBw=="
  "resolved" "https://center.javablade.com/api/packages/blade/npm/%40saber%2Fnf-design-base-elp/-/1.2.0/nf-design-base-elp-1.2.0.tgz"
  "version" "1.2.0"
  dependencies:
    bpmn-js "11.5.0"
    monaco-editor "0.36.1"
    randomcolor "^0.6.2"
    "bpmn-js" "11.5.0"
    "monaco-editor" "0.36.1"
    "randomcolor" "^0.6.2"
"@smallwei/avue@^3.4.4":
  version "3.4.6"
  resolved "https://registry.npmmirror.com/@smallwei/avue/-/avue-3.4.6.tgz"
  integrity sha512-JRka3h/NAoHwiCwkZuNfbHS1wevi3/3MxRXTU7IjX5TDveBx2jmLu1SWYU68f+1appm99RuBQYDJBlSJ21JU5w==
  "integrity" "sha512-JRka3h/NAoHwiCwkZuNfbHS1wevi3/3MxRXTU7IjX5TDveBx2jmLu1SWYU68f+1appm99RuBQYDJBlSJ21JU5w=="
  "resolved" "https://registry.npmmirror.com/@smallwei/avue/-/avue-3.4.6.tgz"
  "version" "3.4.6"
  dependencies:
    "@element-plus/icons-vue" "^2.0.6"
    countup.js "^1.9.3"
    dayjs "^1.10.4"
    "countup.js" "^1.9.3"
    "dayjs" "^1.10.4"
"@transloadit/prettier-bytes@0.0.7":
  version "0.0.7"
  resolved "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz"
  integrity sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==
  "integrity" "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA=="
  "resolved" "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz"
  "version" "0.0.7"
"@types/estree@^1.0.0", "@types/estree@1.0.5":
  version "1.0.5"
  resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz"
  integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
  "integrity" "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
  "resolved" "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz"
  "version" "1.0.5"
"@types/event-emitter@^0.3.3":
  version "0.3.5"
  resolved "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz"
  integrity sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==
  "integrity" "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ=="
  "resolved" "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz"
  "version" "0.3.5"
"@types/lodash-es@*", "@types/lodash-es@^4.17.6":
  version "4.17.12"
  resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz"
  integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==
  "integrity" "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ=="
  "resolved" "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz"
  "version" "4.17.12"
  dependencies:
    "@types/lodash" "*"
"@types/lodash@*", "@types/lodash@^4.14.182":
  version "4.14.202"
  resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz"
  integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
  "integrity" "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ=="
  "resolved" "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz"
  "version" "4.14.202"
"@types/web-bluetooth@^0.0.16":
  version "0.0.16"
  resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
  integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
  "integrity" "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
  "resolved" "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
  "version" "0.0.16"
"@uppy/companion-client@^2.2.2":
  version "2.2.2"
  resolved "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz"
  integrity sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==
  "integrity" "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og=="
  "resolved" "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz"
  "version" "2.2.2"
  dependencies:
    "@uppy/utils" "^4.1.2"
    namespace-emitter "^2.0.1"
    "namespace-emitter" "^2.0.1"
"@uppy/core@^2.0.3", "@uppy/core@^2.1.1", "@uppy/core@^2.1.4", "@uppy/core@^2.3.3":
  version "2.3.4"
  resolved "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz"
  integrity sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==
  "integrity" "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ=="
  "resolved" "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz"
  "version" "2.3.4"
  dependencies:
    "@transloadit/prettier-bytes" "0.0.7"
    "@uppy/store-default" "^2.1.1"
    "@uppy/utils" "^4.1.3"
    lodash.throttle "^4.1.1"
    mime-match "^1.0.2"
    namespace-emitter "^2.0.1"
    nanoid "^3.1.25"
    preact "^10.5.13"
    "lodash.throttle" "^4.1.1"
    "mime-match" "^1.0.2"
    "namespace-emitter" "^2.0.1"
    "nanoid" "^3.1.25"
    "preact" "^10.5.13"
"@uppy/store-default@^2.1.1":
  version "2.1.1"
  resolved "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz"
  integrity sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==
  "integrity" "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ=="
  "resolved" "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz"
  "version" "2.1.1"
"@uppy/utils@^4.1.2", "@uppy/utils@^4.1.3":
  version "4.1.3"
  resolved "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz"
  integrity sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==
  "integrity" "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw=="
  "resolved" "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz"
  "version" "4.1.3"
  dependencies:
    lodash.throttle "^4.1.1"
    "lodash.throttle" "^4.1.1"
"@uppy/xhr-upload@^2.0.3", "@uppy/xhr-upload@^2.0.7":
  version "2.1.3"
  resolved "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz"
  integrity sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==
  "integrity" "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ=="
  "resolved" "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz"
  "version" "2.1.3"
  dependencies:
    "@uppy/companion-client" "^2.2.2"
    "@uppy/utils" "^4.1.2"
    nanoid "^3.1.25"
    "nanoid" "^3.1.25"
"@vitejs/plugin-vue@^5.0.4":
  version "5.0.4"
  resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz"
  integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==
  "integrity" "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ=="
  "resolved" "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz"
  "version" "5.0.4"
"@vue/compiler-core@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz"
  integrity sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==
  "integrity" "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg=="
  "resolved" "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@babel/parser" "^7.24.4"
    "@vue/shared" "3.4.27"
    entities "^4.5.0"
    estree-walker "^2.0.2"
    source-map-js "^1.2.0"
    "entities" "^4.5.0"
    "estree-walker" "^2.0.2"
    "source-map-js" "^1.2.0"
"@vue/compiler-dom@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz"
  integrity sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==
  "integrity" "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw=="
  "resolved" "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@vue/compiler-core" "3.4.27"
    "@vue/shared" "3.4.27"
"@vue/compiler-sfc@^3.2.29", "@vue/compiler-sfc@^3.4.27", "@vue/compiler-sfc@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz"
  integrity sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==
  "integrity" "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA=="
  "resolved" "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@babel/parser" "^7.24.4"
    "@vue/compiler-core" "3.4.27"
    "@vue/compiler-dom" "3.4.27"
    "@vue/compiler-ssr" "3.4.27"
    "@vue/shared" "3.4.27"
    estree-walker "^2.0.2"
    magic-string "^0.30.10"
    postcss "^8.4.38"
    source-map-js "^1.2.0"
    "estree-walker" "^2.0.2"
    "magic-string" "^0.30.10"
    "postcss" "^8.4.38"
    "source-map-js" "^1.2.0"
"@vue/compiler-ssr@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz"
  integrity sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==
  "integrity" "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw=="
  "resolved" "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@vue/compiler-dom" "3.4.27"
    "@vue/shared" "3.4.27"
"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.5.1":
  version "6.5.1"
  resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz"
  integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==
  "integrity" "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
  "resolved" "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz"
  "version" "6.5.1"
"@vue/reactivity@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz"
  integrity sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==
  "integrity" "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA=="
  "resolved" "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@vue/shared" "3.4.27"
"@vue/runtime-core@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz"
  integrity sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==
  "integrity" "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA=="
  "resolved" "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@vue/reactivity" "3.4.27"
    "@vue/shared" "3.4.27"
"@vue/runtime-dom@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz"
  integrity sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==
  "integrity" "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q=="
  "resolved" "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@vue/runtime-core" "3.4.27"
    "@vue/shared" "3.4.27"
    csstype "^3.1.3"
    "csstype" "^3.1.3"
"@vue/server-renderer@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz"
  integrity sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==
  "integrity" "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA=="
  "resolved" "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@vue/compiler-ssr" "3.4.27"
    "@vue/shared" "3.4.27"
"@vue/shared@3.4.27":
  version "3.4.27"
  resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz"
  integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==
  "integrity" "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA=="
  "resolved" "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz"
  "version" "3.4.27"
"@vueuse/core@*", "@vueuse/core@^9.1.0":
  version "9.13.0"
  resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz"
  integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==
  "integrity" "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw=="
  "resolved" "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz"
  "version" "9.13.0"
  dependencies:
    "@types/web-bluetooth" "^0.0.16"
    "@vueuse/metadata" "9.13.0"
    "@vueuse/shared" "9.13.0"
    vue-demi "*"
    "vue-demi" "*"
"@vueuse/metadata@9.13.0":
  version "9.13.0"
  resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz"
  integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==
  "integrity" "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
  "resolved" "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz"
  "version" "9.13.0"
"@vueuse/shared@9.13.0":
  version "9.13.0"
  resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz"
  integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==
  "integrity" "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw=="
  "resolved" "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz"
  "version" "9.13.0"
  dependencies:
    vue-demi "*"
    "vue-demi" "*"
"@wangeditor/basic-modules@^1.1.7", "@wangeditor/basic-modules@1.x":
  version "1.1.7"
  resolved "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz"
  integrity sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==
  "integrity" "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz"
  "version" "1.1.7"
  dependencies:
    is-url "^1.2.4"
    "is-url" "^1.2.4"
"@wangeditor/code-highlight@^1.0.3":
  version "1.0.3"
  resolved "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz"
  integrity sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==
  "integrity" "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz"
  "version" "1.0.3"
  dependencies:
    prismjs "^1.23.0"
    "prismjs" "^1.23.0"
"@wangeditor/core@^1.1.19", "@wangeditor/core@1.x":
  version "1.1.19"
  resolved "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz"
  integrity sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==
  "integrity" "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz"
  "version" "1.1.19"
  dependencies:
    "@types/event-emitter" "^0.3.3"
    event-emitter "^0.3.5"
    html-void-elements "^2.0.0"
    i18next "^20.4.0"
    scroll-into-view-if-needed "^2.2.28"
    slate-history "^0.66.0"
    "event-emitter" "^0.3.5"
    "html-void-elements" "^2.0.0"
    "i18next" "^20.4.0"
    "scroll-into-view-if-needed" "^2.2.28"
    "slate-history" "^0.66.0"
"@wangeditor/editor-for-vue@^5.1.12":
  version "5.1.12"
  resolved "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz"
  integrity sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==
  "integrity" "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz"
  "version" "5.1.12"
"@wangeditor/editor@^5.1.23", "@wangeditor/editor@>=5.1.0":
  version "5.1.23"
  resolved "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz"
  integrity sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==
  "integrity" "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz"
  "version" "5.1.23"
  dependencies:
    "@uppy/core" "^2.1.1"
    "@uppy/xhr-upload" "^2.0.3"
@@ -429,277 +429,277 @@
    "@wangeditor/table-module" "^1.1.4"
    "@wangeditor/upload-image-module" "^1.0.2"
    "@wangeditor/video-module" "^1.1.4"
    dom7 "^3.0.0"
    is-hotkey "^0.2.0"
    lodash.camelcase "^4.3.0"
    lodash.clonedeep "^4.5.0"
    lodash.debounce "^4.0.8"
    lodash.foreach "^4.5.0"
    lodash.isequal "^4.5.0"
    lodash.throttle "^4.1.1"
    lodash.toarray "^4.4.0"
    nanoid "^3.2.0"
    slate "^0.72.0"
    snabbdom "^3.1.0"
    "dom7" "^3.0.0"
    "is-hotkey" "^0.2.0"
    "lodash.camelcase" "^4.3.0"
    "lodash.clonedeep" "^4.5.0"
    "lodash.debounce" "^4.0.8"
    "lodash.foreach" "^4.5.0"
    "lodash.isequal" "^4.5.0"
    "lodash.throttle" "^4.1.1"
    "lodash.toarray" "^4.4.0"
    "nanoid" "^3.2.0"
    "slate" "^0.72.0"
    "snabbdom" "^3.1.0"
"@wangeditor/list-module@^1.0.5":
  version "1.0.5"
  resolved "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz"
  integrity sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==
  "integrity" "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz"
  "version" "1.0.5"
"@wangeditor/table-module@^1.1.4":
  version "1.1.4"
  resolved "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz"
  integrity sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==
  "integrity" "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz"
  "version" "1.1.4"
"@wangeditor/upload-image-module@^1.0.2":
  version "1.0.2"
  resolved "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz"
  integrity sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==
  "integrity" "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz"
  "version" "1.0.2"
"@wangeditor/video-module@^1.1.4":
  version "1.1.4"
  resolved "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz"
  integrity sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==
  "integrity" "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg=="
  "resolved" "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz"
  "version" "1.1.4"
acorn@^8.10.0, acorn@^8.11.2, acorn@^8.8.2:
  version "8.11.3"
  resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz"
  integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
"acorn@^8.10.0", "acorn@^8.11.2", "acorn@^8.8.2":
  "integrity" "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
  "resolved" "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz"
  "version" "8.11.3"
animate.css@^4.1.1:
  version "4.1.1"
  resolved "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz"
  integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
"animate.css@^4.1.1":
  "integrity" "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ=="
  "resolved" "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz"
  "version" "4.1.1"
ansi-styles@^4.1.0:
  version "4.3.0"
  resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
"ansi-styles@^4.1.0":
  "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
  "resolved" "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
  "version" "4.3.0"
  dependencies:
    color-convert "^2.0.1"
    "color-convert" "^2.0.1"
anymatch@~3.1.2:
  version "3.1.3"
  resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz"
  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
"anymatch@~3.1.2":
  "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="
  "resolved" "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz"
  "version" "3.1.3"
  dependencies:
    normalize-path "^3.0.0"
    picomatch "^2.0.4"
    "normalize-path" "^3.0.0"
    "picomatch" "^2.0.4"
async-validator@^4.2.5:
  version "4.2.5"
  resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz"
  integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
"async-validator@^4.2.5":
  "integrity" "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
  "resolved" "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz"
  "version" "4.2.5"
avue-plugin-ueditor@^1.0.3:
  version "1.0.3"
  resolved "https://registry.npmmirror.com/avue-plugin-ueditor/-/avue-plugin-ueditor-1.0.3.tgz"
  integrity sha512-hly5hcS5g9d9uoSY5m6h7Kf/o8wHXKQO9LZICbbtmiEX6xYlWcH0mqL0j5rKdbUVNNcjzUThBGaDVWWzXqqxBQ==
"avue-plugin-ueditor@^1.0.3":
  "integrity" "sha512-hly5hcS5g9d9uoSY5m6h7Kf/o8wHXKQO9LZICbbtmiEX6xYlWcH0mqL0j5rKdbUVNNcjzUThBGaDVWWzXqqxBQ=="
  "resolved" "https://registry.npmmirror.com/avue-plugin-ueditor/-/avue-plugin-ueditor-1.0.3.tgz"
  "version" "1.0.3"
  dependencies:
    "@wangeditor/editor" "^5.1.23"
    "@wangeditor/editor-for-vue" "^5.1.12"
    axios "^0.18.0"
    vue "^3.2.47"
    "axios" "^0.18.0"
    "vue" "^3.2.47"
axios@^0.18.0:
  version "0.18.1"
  resolved "https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz"
  integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==
"axios@^0.18.0":
  "integrity" "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g=="
  "resolved" "https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz"
  "version" "0.18.1"
  dependencies:
    follow-redirects "1.5.10"
    is-buffer "^2.0.2"
    "follow-redirects" "1.5.10"
    "is-buffer" "^2.0.2"
axios@^0.21.1:
  version "0.21.4"
  resolved "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz"
  integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
"axios@^0.21.1":
  "integrity" "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg=="
  "resolved" "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz"
  "version" "0.21.4"
  dependencies:
    follow-redirects "^1.14.0"
    "follow-redirects" "^1.14.0"
binary-extensions@^2.0.0:
  version "2.2.0"
  resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
"binary-extensions@^2.0.0":
  "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
  "resolved" "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
  "version" "2.2.0"
bpmn-js@11.5.0:
  version "11.5.0"
  resolved "https://registry.npmmirror.com/bpmn-js/-/bpmn-js-11.5.0.tgz"
  integrity sha512-Bdj53UvfiDtGE1wmiBmpgjl5RMLhCGV/C841dyC+t4kBHj7vApAeeHs2Qiycj390HO4B2U8UDROLT7yjdXEEUA==
"bpmn-js@11.5.0":
  "integrity" "sha512-Bdj53UvfiDtGE1wmiBmpgjl5RMLhCGV/C841dyC+t4kBHj7vApAeeHs2Qiycj390HO4B2U8UDROLT7yjdXEEUA=="
  "resolved" "https://registry.npmmirror.com/bpmn-js/-/bpmn-js-11.5.0.tgz"
  "version" "11.5.0"
  dependencies:
    bpmn-moddle "^8.0.0"
    diagram-js "^11.9.1"
    diagram-js-direct-editing "^2.0.0"
    ids "^1.0.0"
    inherits-browser "^0.1.0"
    min-dash "^4.0.0"
    min-dom "^4.0.3"
    object-refs "^0.3.0"
    tiny-svg "^3.0.0"
    "bpmn-moddle" "^8.0.0"
    "diagram-js" "^11.9.1"
    "diagram-js-direct-editing" "^2.0.0"
    "ids" "^1.0.0"
    "inherits-browser" "^0.1.0"
    "min-dash" "^4.0.0"
    "min-dom" "^4.0.3"
    "object-refs" "^0.3.0"
    "tiny-svg" "^3.0.0"
bpmn-moddle@^8.0.0:
  version "8.1.0"
  resolved "https://registry.npmmirror.com/bpmn-moddle/-/bpmn-moddle-8.1.0.tgz"
  integrity sha512-yI5OAFfYVJwViKTsTsonVfCBPtB3MlefADUORwNIxxBOMp21vnoxuxsdgUWlPH/dvAEZh/+mr8UtqOBNu8NC5Q==
"bpmn-moddle@^8.0.0":
  "integrity" "sha512-yI5OAFfYVJwViKTsTsonVfCBPtB3MlefADUORwNIxxBOMp21vnoxuxsdgUWlPH/dvAEZh/+mr8UtqOBNu8NC5Q=="
  "resolved" "https://registry.npmmirror.com/bpmn-moddle/-/bpmn-moddle-8.1.0.tgz"
  "version" "8.1.0"
  dependencies:
    min-dash "^4.0.0"
    moddle "^6.2.3"
    moddle-xml "^10.1.0"
    "min-dash" "^4.0.0"
    "moddle" "^6.2.3"
    "moddle-xml" "^10.1.0"
braces@^3.0.2, braces@~3.0.2:
  version "3.0.2"
  resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz"
  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
"braces@^3.0.2", "braces@~3.0.2":
  "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
  "resolved" "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz"
  "version" "3.0.2"
  dependencies:
    fill-range "^7.0.1"
    "fill-range" "^7.0.1"
buffer-from@^1.0.0:
  version "1.1.2"
  resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz"
  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
"buffer-from@^1.0.0":
  "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
  "resolved" "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz"
  "version" "1.1.2"
chalk@^4.1.2:
  version "4.1.2"
  resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz"
  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
"chalk@^4.1.2":
  "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
  "resolved" "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz"
  "version" "4.1.2"
  dependencies:
    ansi-styles "^4.1.0"
    supports-color "^7.1.0"
    "ansi-styles" "^4.1.0"
    "supports-color" "^7.1.0"
chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0":
  version "3.5.3"
  resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz"
  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
"chokidar@^3.5.3", "chokidar@>=3.0.0 <4.0.0":
  "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="
  "resolved" "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz"
  "version" "3.5.3"
  dependencies:
    anymatch "~3.1.2"
    braces "~3.0.2"
    glob-parent "~5.1.2"
    is-binary-path "~2.1.0"
    is-glob "~4.0.1"
    normalize-path "~3.0.0"
    readdirp "~3.6.0"
    "anymatch" "~3.1.2"
    "braces" "~3.0.2"
    "glob-parent" "~5.1.2"
    "is-binary-path" "~2.1.0"
    "is-glob" "~4.0.1"
    "normalize-path" "~3.0.0"
    "readdirp" "~3.6.0"
  optionalDependencies:
    fsevents "~2.3.2"
    "fsevents" "~2.3.2"
clsx@^1.2.1:
  version "1.2.1"
  resolved "https://registry.npmmirror.com/clsx/-/clsx-1.2.1.tgz"
  integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
"clsx@^1.2.1":
  "integrity" "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="
  "resolved" "https://registry.npmmirror.com/clsx/-/clsx-1.2.1.tgz"
  "version" "1.2.1"
color-convert@^2.0.1:
  version "2.0.1"
  resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz"
  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
"color-convert@^2.0.1":
  "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
  "resolved" "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz"
  "version" "2.0.1"
  dependencies:
    color-name "~1.1.4"
    "color-name" "~1.1.4"
color-name@~1.1.4:
  version "1.1.4"
  resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz"
  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
"color-name@~1.1.4":
  "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
  "resolved" "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz"
  "version" "1.1.4"
commander@^2.20.0:
  version "2.20.3"
  resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
"commander@^2.20.0":
  "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
  "resolved" "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
  "version" "2.20.3"
component-event@^0.2.1:
  version "0.2.1"
  resolved "https://registry.npmmirror.com/component-event/-/component-event-0.2.1.tgz"
  integrity sha512-wGA++isMqiDq1jPYeyv2as/Bt/u+3iLW0rEa+8NQ82jAv3TgqMiCM+B2SaBdn2DfLilLjjq736YcezihRYhfxw==
"component-event@^0.2.1":
  "integrity" "sha512-wGA++isMqiDq1jPYeyv2as/Bt/u+3iLW0rEa+8NQ82jAv3TgqMiCM+B2SaBdn2DfLilLjjq736YcezihRYhfxw=="
  "resolved" "https://registry.npmmirror.com/component-event/-/component-event-0.2.1.tgz"
  "version" "0.2.1"
compute-scroll-into-view@^1.0.20:
  version "1.0.20"
  resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz"
  integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==
"compute-scroll-into-view@^1.0.20":
  "integrity" "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg=="
  "resolved" "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz"
  "version" "1.0.20"
countup.js@^1.9.3:
  version "1.9.3"
  resolved "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz"
  integrity sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A==
"countup.js@^1.9.3":
  "integrity" "sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A=="
  "resolved" "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz"
  "version" "1.9.3"
crypto-js@^4.1.1:
  version "4.1.1"
  resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz"
  integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
"crypto-js@^4.1.1":
  "integrity" "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
  "resolved" "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz"
  "version" "4.1.1"
csstype@^3.1.3:
  version "3.1.3"
  resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
  integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
"csstype@^3.1.3":
  "integrity" "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
  "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
  "version" "3.1.3"
d@^1.0.1, d@1:
  version "1.0.1"
  resolved "https://registry.npmmirror.com/d/-/d-1.0.1.tgz"
  integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
"d@^1.0.1", "d@1":
  "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA=="
  "resolved" "https://registry.npmmirror.com/d/-/d-1.0.1.tgz"
  "version" "1.0.1"
  dependencies:
    es5-ext "^0.10.50"
    type "^1.0.1"
    "es5-ext" "^0.10.50"
    "type" "^1.0.1"
dayjs@^1.10.4, dayjs@^1.10.6, dayjs@^1.11.3:
  version "1.11.7"
  resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz"
  integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
"dayjs@^1.10.4", "dayjs@^1.10.6", "dayjs@^1.11.3":
  "integrity" "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
  "resolved" "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz"
  "version" "1.11.7"
debug@^4.3.3:
  version "4.3.4"
  resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz"
  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
"debug@^4.3.3":
  "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
  "resolved" "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz"
  "version" "4.3.4"
  dependencies:
    ms "2.1.2"
    "ms" "2.1.2"
debug@=3.1.0:
  version "3.1.0"
  resolved "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz"
  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
"debug@=3.1.0":
  "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g=="
  "resolved" "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz"
  "version" "3.1.0"
  dependencies:
    ms "2.0.0"
    "ms" "2.0.0"
diagram-js-direct-editing@^2.0.0:
  version "2.1.1"
  resolved "https://registry.npmmirror.com/diagram-js-direct-editing/-/diagram-js-direct-editing-2.1.1.tgz"
  integrity sha512-XuNWIpcuUMayp/MZhNRLyJT7zikSvGr8RZWNrHsDpwOIjoRgfYmmJp8WRFCIflMSBHjFg62sqLNM/nXRKrZ2qw==
"diagram-js-direct-editing@^2.0.0":
  "integrity" "sha512-XuNWIpcuUMayp/MZhNRLyJT7zikSvGr8RZWNrHsDpwOIjoRgfYmmJp8WRFCIflMSBHjFg62sqLNM/nXRKrZ2qw=="
  "resolved" "https://registry.npmmirror.com/diagram-js-direct-editing/-/diagram-js-direct-editing-2.1.1.tgz"
  "version" "2.1.1"
  dependencies:
    min-dash "^4.0.0"
    min-dom "^4.0.2"
    "min-dash" "^4.0.0"
    "min-dom" "^4.0.2"
diagram-js@*, diagram-js@^11.9.1:
  version "11.13.1"
  resolved "https://registry.npmmirror.com/diagram-js/-/diagram-js-11.13.1.tgz"
  integrity sha512-6kO0rBN6aBIQiMELfv1oX2Ohes/brlIPuOVZUYAioeWM0EyuazhAXgHeq8iKFt29daU9NGRr4n78esGx8QjtjQ==
"diagram-js@*", "diagram-js@^11.9.1":
  "integrity" "sha512-6kO0rBN6aBIQiMELfv1oX2Ohes/brlIPuOVZUYAioeWM0EyuazhAXgHeq8iKFt29daU9NGRr4n78esGx8QjtjQ=="
  "resolved" "https://registry.npmmirror.com/diagram-js/-/diagram-js-11.13.1.tgz"
  "version" "11.13.1"
  dependencies:
    "@bpmn-io/diagram-js-ui" "^0.2.2"
    clsx "^1.2.1"
    didi "^9.0.2"
    hammerjs "^2.0.1"
    inherits-browser "^0.1.0"
    min-dash "^4.1.0"
    min-dom "^4.1.0"
    object-refs "^0.3.0"
    path-intersection "^2.2.1"
    tiny-svg "^3.0.1"
    "clsx" "^1.2.1"
    "didi" "^9.0.2"
    "hammerjs" "^2.0.1"
    "inherits-browser" "^0.1.0"
    "min-dash" "^4.1.0"
    "min-dom" "^4.1.0"
    "object-refs" "^0.3.0"
    "path-intersection" "^2.2.1"
    "tiny-svg" "^3.0.1"
didi@^9.0.2:
  version "9.0.2"
  resolved "https://registry.npmmirror.com/didi/-/didi-9.0.2.tgz"
  integrity sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==
"didi@^9.0.2":
  "integrity" "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg=="
  "resolved" "https://registry.npmmirror.com/didi/-/didi-9.0.2.tgz"
  "version" "9.0.2"
dom7@^3.0.0:
  version "3.0.0"
  resolved "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz"
  integrity sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==
"dom7@^3.0.0":
  "integrity" "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g=="
  "resolved" "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz"
  "version" "3.0.0"
  dependencies:
    ssr-window "^3.0.0-alpha.1"
    "ssr-window" "^3.0.0-alpha.1"
domify@^1.4.1:
  version "1.4.2"
  resolved "https://registry.npmmirror.com/domify/-/domify-1.4.2.tgz"
  integrity sha512-m4yreHcUWHBncGVV7U+yQzc12vIlq0jMrtHZ5mW6dQMiL/7skSYNVX9wqKwOtyO9SGCgevrAFEgOCAHmamHTUA==
"domify@^1.4.1":
  "integrity" "sha512-m4yreHcUWHBncGVV7U+yQzc12vIlq0jMrtHZ5mW6dQMiL/7skSYNVX9wqKwOtyO9SGCgevrAFEgOCAHmamHTUA=="
  "resolved" "https://registry.npmmirror.com/domify/-/domify-1.4.2.tgz"
  "version" "1.4.2"
element-plus@^2.7.3, element-plus@>=2.2.0:
  version "2.7.3"
  resolved "https://registry.npmjs.org/element-plus/-/element-plus-2.7.3.tgz"
  integrity sha512-OaqY1kQ2xzNyRFyge3fzM7jqMwux+464RBEqd+ybRV9xPiGxtgnj/sVK4iEbnKnzQIa9XK03DOIFzoToUhu1DA==
"element-plus@^2.7.3", "element-plus@>=2.2.0":
  "integrity" "sha512-OaqY1kQ2xzNyRFyge3fzM7jqMwux+464RBEqd+ybRV9xPiGxtgnj/sVK4iEbnKnzQIa9XK03DOIFzoToUhu1DA=="
  "resolved" "https://registry.npmjs.org/element-plus/-/element-plus-2.7.3.tgz"
  "version" "2.7.3"
  dependencies:
    "@ctrl/tinycolor" "^3.4.1"
    "@element-plus/icons-vue" "^2.3.1"
@@ -708,50 +708,50 @@
    "@types/lodash" "^4.14.182"
    "@types/lodash-es" "^4.17.6"
    "@vueuse/core" "^9.1.0"
    async-validator "^4.2.5"
    dayjs "^1.11.3"
    escape-html "^1.0.3"
    lodash "^4.17.21"
    lodash-es "^4.17.21"
    lodash-unified "^1.0.2"
    memoize-one "^6.0.0"
    normalize-wheel-es "^1.2.0"
    "async-validator" "^4.2.5"
    "dayjs" "^1.11.3"
    "escape-html" "^1.0.3"
    "lodash" "^4.17.21"
    "lodash-es" "^4.17.21"
    "lodash-unified" "^1.0.2"
    "memoize-one" "^6.0.0"
    "normalize-wheel-es" "^1.2.0"
entities@^4.5.0:
  version "4.5.0"
  resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
"entities@^4.5.0":
  "integrity" "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
  "resolved" "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
  "version" "4.5.0"
es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.14:
  version "0.10.62"
  resolved "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.62.tgz"
  integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
"es5-ext@^0.10.35", "es5-ext@^0.10.50", "es5-ext@~0.10.14":
  "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA=="
  "resolved" "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.62.tgz"
  "version" "0.10.62"
  dependencies:
    es6-iterator "^2.0.3"
    es6-symbol "^3.1.3"
    next-tick "^1.1.0"
    "es6-iterator" "^2.0.3"
    "es6-symbol" "^3.1.3"
    "next-tick" "^1.1.0"
es6-iterator@^2.0.3:
  version "2.0.3"
  resolved "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz"
  integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
"es6-iterator@^2.0.3":
  "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g=="
  "resolved" "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz"
  "version" "2.0.3"
  dependencies:
    d "1"
    es5-ext "^0.10.35"
    es6-symbol "^3.1.1"
    "d" "1"
    "es5-ext" "^0.10.35"
    "es6-symbol" "^3.1.1"
es6-symbol@^3.1.1, es6-symbol@^3.1.3:
  version "3.1.3"
  resolved "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz"
  integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
"es6-symbol@^3.1.1", "es6-symbol@^3.1.3":
  "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA=="
  "resolved" "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz"
  "version" "3.1.3"
  dependencies:
    d "^1.0.1"
    ext "^1.1.2"
    "d" "^1.0.1"
    "ext" "^1.1.2"
esbuild@^0.20.1:
  version "0.20.2"
  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz"
  integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==
"esbuild@^0.20.1":
  "integrity" "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g=="
  "resolved" "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz"
  "version" "0.20.2"
  optionalDependencies:
    "@esbuild/aix-ppc64" "0.20.2"
    "@esbuild/android-arm" "0.20.2"
@@ -777,506 +777,511 @@
    "@esbuild/win32-ia32" "0.20.2"
    "@esbuild/win32-x64" "0.20.2"
escape-html@^1.0.3:
  version "1.0.3"
  resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz"
  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
"escape-html@^1.0.3":
  "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
  "resolved" "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz"
  "version" "1.0.3"
escape-string-regexp@^5.0.0:
  version "5.0.0"
  resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
  integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
"escape-string-regexp@^5.0.0":
  "integrity" "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
  "resolved" "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
  "version" "5.0.0"
estree-walker@^2.0.2:
  version "2.0.2"
  resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz"
  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
"estree-walker@^2.0.2":
  "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
  "resolved" "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz"
  "version" "2.0.2"
event-emitter@^0.3.5:
  version "0.3.5"
  resolved "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz"
  integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==
"event-emitter@^0.3.5":
  "integrity" "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA=="
  "resolved" "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz"
  "version" "0.3.5"
  dependencies:
    d "1"
    es5-ext "~0.10.14"
    "d" "1"
    "es5-ext" "~0.10.14"
ext@^1.1.2:
  version "1.7.0"
  resolved "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz"
  integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
"ext@^1.1.2":
  "integrity" "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw=="
  "resolved" "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz"
  "version" "1.7.0"
  dependencies:
    type "^2.7.2"
    "type" "^2.7.2"
fast-glob@^3.2.12:
  version "3.2.12"
  resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz"
  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
"fast-glob@^3.2.12":
  "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w=="
  "resolved" "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz"
  "version" "3.2.12"
  dependencies:
    "@nodelib/fs.stat" "^2.0.2"
    "@nodelib/fs.walk" "^1.2.3"
    glob-parent "^5.1.2"
    merge2 "^1.3.0"
    micromatch "^4.0.4"
    "glob-parent" "^5.1.2"
    "merge2" "^1.3.0"
    "micromatch" "^4.0.4"
fastq@^1.6.0:
  version "1.16.0"
  resolved "https://registry.npmmirror.com/fastq/-/fastq-1.16.0.tgz"
  integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==
"fastq@^1.6.0":
  "integrity" "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA=="
  "resolved" "https://registry.npmmirror.com/fastq/-/fastq-1.16.0.tgz"
  "version" "1.16.0"
  dependencies:
    reusify "^1.0.4"
    "reusify" "^1.0.4"
fill-range@^7.0.1:
  version "7.0.1"
  resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz"
  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
"fill-range@^7.0.1":
  "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="
  "resolved" "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz"
  "version" "7.0.1"
  dependencies:
    to-regex-range "^5.0.1"
    "to-regex-range" "^5.0.1"
follow-redirects@^1.14.0:
  version "1.15.4"
  resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.4.tgz"
  integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
"follow-redirects@^1.14.0":
  "integrity" "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw=="
  "resolved" "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.4.tgz"
  "version" "1.15.4"
follow-redirects@1.5.10:
  version "1.5.10"
  resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz"
  integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
"follow-redirects@1.5.10":
  "integrity" "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ=="
  "resolved" "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz"
  "version" "1.5.10"
  dependencies:
    debug "=3.1.0"
    "debug" "=3.1.0"
fs-extra@^10.0.0:
  version "10.1.0"
  resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz"
  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
"fs-extra@^10.0.0":
  "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="
  "resolved" "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz"
  "version" "10.1.0"
  dependencies:
    graceful-fs "^4.2.0"
    jsonfile "^6.0.1"
    universalify "^2.0.0"
    "graceful-fs" "^4.2.0"
    "jsonfile" "^6.0.1"
    "universalify" "^2.0.0"
fsevents@~2.3.2, fsevents@~2.3.3:
  version "2.3.3"
  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
glob-parent@^5.1.2, glob-parent@~5.1.2:
  version "5.1.2"
  resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
"glob-parent@^5.1.2", "glob-parent@~5.1.2":
  "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
  "resolved" "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
  "version" "5.1.2"
  dependencies:
    is-glob "^4.0.1"
    "is-glob" "^4.0.1"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
  version "4.2.11"
  resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz"
  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
"graceful-fs@^4.1.6", "graceful-fs@^4.2.0":
  "integrity" "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
  "resolved" "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz"
  "version" "4.2.11"
hammerjs@^2.0.1:
  version "2.0.8"
  resolved "https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz"
  integrity sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==
"hammerjs@^2.0.1":
  "integrity" "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ=="
  "resolved" "https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz"
  "version" "2.0.8"
has-flag@^4.0.0:
  version "4.0.0"
  resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz"
  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
"has-flag@^4.0.0":
  "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
  "resolved" "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz"
  "version" "4.0.0"
htm@^3.1.1:
  version "3.1.1"
  resolved "https://registry.npmmirror.com/htm/-/htm-3.1.1.tgz"
  integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==
"htm@^3.1.1":
  "integrity" "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ=="
  "resolved" "https://registry.npmmirror.com/htm/-/htm-3.1.1.tgz"
  "version" "3.1.1"
html-void-elements@^2.0.0:
  version "2.0.1"
  resolved "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz"
  integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==
"html-void-elements@^2.0.0":
  "integrity" "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
  "resolved" "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz"
  "version" "2.0.1"
i18next@^20.4.0:
  version "20.6.1"
  resolved "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz"
  integrity sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==
"i18next@^20.4.0":
  "integrity" "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A=="
  "resolved" "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz"
  "version" "20.6.1"
  dependencies:
    "@babel/runtime" "^7.12.0"
ids@^1.0.0:
  version "1.0.5"
  resolved "https://registry.npmmirror.com/ids/-/ids-1.0.5.tgz"
  integrity sha512-XQ0yom/4KWTL29sLG+tyuycy7UmeaM/79GRtSJq6IG9cJGIPeBz5kwDCguie3TwxaMNIc3WtPi0cTa1XYHicpw==
"ids@^1.0.0":
  "integrity" "sha512-XQ0yom/4KWTL29sLG+tyuycy7UmeaM/79GRtSJq6IG9cJGIPeBz5kwDCguie3TwxaMNIc3WtPi0cTa1XYHicpw=="
  "resolved" "https://registry.npmmirror.com/ids/-/ids-1.0.5.tgz"
  "version" "1.0.5"
immer@^9.0.6:
  version "9.0.21"
  resolved "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz"
  integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==
"immer@^9.0.6":
  "integrity" "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA=="
  "resolved" "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz"
  "version" "9.0.21"
immutable@^4.0.0:
  version "4.3.4"
  resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz"
  integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
"immutable@^4.0.0":
  "integrity" "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA=="
  "resolved" "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz"
  "version" "4.3.4"
inherits-browser@^0.1.0:
  version "0.1.0"
  resolved "https://registry.npmmirror.com/inherits-browser/-/inherits-browser-0.1.0.tgz"
  integrity sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==
"inherits-browser@^0.1.0":
  "integrity" "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw=="
  "resolved" "https://registry.npmmirror.com/inherits-browser/-/inherits-browser-0.1.0.tgz"
  "version" "0.1.0"
is-binary-path@~2.1.0:
  version "2.1.0"
  resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz"
  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
"is-binary-path@~2.1.0":
  "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="
  "resolved" "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz"
  "version" "2.1.0"
  dependencies:
    binary-extensions "^2.0.0"
    "binary-extensions" "^2.0.0"
is-buffer@^2.0.2:
  version "2.0.5"
  resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz"
  integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
"is-buffer@^2.0.2":
  "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
  "resolved" "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz"
  "version" "2.0.5"
is-extglob@^2.1.1:
  version "2.1.1"
  resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz"
  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
"is-extglob@^2.1.1":
  "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
  "resolved" "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz"
  "version" "2.1.1"
is-glob@^4.0.1, is-glob@~4.0.1:
  version "4.0.3"
  resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz"
  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
"is-glob@^4.0.1", "is-glob@~4.0.1":
  "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
  "resolved" "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz"
  "version" "4.0.3"
  dependencies:
    is-extglob "^2.1.1"
    "is-extglob" "^2.1.1"
is-hotkey@^0.2.0:
  version "0.2.0"
  resolved "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz"
  integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==
"is-hotkey@^0.2.0":
  "integrity" "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw=="
  "resolved" "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz"
  "version" "0.2.0"
is-number@^7.0.0:
  version "7.0.0"
  resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz"
  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
"is-number@^7.0.0":
  "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
  "resolved" "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz"
  "version" "7.0.0"
is-plain-object@^5.0.0:
  version "5.0.0"
  resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz"
  integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
"is-plain-object@^5.0.0":
  "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
  "resolved" "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz"
  "version" "5.0.0"
is-url@^1.2.4:
  version "1.2.4"
  resolved "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz"
  integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
"is-url@^1.2.4":
  "integrity" "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
  "resolved" "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz"
  "version" "1.2.4"
js-base64@^3.7.4:
  version "3.7.5"
  resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz"
  integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==
"js-base64@^3.7.4":
  "integrity" "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA=="
  "resolved" "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz"
  "version" "3.7.5"
js-cookie@^3.0.0:
  version "3.0.5"
  resolved "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz"
  integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==
"js-cookie@^3.0.0":
  "integrity" "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="
  "resolved" "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz"
  "version" "3.0.5"
js-md5@^0.7.3:
  version "0.7.3"
  resolved "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz"
  integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==
"js-md5@^0.7.3":
  "integrity" "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
  "resolved" "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz"
  "version" "0.7.3"
jsbn@^1.1.0:
  version "1.1.0"
  resolved "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz"
  integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
"jsbn@^1.1.0":
  "integrity" "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
  "resolved" "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz"
  "version" "1.1.0"
jsonc-parser@^3.2.0:
  version "3.2.0"
  resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz"
  integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
"jsonc-parser@^3.2.0":
  "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="
  "resolved" "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz"
  "version" "3.2.0"
jsonfile@^6.0.1:
  version "6.1.0"
  resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz"
  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
"jsonfile@^6.0.1":
  "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="
  "resolved" "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz"
  "version" "6.1.0"
  dependencies:
    universalify "^2.0.0"
    "universalify" "^2.0.0"
  optionalDependencies:
    graceful-fs "^4.1.6"
    "graceful-fs" "^4.1.6"
local-pkg@^0.4.2, local-pkg@^0.4.3:
  version "0.4.3"
  resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz"
  integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
"local-pkg@^0.4.2", "local-pkg@^0.4.3":
  "integrity" "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g=="
  "resolved" "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz"
  "version" "0.4.3"
lodash-es@*, lodash-es@^4.17.21:
  version "4.17.21"
  resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
"lodash-es@*", "lodash-es@^4.17.21":
  "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
  "resolved" "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
  "version" "4.17.21"
lodash-unified@^1.0.2:
  version "1.0.3"
  resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz"
  integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==
"lodash-unified@^1.0.2":
  "integrity" "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ=="
  "resolved" "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz"
  "version" "1.0.3"
lodash.camelcase@^4.3.0:
  version "4.3.0"
  resolved "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz"
  integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
"lodash.camelcase@^4.3.0":
  "integrity" "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
  "resolved" "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz"
  "version" "4.3.0"
lodash.clonedeep@^4.5.0:
  version "4.5.0"
  resolved "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
  integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
"lodash.clonedeep@^4.5.0":
  "integrity" "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
  "resolved" "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
  "version" "4.5.0"
lodash.debounce@^4.0.8:
  version "4.0.8"
  resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz"
  integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
"lodash.debounce@^4.0.8":
  "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
  "resolved" "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz"
  "version" "4.0.8"
lodash.foreach@^4.5.0:
  version "4.5.0"
  resolved "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz"
  integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==
"lodash.foreach@^4.5.0":
  "integrity" "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
  "resolved" "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz"
  "version" "4.5.0"
lodash.isequal@^4.5.0:
  version "4.5.0"
  resolved "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz"
  integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
"lodash.isequal@^4.5.0":
  "integrity" "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
  "resolved" "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz"
  "version" "4.5.0"
lodash.throttle@^4.1.1:
  version "4.1.1"
  resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz"
  integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
"lodash.throttle@^4.1.1":
  "integrity" "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
  "resolved" "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz"
  "version" "4.1.1"
lodash.toarray@^4.4.0:
  version "4.4.0"
  resolved "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz"
  integrity sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==
"lodash.toarray@^4.4.0":
  "integrity" "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw=="
  "resolved" "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz"
  "version" "4.4.0"
lodash@*, lodash@^4.17.21:
  version "4.17.21"
  resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz"
  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
"lodash@*", "lodash@^4.17.21":
  "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
  "resolved" "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz"
  "version" "4.17.21"
magic-string@^0.25.7:
  version "0.25.9"
  resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz"
  integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
"magic-string@^0.25.7":
  "integrity" "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="
  "resolved" "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz"
  "version" "0.25.9"
  dependencies:
    sourcemap-codec "^1.4.8"
    "sourcemap-codec" "^1.4.8"
magic-string@^0.26.7:
  version "0.26.7"
  resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz"
  integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==
"magic-string@^0.26.7":
  "integrity" "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow=="
  "resolved" "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz"
  "version" "0.26.7"
  dependencies:
    sourcemap-codec "^1.4.8"
    "sourcemap-codec" "^1.4.8"
magic-string@^0.27.0:
  version "0.27.0"
  resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.27.0.tgz"
  integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
"magic-string@^0.27.0":
  "integrity" "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA=="
  "resolved" "https://registry.npmmirror.com/magic-string/-/magic-string-0.27.0.tgz"
  "version" "0.27.0"
  dependencies:
    "@jridgewell/sourcemap-codec" "^1.4.13"
magic-string@^0.30.10:
  version "0.30.10"
  resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz"
  integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==
"magic-string@^0.30.10":
  "integrity" "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ=="
  "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz"
  "version" "0.30.10"
  dependencies:
    "@jridgewell/sourcemap-codec" "^1.4.15"
memoize-one@^6.0.0:
  version "6.0.0"
  resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz"
  integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
"memoize-one@^6.0.0":
  "integrity" "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
  "resolved" "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz"
  "version" "6.0.0"
merge2@^1.3.0:
  version "1.4.1"
  resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz"
  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
"merge2@^1.3.0":
  "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
  "resolved" "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz"
  "version" "1.4.1"
micromatch@^4.0.4:
  version "4.0.5"
  resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz"
  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
"micromatch@^4.0.4":
  "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="
  "resolved" "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz"
  "version" "4.0.5"
  dependencies:
    braces "^3.0.2"
    picomatch "^2.3.1"
    "braces" "^3.0.2"
    "picomatch" "^2.3.1"
mime-match@^1.0.2:
  version "1.0.2"
  resolved "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz"
  integrity sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==
"mime-match@^1.0.2":
  "integrity" "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg=="
  "resolved" "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz"
  "version" "1.0.2"
  dependencies:
    wildcard "^1.1.0"
    "wildcard" "^1.1.0"
min-dash@^4.0.0, min-dash@^4.1.0:
  version "4.1.1"
  resolved "https://registry.npmmirror.com/min-dash/-/min-dash-4.1.1.tgz"
  integrity sha512-r+Z6vxXLSGr+otyCPx9NKPCSixw7LdfZREPTmqfd2a/d5D6w4NCdOxRJs+HyFO6v2pQkyHroGSiINWECK+OWPg==
"min-dash@^4.0.0", "min-dash@^4.1.0":
  "integrity" "sha512-r+Z6vxXLSGr+otyCPx9NKPCSixw7LdfZREPTmqfd2a/d5D6w4NCdOxRJs+HyFO6v2pQkyHroGSiINWECK+OWPg=="
  "resolved" "https://registry.npmmirror.com/min-dash/-/min-dash-4.1.1.tgz"
  "version" "4.1.1"
min-dom@^4.0.2, min-dom@^4.0.3, min-dom@^4.1.0:
  version "4.1.0"
  resolved "https://registry.npmmirror.com/min-dom/-/min-dom-4.1.0.tgz"
  integrity sha512-1lj1EyoSwY/UmTeT/hhPiZTsq+vK9D+8FAJ/53iK5jT1otkG9rJTixSKdjmTieEvdfES+sKbbTptzaQJhnacjA==
"min-dom@^4.0.2", "min-dom@^4.0.3", "min-dom@^4.1.0":
  "integrity" "sha512-1lj1EyoSwY/UmTeT/hhPiZTsq+vK9D+8FAJ/53iK5jT1otkG9rJTixSKdjmTieEvdfES+sKbbTptzaQJhnacjA=="
  "resolved" "https://registry.npmmirror.com/min-dom/-/min-dom-4.1.0.tgz"
  "version" "4.1.0"
  dependencies:
    component-event "^0.2.1"
    domify "^1.4.1"
    min-dash "^4.0.0"
    "component-event" "^0.2.1"
    "domify" "^1.4.1"
    "min-dash" "^4.0.0"
mlly@^1.1.0, mlly@^1.2.0:
  version "1.4.2"
  resolved "https://registry.npmmirror.com/mlly/-/mlly-1.4.2.tgz"
  integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==
"mitt@^3.0.1":
  "integrity" "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
  "resolved" "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz"
  "version" "3.0.1"
"mlly@^1.1.0", "mlly@^1.2.0":
  "integrity" "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg=="
  "resolved" "https://registry.npmmirror.com/mlly/-/mlly-1.4.2.tgz"
  "version" "1.4.2"
  dependencies:
    acorn "^8.10.0"
    pathe "^1.1.1"
    pkg-types "^1.0.3"
    ufo "^1.3.0"
    "acorn" "^8.10.0"
    "pathe" "^1.1.1"
    "pkg-types" "^1.0.3"
    "ufo" "^1.3.0"
moddle-xml@^10.1.0:
  version "10.1.0"
  resolved "https://registry.npmmirror.com/moddle-xml/-/moddle-xml-10.1.0.tgz"
  integrity sha512-erWckwLt+dYskewKXJso9u+aAZ5172lOiYxSOqKCPTy7L/xmqH1PoeoA7eVC7oJTt3PqF5TkZzUmbjGH6soQBg==
"moddle-xml@^10.1.0":
  "integrity" "sha512-erWckwLt+dYskewKXJso9u+aAZ5172lOiYxSOqKCPTy7L/xmqH1PoeoA7eVC7oJTt3PqF5TkZzUmbjGH6soQBg=="
  "resolved" "https://registry.npmmirror.com/moddle-xml/-/moddle-xml-10.1.0.tgz"
  "version" "10.1.0"
  dependencies:
    min-dash "^4.0.0"
    moddle "^6.0.0"
    saxen "^8.1.2"
    "min-dash" "^4.0.0"
    "moddle" "^6.0.0"
    "saxen" "^8.1.2"
moddle@^6.0.0, moddle@^6.2.3:
  version "6.2.3"
  resolved "https://registry.npmmirror.com/moddle/-/moddle-6.2.3.tgz"
  integrity sha512-bLVN+ZHL3aKnhxc19XtjUfvdJsS3EsiEJC7bT6YPD11qYmTzvsxrGgyYz1Ouof7TZuGw0lDJ1OLmEnxcpQWk3Q==
"moddle@^6.0.0", "moddle@^6.2.3":
  "integrity" "sha512-bLVN+ZHL3aKnhxc19XtjUfvdJsS3EsiEJC7bT6YPD11qYmTzvsxrGgyYz1Ouof7TZuGw0lDJ1OLmEnxcpQWk3Q=="
  "resolved" "https://registry.npmmirror.com/moddle/-/moddle-6.2.3.tgz"
  "version" "6.2.3"
  dependencies:
    min-dash "^4.0.0"
    "min-dash" "^4.0.0"
monaco-editor@0.36.1:
  version "0.36.1"
  resolved "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.36.1.tgz"
  integrity sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg==
"monaco-editor@0.36.1":
  "integrity" "sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg=="
  "resolved" "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.36.1.tgz"
  "version" "0.36.1"
ms@2.0.0:
  version "2.0.0"
  resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz"
  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
"ms@2.0.0":
  "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
  "resolved" "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz"
  "version" "2.0.0"
ms@2.1.2:
  version "2.1.2"
  resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz"
  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
"ms@2.1.2":
  "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
  "resolved" "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz"
  "version" "2.1.2"
namespace-emitter@^2.0.1:
  version "2.0.1"
  resolved "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz"
  integrity sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==
"namespace-emitter@^2.0.1":
  "integrity" "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="
  "resolved" "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz"
  "version" "2.0.1"
nanoid@^3.1.25, nanoid@^3.2.0, nanoid@^3.3.7:
  version "3.3.7"
  resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz"
  integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
"nanoid@^3.1.25", "nanoid@^3.2.0", "nanoid@^3.3.7":
  "integrity" "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
  "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz"
  "version" "3.3.7"
next-tick@^1.1.0:
  version "1.1.0"
  resolved "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz"
  integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
"next-tick@^1.1.0":
  "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
  "resolved" "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz"
  "version" "1.1.0"
normalize-path@^3.0.0, normalize-path@~3.0.0:
  version "3.0.0"
  resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz"
  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
"normalize-path@^3.0.0", "normalize-path@~3.0.0":
  "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
  "resolved" "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz"
  "version" "3.0.0"
normalize-wheel-es@^1.2.0:
  version "1.2.0"
  resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz"
  integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==
"normalize-wheel-es@^1.2.0":
  "integrity" "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
  "resolved" "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz"
  "version" "1.2.0"
nprogress@^0.2.0:
  version "0.2.0"
  resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz"
  integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
"nprogress@^0.2.0":
  "integrity" "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA=="
  "resolved" "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz"
  "version" "0.2.0"
object-refs@^0.3.0:
  version "0.3.0"
  resolved "https://registry.npmmirror.com/object-refs/-/object-refs-0.3.0.tgz"
  integrity sha512-eP0ywuoWOaDoiake/6kTJlPJhs+k0qNm4nYRzXLNHj6vh+5M3i9R1epJTdxIPGlhWc4fNRQ7a6XJNCX+/L4FOQ==
"object-refs@^0.3.0":
  "integrity" "sha512-eP0ywuoWOaDoiake/6kTJlPJhs+k0qNm4nYRzXLNHj6vh+5M3i9R1epJTdxIPGlhWc4fNRQ7a6XJNCX+/L4FOQ=="
  "resolved" "https://registry.npmmirror.com/object-refs/-/object-refs-0.3.0.tgz"
  "version" "0.3.0"
path-intersection@^2.2.1:
  version "2.2.1"
  resolved "https://registry.npmmirror.com/path-intersection/-/path-intersection-2.2.1.tgz"
  integrity sha512-9u8xvMcSfuOiStv9bPdnRJQhGQXLKurew94n4GPQCdH1nj9QKC9ObbNoIpiRq8skiOBxKkt277PgOoFgAt3/rA==
"path-intersection@^2.2.1":
  "integrity" "sha512-9u8xvMcSfuOiStv9bPdnRJQhGQXLKurew94n4GPQCdH1nj9QKC9ObbNoIpiRq8skiOBxKkt277PgOoFgAt3/rA=="
  "resolved" "https://registry.npmmirror.com/path-intersection/-/path-intersection-2.2.1.tgz"
  "version" "2.2.1"
pathe@^1.0.0, pathe@^1.1.0, pathe@^1.1.1:
  version "1.1.1"
  resolved "https://registry.npmmirror.com/pathe/-/pathe-1.1.1.tgz"
  integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==
"pathe@^1.0.0", "pathe@^1.1.0", "pathe@^1.1.1":
  "integrity" "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q=="
  "resolved" "https://registry.npmmirror.com/pathe/-/pathe-1.1.1.tgz"
  "version" "1.1.1"
picocolors@^1.0.0:
  version "1.0.1"
  resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz"
  integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
"picocolors@^1.0.0":
  "integrity" "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
  "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz"
  "version" "1.0.1"
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
  version "2.3.1"
  resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz"
  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.3.1":
  "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
  "resolved" "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz"
  "version" "2.3.1"
pkg-types@^1.0.1, pkg-types@^1.0.3:
  version "1.0.3"
  resolved "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz"
  integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==
"pkg-types@^1.0.1", "pkg-types@^1.0.3":
  "integrity" "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A=="
  "resolved" "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz"
  "version" "1.0.3"
  dependencies:
    jsonc-parser "^3.2.0"
    mlly "^1.2.0"
    pathe "^1.1.0"
    "jsonc-parser" "^3.2.0"
    "mlly" "^1.2.0"
    "pathe" "^1.1.0"
postcss@^8.4.38:
  version "8.4.38"
  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
  integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
"postcss@^8.4.38":
  "integrity" "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A=="
  "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
  "version" "8.4.38"
  dependencies:
    nanoid "^3.3.7"
    picocolors "^1.0.0"
    source-map-js "^1.2.0"
    "nanoid" "^3.3.7"
    "picocolors" "^1.0.0"
    "source-map-js" "^1.2.0"
preact@^10.11.2, preact@^10.5.13:
  version "10.19.3"
  resolved "https://registry.npmmirror.com/preact/-/preact-10.19.3.tgz"
  integrity sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==
"preact@^10.11.2", "preact@^10.5.13":
  "integrity" "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ=="
  "resolved" "https://registry.npmmirror.com/preact/-/preact-10.19.3.tgz"
  "version" "10.19.3"
prettier@^2.8.7:
  version "2.8.8"
  resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz"
  integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
"prettier@^2.8.7":
  "integrity" "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="
  "resolved" "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz"
  "version" "2.8.8"
prismjs@^1.23.0:
  version "1.29.0"
  resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz"
  integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
"prismjs@^1.23.0":
  "integrity" "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="
  "resolved" "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz"
  "version" "1.29.0"
queue-microtask@^1.2.2:
  version "1.2.3"
  resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz"
  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
"queue-microtask@^1.2.2":
  "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
  "resolved" "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz"
  "version" "1.2.3"
randomcolor@^0.6.2:
  version "0.6.2"
  resolved "https://registry.npmmirror.com/randomcolor/-/randomcolor-0.6.2.tgz"
  integrity sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A==
"randomcolor@^0.6.2":
  "integrity" "sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A=="
  "resolved" "https://registry.npmmirror.com/randomcolor/-/randomcolor-0.6.2.tgz"
  "version" "0.6.2"
readdirp@~3.6.0:
  version "3.6.0"
  resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz"
  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
"readdirp@~3.6.0":
  "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
  "resolved" "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz"
  "version" "3.6.0"
  dependencies:
    picomatch "^2.2.1"
    "picomatch" "^2.2.1"
regenerator-runtime@^0.14.0:
  version "0.14.1"
  resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
  integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
"reconnecting-websocket@^4.4.0":
  "integrity" "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng=="
  "resolved" "https://registry.npmmirror.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz"
  "version" "4.4.0"
reusify@^1.0.4:
  version "1.0.4"
  resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz"
  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
"regenerator-runtime@^0.14.0":
  "integrity" "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
  "resolved" "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
  "version" "0.14.1"
rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^4.13.0:
  version "4.18.0"
  resolved "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz"
  integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==
"reusify@^1.0.4":
  "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
  "resolved" "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz"
  "version" "1.0.4"
"rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0", "rollup@^4.13.0":
  "integrity" "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg=="
  "resolved" "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz"
  "version" "4.18.0"
  dependencies:
    "@types/estree" "1.0.5"
  optionalDependencies:
@@ -1296,251 +1301,251 @@
    "@rollup/rollup-win32-arm64-msvc" "4.18.0"
    "@rollup/rollup-win32-ia32-msvc" "4.18.0"
    "@rollup/rollup-win32-x64-msvc" "4.18.0"
    fsevents "~2.3.2"
    "fsevents" "~2.3.2"
run-parallel@^1.1.9:
  version "1.2.0"
  resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz"
  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
"run-parallel@^1.1.9":
  "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
  "resolved" "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz"
  "version" "1.2.0"
  dependencies:
    queue-microtask "^1.2.2"
    "queue-microtask" "^1.2.2"
sass@*, sass@^1.77.2:
  version "1.77.2"
  resolved "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz"
  integrity sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==
"sass@*", "sass@^1.77.2":
  "integrity" "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA=="
  "resolved" "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz"
  "version" "1.77.2"
  dependencies:
    chokidar ">=3.0.0 <4.0.0"
    immutable "^4.0.0"
    source-map-js ">=0.6.2 <2.0.0"
    "chokidar" ">=3.0.0 <4.0.0"
    "immutable" "^4.0.0"
    "source-map-js" ">=0.6.2 <2.0.0"
saxen@^8.1.2:
  version "8.1.2"
  resolved "https://registry.npmmirror.com/saxen/-/saxen-8.1.2.tgz"
  integrity sha512-xUOiiFbc3Ow7p8KMxwsGICPx46ZQvy3+qfNVhrkwfz3Vvq45eGt98Ft5IQaA1R/7Tb5B5MKh9fUR9x3c3nDTxw==
"saxen@^8.1.2":
  "integrity" "sha512-xUOiiFbc3Ow7p8KMxwsGICPx46ZQvy3+qfNVhrkwfz3Vvq45eGt98Ft5IQaA1R/7Tb5B5MKh9fUR9x3c3nDTxw=="
  "resolved" "https://registry.npmmirror.com/saxen/-/saxen-8.1.2.tgz"
  "version" "8.1.2"
scroll-into-view-if-needed@^2.2.28:
  version "2.2.31"
  resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz"
  integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==
"scroll-into-view-if-needed@^2.2.28":
  "integrity" "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA=="
  "resolved" "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz"
  "version" "2.2.31"
  dependencies:
    compute-scroll-into-view "^1.0.20"
    "compute-scroll-into-view" "^1.0.20"
scule@^1.0.0:
  version "1.1.1"
  resolved "https://registry.npmmirror.com/scule/-/scule-1.1.1.tgz"
  integrity sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ==
"scule@^1.0.0":
  "integrity" "sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ=="
  "resolved" "https://registry.npmmirror.com/scule/-/scule-1.1.1.tgz"
  "version" "1.1.1"
slate-history@^0.66.0:
  version "0.66.0"
  resolved "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz"
  integrity sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==
"slate-history@^0.66.0":
  "integrity" "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng=="
  "resolved" "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz"
  "version" "0.66.0"
  dependencies:
    is-plain-object "^5.0.0"
    "is-plain-object" "^5.0.0"
slate@^0.72.0, slate@>=0.65.3:
  version "0.72.8"
  resolved "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz"
  integrity sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==
"slate@^0.72.0", "slate@>=0.65.3":
  "integrity" "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw=="
  "resolved" "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz"
  "version" "0.72.8"
  dependencies:
    immer "^9.0.6"
    is-plain-object "^5.0.0"
    tiny-warning "^1.0.3"
    "immer" "^9.0.6"
    "is-plain-object" "^5.0.0"
    "tiny-warning" "^1.0.3"
sm-crypto@^0.3.13:
  version "0.3.13"
  resolved "https://registry.npmmirror.com/sm-crypto/-/sm-crypto-0.3.13.tgz"
  integrity sha512-ztNF+pZq6viCPMA1A6KKu3bgpkmYti5avykRHbcFIdSipFdkVmfUw2CnpM2kBJyppIalqvczLNM3wR8OQ0pT5w==
"sm-crypto@^0.3.13":
  "integrity" "sha512-ztNF+pZq6viCPMA1A6KKu3bgpkmYti5avykRHbcFIdSipFdkVmfUw2CnpM2kBJyppIalqvczLNM3wR8OQ0pT5w=="
  "resolved" "https://registry.npmmirror.com/sm-crypto/-/sm-crypto-0.3.13.tgz"
  "version" "0.3.13"
  dependencies:
    jsbn "^1.1.0"
    "jsbn" "^1.1.0"
snabbdom@^3.1.0:
  version "3.5.1"
  resolved "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.5.1.tgz"
  integrity sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA==
"snabbdom@^3.1.0":
  "integrity" "sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA=="
  "resolved" "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.5.1.tgz"
  "version" "3.5.1"
source-map-js@^1.2.0, "source-map-js@>=0.6.2 <2.0.0":
  version "1.2.0"
  resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
  integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
"source-map-js@^1.2.0", "source-map-js@>=0.6.2 <2.0.0":
  "integrity" "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="
  "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
  "version" "1.2.0"
source-map-support@~0.5.20:
  version "0.5.21"
  resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz"
  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
"source-map-support@~0.5.20":
  "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="
  "resolved" "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz"
  "version" "0.5.21"
  dependencies:
    buffer-from "^1.0.0"
    source-map "^0.6.0"
    "buffer-from" "^1.0.0"
    "source-map" "^0.6.0"
source-map@^0.6.0, source-map@0.6.1:
  version "0.6.1"
  resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
"source-map@^0.6.0", "source-map@0.6.1":
  "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
  "resolved" "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
  "version" "0.6.1"
sourcemap-codec@^1.4.8:
  version "1.4.8"
  resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
  integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
"sourcemap-codec@^1.4.8":
  "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
  "resolved" "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
  "version" "1.4.8"
ssr-window@^3.0.0-alpha.1:
  version "3.0.0"
  resolved "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz"
  integrity sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==
"ssr-window@^3.0.0-alpha.1":
  "integrity" "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA=="
  "resolved" "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz"
  "version" "3.0.0"
strip-literal@^1.0.0:
  version "1.3.0"
  resolved "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz"
  integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==
"strip-literal@^1.0.0":
  "integrity" "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg=="
  "resolved" "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz"
  "version" "1.3.0"
  dependencies:
    acorn "^8.10.0"
    "acorn" "^8.10.0"
supports-color@^7.1.0:
  version "7.2.0"
  resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz"
  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
"supports-color@^7.1.0":
  "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
  "resolved" "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz"
  "version" "7.2.0"
  dependencies:
    has-flag "^4.0.0"
    "has-flag" "^4.0.0"
terser@^5.31.1, terser@^5.4.0:
  version "5.31.1"
  resolved "https://registry.npmmirror.com/terser/-/terser-5.31.1.tgz"
  integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==
"terser@^5.31.1", "terser@^5.4.0":
  "integrity" "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg=="
  "resolved" "https://registry.npmmirror.com/terser/-/terser-5.31.1.tgz"
  "version" "5.31.1"
  dependencies:
    "@jridgewell/source-map" "^0.3.3"
    acorn "^8.8.2"
    commander "^2.20.0"
    source-map-support "~0.5.20"
    "acorn" "^8.8.2"
    "commander" "^2.20.0"
    "source-map-support" "~0.5.20"
tiny-svg@^3.0.0, tiny-svg@^3.0.1:
  version "3.0.1"
  resolved "https://registry.npmmirror.com/tiny-svg/-/tiny-svg-3.0.1.tgz"
  integrity sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==
"tiny-svg@^3.0.0", "tiny-svg@^3.0.1":
  "integrity" "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg=="
  "resolved" "https://registry.npmmirror.com/tiny-svg/-/tiny-svg-3.0.1.tgz"
  "version" "3.0.1"
tiny-warning@^1.0.3:
  version "1.0.3"
  resolved "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz"
  integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
"tiny-warning@^1.0.3":
  "integrity" "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
  "resolved" "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz"
  "version" "1.0.3"
to-regex-range@^5.0.1:
  version "5.0.1"
  resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz"
  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
"to-regex-range@^5.0.1":
  "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
  "resolved" "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz"
  "version" "5.0.1"
  dependencies:
    is-number "^7.0.0"
    "is-number" "^7.0.0"
type@^1.0.1:
  version "1.2.0"
  resolved "https://registry.npmmirror.com/type/-/type-1.2.0.tgz"
  integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
"type@^1.0.1":
  "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
  "resolved" "https://registry.npmmirror.com/type/-/type-1.2.0.tgz"
  "version" "1.2.0"
type@^2.7.2:
  version "2.7.2"
  resolved "https://registry.npmmirror.com/type/-/type-2.7.2.tgz"
  integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
"type@^2.7.2":
  "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
  "resolved" "https://registry.npmmirror.com/type/-/type-2.7.2.tgz"
  "version" "2.7.2"
ufo@^1.3.0:
  version "1.3.2"
  resolved "https://registry.npmmirror.com/ufo/-/ufo-1.3.2.tgz"
  integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==
"ufo@^1.3.0":
  "integrity" "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA=="
  "resolved" "https://registry.npmmirror.com/ufo/-/ufo-1.3.2.tgz"
  "version" "1.3.2"
unimport@^1.0.1:
  version "1.3.0"
  resolved "https://registry.npmmirror.com/unimport/-/unimport-1.3.0.tgz"
  integrity sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw==
"unimport@^1.0.1":
  "integrity" "sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw=="
  "resolved" "https://registry.npmmirror.com/unimport/-/unimport-1.3.0.tgz"
  "version" "1.3.0"
  dependencies:
    "@rollup/pluginutils" "^5.0.2"
    escape-string-regexp "^5.0.0"
    fast-glob "^3.2.12"
    local-pkg "^0.4.3"
    magic-string "^0.27.0"
    mlly "^1.1.0"
    pathe "^1.0.0"
    pkg-types "^1.0.1"
    scule "^1.0.0"
    strip-literal "^1.0.0"
    unplugin "^1.0.1"
    "escape-string-regexp" "^5.0.0"
    "fast-glob" "^3.2.12"
    "local-pkg" "^0.4.3"
    "magic-string" "^0.27.0"
    "mlly" "^1.1.0"
    "pathe" "^1.0.0"
    "pkg-types" "^1.0.1"
    "scule" "^1.0.0"
    "strip-literal" "^1.0.0"
    "unplugin" "^1.0.1"
universalify@^2.0.0:
  version "2.0.1"
  resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz"
  integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
"universalify@^2.0.0":
  "integrity" "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
  "resolved" "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz"
  "version" "2.0.1"
unplugin-auto-import@^0.11.2:
  version "0.11.5"
  resolved "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.11.5.tgz"
  integrity sha512-nvbL2AQwLRR8wbHpJ6L1EBVNmjN045RSedTa4NtsGRkSQFXkI1iKHs4dTqJwcKZsnFrZOAKtLPiN1/oQTObLZw==
"unplugin-auto-import@^0.11.2":
  "integrity" "sha512-nvbL2AQwLRR8wbHpJ6L1EBVNmjN045RSedTa4NtsGRkSQFXkI1iKHs4dTqJwcKZsnFrZOAKtLPiN1/oQTObLZw=="
  "resolved" "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.11.5.tgz"
  "version" "0.11.5"
  dependencies:
    "@antfu/utils" "^0.7.0"
    "@rollup/pluginutils" "^5.0.2"
    local-pkg "^0.4.2"
    magic-string "^0.26.7"
    unimport "^1.0.1"
    unplugin "^1.0.0"
    "local-pkg" "^0.4.2"
    "magic-string" "^0.26.7"
    "unimport" "^1.0.1"
    "unplugin" "^1.0.0"
unplugin@^1.0.0, unplugin@^1.0.1:
  version "1.6.0"
  resolved "https://registry.npmmirror.com/unplugin/-/unplugin-1.6.0.tgz"
  integrity sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==
"unplugin@^1.0.0", "unplugin@^1.0.1":
  "integrity" "sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ=="
  "resolved" "https://registry.npmmirror.com/unplugin/-/unplugin-1.6.0.tgz"
  "version" "1.6.0"
  dependencies:
    acorn "^8.11.2"
    chokidar "^3.5.3"
    webpack-sources "^3.2.3"
    webpack-virtual-modules "^0.6.1"
    "acorn" "^8.11.2"
    "chokidar" "^3.5.3"
    "webpack-sources" "^3.2.3"
    "webpack-virtual-modules" "^0.6.1"
vite-plugin-compression@^0.5.1:
  version "0.5.1"
  resolved "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz"
  integrity sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==
"vite-plugin-compression@^0.5.1":
  "integrity" "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg=="
  "resolved" "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz"
  "version" "0.5.1"
  dependencies:
    chalk "^4.1.2"
    debug "^4.3.3"
    fs-extra "^10.0.0"
    "chalk" "^4.1.2"
    "debug" "^4.3.3"
    "fs-extra" "^10.0.0"
vite-plugin-vue-setup-extend@^0.4.0:
  version "0.4.0"
  resolved "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz"
  integrity sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==
"vite-plugin-vue-setup-extend@^0.4.0":
  "integrity" "sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ=="
  "resolved" "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz"
  "version" "0.4.0"
  dependencies:
    "@vue/compiler-sfc" "^3.2.29"
    magic-string "^0.25.7"
    "magic-string" "^0.25.7"
vite@^5.0.0, vite@^5.2.12, vite@>=2.0.0:
  version "5.2.12"
  resolved "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz"
  integrity sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==
"vite@^5.0.0", "vite@^5.2.12", "vite@>=2.0.0":
  "integrity" "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA=="
  "resolved" "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz"
  "version" "5.2.12"
  dependencies:
    esbuild "^0.20.1"
    postcss "^8.4.38"
    rollup "^4.13.0"
    "esbuild" "^0.20.1"
    "postcss" "^8.4.38"
    "rollup" "^4.13.0"
  optionalDependencies:
    fsevents "~2.3.3"
    "fsevents" "~2.3.3"
vue-demi@*:
  version "0.14.6"
  resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz"
  integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
"vue-demi@*":
  "integrity" "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w=="
  "resolved" "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz"
  "version" "0.14.6"
vue-i18n@^9.1.9:
  version "9.2.2"
  resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz"
  integrity sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==
"vue-i18n@^9.1.9":
  "integrity" "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ=="
  "resolved" "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz"
  "version" "9.2.2"
  dependencies:
    "@intlify/core-base" "9.2.2"
    "@intlify/shared" "9.2.2"
    "@intlify/vue-devtools" "9.2.2"
    "@vue/devtools-api" "^6.2.1"
vue-router@^4.3.2:
  version "4.3.2"
  resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz"
  integrity sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==
"vue-router@^4.3.2":
  "integrity" "sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q=="
  "resolved" "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz"
  "version" "4.3.2"
  dependencies:
    "@vue/devtools-api" "^6.5.1"
vue@^3.0.0, "vue@^3.0.0-0 || ^2.6.0", vue@^3.0.5, vue@^3.2.0, vue@^3.2.25, vue@^3.2.47, vue@^3.4.27, vue@>=3.2.0, vue@3.4.27:
  version "3.4.27"
  resolved "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz"
  integrity sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==
"vue@^3.0.0", "vue@^3.0.0-0 || ^2.6.0", "vue@^3.0.5", "vue@^3.2.0", "vue@^3.2.25", "vue@^3.2.47", "vue@^3.4.27", "vue@>=3.2.0", "vue@3.4.27":
  "integrity" "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA=="
  "resolved" "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz"
  "version" "3.4.27"
  dependencies:
    "@vue/compiler-dom" "3.4.27"
    "@vue/compiler-sfc" "3.4.27"
@@ -1548,24 +1553,24 @@
    "@vue/server-renderer" "3.4.27"
    "@vue/shared" "3.4.27"
vuex@^4.1.0:
  version "4.1.0"
  resolved "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz"
  integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==
"vuex@^4.1.0":
  "integrity" "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ=="
  "resolved" "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz"
  "version" "4.1.0"
  dependencies:
    "@vue/devtools-api" "^6.0.0-beta.11"
webpack-sources@^3.2.3:
  version "3.2.3"
  resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz"
  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
"webpack-sources@^3.2.3":
  "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
  "resolved" "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz"
  "version" "3.2.3"
webpack-virtual-modules@^0.6.1:
  version "0.6.1"
  resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz"
  integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==
"webpack-virtual-modules@^0.6.1":
  "integrity" "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg=="
  "resolved" "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz"
  "version" "0.6.1"
wildcard@^1.1.0:
  version "1.1.2"
  resolved "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz"
  integrity sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==
"wildcard@^1.1.0":
  "integrity" "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng=="
  "resolved" "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz"
  "version" "1.1.2"